diff options
Diffstat (limited to 'src/Common/XmlPacket.cpp')
-rw-r--r-- | src/Common/XmlPacket.cpp | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/src/Common/XmlPacket.cpp b/src/Common/XmlPacket.cpp index 73dd87d..6e3d007 100644 --- a/src/Common/XmlPacket.cpp +++ b/src/Common/XmlPacket.cpp @@ -20,13 +20,10 @@ #include <config.h> #include "XmlPacket.h" +#include "Base64Encoder.h" #include <cstdlib> #include <cstring> -extern "C" { -#include "base64.h" -} - namespace Mad { namespace Common { @@ -38,10 +35,7 @@ void XmlPacket::Element::updateStr() { return; if(type == BINARY) { - char *base64Data; - base64_encode_alloc((char*)binData, value.var_size, &base64Data); - str = base64Data; - std::free(base64Data); + str = Base64Encoder::encode(std::vector<boost::uint8_t>((boost::uint8_t*)binData, ((boost::uint8_t*)binData)+value.var_size)); } else if(type != STRING) { std::ostringstream buf; @@ -99,7 +93,12 @@ XmlPacket::Element::Element(xmlNodePtr node) : elementNode(node), binData(0), ty if(!xmlStrcmp(typestr, (xmlChar*)"binary")) { type = BINARY; - base64_decode_alloc((char*)content, xmlStrlen(content), (char**)&binData, &value.var_size); + + std::vector<boost::uint8_t> v = Base64Encoder::decode(str); + + value.var_size = v.size(); + binData = std::malloc(value.var_size); + std::memcpy(binData, v.data(), value.var_size); } else if(!xmlStrcmp(typestr, (xmlChar*)"int")) { type = INT; @@ -215,17 +214,9 @@ bool XmlPacket::Entry::addBinary(const std::string &name, const void *data, size if(elements.find(name) != elements.end() || lists.find(name) != lists.end()) return false; - char *base64Data; + std::string base64Data = Base64Encoder::encode(std::vector<boost::uint8_t>((boost::uint8_t*)data, ((boost::uint8_t*)data)+size));; - base64_encode_alloc((const char*)data, size, &base64Data); - if(!base64Data) - return false; - - bool ret = add(name, std::string(base64Data), "binary"); - - std::free(base64Data); - - return ret; + return add(name, base64Data, "binary"); } XmlPacket::List::List(xmlNodePtr node) : Element(node, LIST) { |