Tue, 09 Jul 2013 17:16:26 +0200
replaced propfind parser with new libxml2 parser
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2013 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef SAXHANDLER_H #define SAXHANDLER_H #include "davparser.h" #include <xercesc/sax2/DefaultHandler.hpp> using namespace xercesc; /* stack */ #define XSTACK_PUSH(elm) xstack_push(&xmlStack, elm) #define XSTACK_POP() xstack_pop(&xmlStack) #define XSTACK_CUR() (xmlStack) ? (XmlElement*)xmlStack->data : NULL; void xstack_push(UcxDlist **stack, XmlElement *elm); XmlElement* xstack_pop(UcxDlist **stack); class PropfindHandler : public DefaultHandler { public: PropfindHandler(PropfindRequest *rq, pool_handle_t *p); virtual ~PropfindHandler(); void startElement( const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const Attributes& attrs); void endElement( const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname); void startDocument(); void endDocument(); private: PropfindRequest *davrq; pool_handle_t *pool; bool davPropTag; DavProperty *property; }; class ProppatchHandler : public DefaultHandler { public: ProppatchHandler(ProppatchRequest *rq, pool_handle_t *p); virtual ~ProppatchHandler(); void startElement( const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const Attributes& attrs); void endElement( const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname); void characters(const XMLCh *const chars, const XMLSize_t length); void startDocument(); void endDocument(); private: ProppatchRequest *davrq; pool_handle_t *pool; bool davPropTag; XmlElement *rootElement; XmlElement *newElement; UcxDlist *xmlStack; //DavProperty *property; int updateMode; /* 0 = set, 1 = remove, -1 = undefined */ }; #endif /* SAXHANDLER_H */