X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Frgw%2Frgw_xml.cc;fp=src%2Fceph%2Fsrc%2Frgw%2Frgw_xml.cc;h=0000000000000000000000000000000000000000;hb=7da45d65be36d36b880cc55c5036e96c24b53f00;hp=ff067a4f1da155bd069614cca37beaa3fa45f6da;hpb=691462d09d0987b47e112d6ee8740375df3c51b2;p=stor4nfv.git diff --git a/src/ceph/src/rgw/rgw_xml.cc b/src/ceph/src/rgw/rgw_xml.cc deleted file mode 100644 index ff067a4..0000000 --- a/src/ceph/src/rgw/rgw_xml.cc +++ /dev/null @@ -1,497 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -// vim: ts=8 sw=2 smarttab - -#include - -#include -#include - -#include - -#include "include/types.h" - -#include "rgw_common.h" -#include "rgw_xml.h" - -#define dout_subsys ceph_subsys_rgw - -using namespace std; - -XMLObjIter:: -XMLObjIter() -{ -} - -XMLObjIter:: -~XMLObjIter() -{ -} - -void XMLObjIter:: -set(const XMLObjIter::map_iter_t &_cur, const XMLObjIter::map_iter_t &_end) -{ - cur = _cur; - end = _end; -} - -XMLObj *XMLObjIter:: -get_next() -{ - XMLObj *obj = NULL; - if (cur != end) { - obj = cur->second; - ++cur; - } - return obj; -} - -ostream& operator<<(ostream &out, const XMLObj &obj) { - out << obj.obj_type << ": " << obj.data; - return out; -} - -XMLObj:: -~XMLObj() -{ -} - -bool XMLObj:: -xml_start(XMLObj *parent, const char *el, const char **attr) -{ - this->parent = parent; - obj_type = el; - for (int i = 0; attr[i]; i += 2) { - attr_map[attr[i]] = string(attr[i + 1]); - } - return true; -} - -bool XMLObj:: -xml_end(const char *el) -{ - return true; -} - -void XMLObj:: -xml_handle_data(const char *s, int len) -{ - data.append(s, len); -} - -string& XMLObj:: -XMLObj::get_data() -{ - return data; -} - -XMLObj *XMLObj:: -XMLObj::get_parent() -{ - return parent; -} - -void XMLObj:: -add_child(string el, XMLObj *obj) -{ - children.insert(pair(el, obj)); -} - -bool XMLObj:: -get_attr(string name, string& attr) -{ - map::iterator iter = attr_map.find(name); - if (iter == attr_map.end()) - return false; - attr = iter->second; - return true; -} - -XMLObjIter XMLObj:: -find(string name) -{ - XMLObjIter iter; - map::iterator first; - map::iterator last; - first = children.find(name); - if (first != children.end()) { - last = children.upper_bound(name); - }else - last = children.end(); - iter.set(first, last); - return iter; -} - -XMLObj *XMLObj:: -find_first(string name) -{ - XMLObjIter iter; - map::iterator first; - first = children.find(name); - if (first != children.end()) - return first->second; - return NULL; -} -static void xml_start(void *data, const char *el, const char **attr) { - RGWXMLParser *handler = static_cast(data); - - if (!handler->xml_start(el, attr)) - handler->set_failure(); -} - -RGWXMLParser:: -RGWXMLParser() : buf(NULL), buf_len(0), cur_obj(NULL), success(true) -{ - p = XML_ParserCreate(NULL); -} - -RGWXMLParser:: -~RGWXMLParser() -{ - XML_ParserFree(p); - - free(buf); - list::iterator iter; - for (iter = allocated_objs.begin(); iter != allocated_objs.end(); ++iter) { - XMLObj *obj = *iter; - delete obj; - } -} - - -bool RGWXMLParser::xml_start(const char *el, const char **attr) { - XMLObj * obj = alloc_obj(el); - if (!obj) { - unallocated_objs.push_back(XMLObj()); - obj = &unallocated_objs.back(); - } else { - allocated_objs.push_back(obj); - } - if (!obj->xml_start(cur_obj, el, attr)) - return false; - if (cur_obj) { - cur_obj->add_child(el, obj); - } else { - children.insert(pair(el, obj)); - } - cur_obj = obj; - - objs.push_back(obj); - return true; -} - -static void xml_end(void *data, const char *el) { - RGWXMLParser *handler = static_cast(data); - - if (!handler->xml_end(el)) - handler->set_failure(); -} - -bool RGWXMLParser::xml_end(const char *el) { - XMLObj *parent_obj = cur_obj->get_parent(); - if (!cur_obj->xml_end(el)) - return false; - cur_obj = parent_obj; - return true; -} - -static void handle_data(void *data, const char *s, int len) -{ - RGWXMLParser *handler = static_cast(data); - - handler->handle_data(s, len); -} - -void RGWXMLParser::handle_data(const char *s, int len) -{ - cur_obj->xml_handle_data(s, len); -} - - -bool RGWXMLParser::init() -{ - if (!p) { - return false; - } - XML_SetElementHandler(p, ::xml_start, ::xml_end); - XML_SetCharacterDataHandler(p, ::handle_data); - XML_SetUserData(p, (void *)this); - return true; -} - -bool RGWXMLParser::parse(const char *_buf, int len, int done) -{ - int pos = buf_len; - char *tmp_buf; - tmp_buf = (char *)realloc(buf, buf_len + len); - if (tmp_buf == NULL){ - free(buf); - buf = NULL; - return false; - } else { - buf = tmp_buf; - } - - memcpy(&buf[buf_len], _buf, len); - buf_len += len; - - success = true; - if (!XML_Parse(p, &buf[pos], len, done)) { - fprintf(stderr, "Parse error at line %d:\n%s\n", - (int)XML_GetCurrentLineNumber(p), - XML_ErrorString(XML_GetErrorCode(p))); - success = false; - } - - return success; -} - -void decode_xml_obj(unsigned long& val, XMLObj *obj) -{ - string& s = obj->get_data(); - const char *start = s.c_str(); - char *p; - - errno = 0; - val = strtoul(start, &p, 10); - - /* Check for various possible errors */ - - if ((errno == ERANGE && val == ULONG_MAX) || - (errno != 0 && val == 0)) { - throw RGWXMLDecoder::err("failed to number"); - } - - if (p == start) { - throw RGWXMLDecoder::err("failed to parse number"); - } - - while (*p != '\0') { - if (!isspace(*p)) { - throw RGWXMLDecoder::err("failed to parse number"); - } - p++; - } -} - - -void decode_xml_obj(long& val, XMLObj *obj) -{ - string s = obj->get_data(); - const char *start = s.c_str(); - char *p; - - errno = 0; - val = strtol(start, &p, 10); - - /* Check for various possible errors */ - - if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN)) || - (errno != 0 && val == 0)) { - throw RGWXMLDecoder::err("failed to parse number"); - } - - if (p == start) { - throw RGWXMLDecoder::err("failed to parse number"); - } - - while (*p != '\0') { - if (!isspace(*p)) { - throw RGWXMLDecoder::err("failed to parse number"); - } - p++; - } -} - -void decode_xml_obj(long long& val, XMLObj *obj) -{ - string s = obj->get_data(); - const char *start = s.c_str(); - char *p; - - errno = 0; - val = strtoll(start, &p, 10); - - /* Check for various possible errors */ - - if ((errno == ERANGE && (val == LLONG_MAX || val == LLONG_MIN)) || - (errno != 0 && val == 0)) { - throw RGWXMLDecoder::err("failed to parse number"); - } - - if (p == start) { - throw RGWXMLDecoder::err("failed to parse number"); - } - - while (*p != '\0') { - if (!isspace(*p)) { - throw RGWXMLDecoder::err("failed to parse number"); - } - p++; - } -} - -void decode_xml_obj(unsigned long long& val, XMLObj *obj) -{ - string s = obj->get_data(); - const char *start = s.c_str(); - char *p; - - errno = 0; - val = strtoull(start, &p, 10); - - /* Check for various possible errors */ - - if ((errno == ERANGE && val == ULLONG_MAX) || - (errno != 0 && val == 0)) { - throw RGWXMLDecoder::err("failed to number"); - } - - if (p == start) { - throw RGWXMLDecoder::err("failed to parse number"); - } - - while (*p != '\0') { - if (!isspace(*p)) { - throw RGWXMLDecoder::err("failed to parse number"); - } - p++; - } -} - -void decode_xml_obj(int& val, XMLObj *obj) -{ - long l; - decode_xml_obj(l, obj); -#if LONG_MAX > INT_MAX - if (l > INT_MAX || l < INT_MIN) { - throw RGWXMLDecoder::err("integer out of range"); - } -#endif - - val = (int)l; -} - -void decode_xml_obj(unsigned& val, XMLObj *obj) -{ - unsigned long l; - decode_xml_obj(l, obj); -#if ULONG_MAX > UINT_MAX - if (l > UINT_MAX) { - throw RGWXMLDecoder::err("unsigned integer out of range"); - } -#endif - - val = (unsigned)l; -} - -void decode_xml_obj(bool& val, XMLObj *obj) -{ - string s = obj->get_data(); - if (strcasecmp(s.c_str(), "true") == 0) { - val = true; - return; - } - if (strcasecmp(s.c_str(), "false") == 0) { - val = false; - return; - } - int i; - decode_xml_obj(i, obj); - val = (bool)i; -} - -void decode_xml_obj(bufferlist& val, XMLObj *obj) -{ - string s = obj->get_data(); - - bufferlist bl; - bl.append(s.c_str(), s.size()); - try { - val.decode_base64(bl); - } catch (buffer::error& err) { - throw RGWXMLDecoder::err("failed to decode base64"); - } -} - -void decode_xml_obj(utime_t& val, XMLObj *obj) -{ - string s = obj->get_data(); - uint64_t epoch; - uint64_t nsec; - int r = utime_t::parse_date(s, &epoch, &nsec); - if (r == 0) { - val = utime_t(epoch, nsec); - } else { - throw RGWXMLDecoder::err("failed to decode utime_t"); - } -} - -void encode_xml(const char *name, const string& val, Formatter *f) -{ - f->dump_string(name, val); -} - -void encode_xml(const char *name, const char *val, Formatter *f) -{ - f->dump_string(name, val); -} - -void encode_xml(const char *name, bool val, Formatter *f) -{ - string s; - if (val) - s = "True"; - else - s = "False"; - - f->dump_string(name, s); -} - -void encode_xml(const char *name, int val, Formatter *f) -{ - f->dump_int(name, val); -} - -void encode_xml(const char *name, long val, Formatter *f) -{ - f->dump_int(name, val); -} - -void encode_xml(const char *name, unsigned val, Formatter *f) -{ - f->dump_unsigned(name, val); -} - -void encode_xml(const char *name, unsigned long val, Formatter *f) -{ - f->dump_unsigned(name, val); -} - -void encode_xml(const char *name, unsigned long long val, Formatter *f) -{ - f->dump_unsigned(name, val); -} - -void encode_xml(const char *name, long long val, Formatter *f) -{ - f->dump_int(name, val); -} - -void encode_xml(const char *name, const utime_t& val, Formatter *f) -{ - val.gmtime(f->dump_stream(name)); -} - -void encode_xml(const char *name, const bufferlist& bl, Formatter *f) -{ - /* need to copy data from bl, as it is const bufferlist */ - bufferlist src = bl; - - bufferlist b64; - src.encode_base64(b64); - - string s(b64.c_str(), b64.length()); - - encode_xml(name, s, f); -} -