18590a0fdSAndre Fischer /************************************************************** 28590a0fdSAndre Fischer * 38590a0fdSAndre Fischer * Licensed to the Apache Software Foundation (ASF) under one 48590a0fdSAndre Fischer * or more contributor license agreements. See the NOTICE file 58590a0fdSAndre Fischer * distributed with this work for additional information 68590a0fdSAndre Fischer * regarding copyright ownership. The ASF licenses this file 78590a0fdSAndre Fischer * to you under the Apache License, Version 2.0 (the 88590a0fdSAndre Fischer * "License"); you may not use this file except in compliance 98590a0fdSAndre Fischer * with the License. You may obtain a copy of the License at 108590a0fdSAndre Fischer * 118590a0fdSAndre Fischer * http://www.apache.org/licenses/LICENSE-2.0 128590a0fdSAndre Fischer * 138590a0fdSAndre Fischer * Unless required by applicable law or agreed to in writing, 148590a0fdSAndre Fischer * software distributed under the License is distributed on an 158590a0fdSAndre Fischer * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 168590a0fdSAndre Fischer * KIND, either express or implied. See the License for the 178590a0fdSAndre Fischer * specific language governing permissions and limitations 188590a0fdSAndre Fischer * under the License. 198590a0fdSAndre Fischer * 208590a0fdSAndre Fischer *************************************************************/ 218590a0fdSAndre Fischer 228590a0fdSAndre Fischer // MARKER(update_precomp.py): autogen include statement, do not remove 238590a0fdSAndre Fischer #include "precompiled_ucb.hxx" 248590a0fdSAndre Fischer 25c1c10f68SAriel Constenla-Haile #include "webdavresponseparser.hxx" 268590a0fdSAndre Fischer #include <com/sun/star/xml/sax/XDocumentHandler.hpp> 278590a0fdSAndre Fischer #include <cppuhelper/implbase2.hxx> 288590a0fdSAndre Fischer #include <com/sun/star/xml/sax/XParser.hpp> 298590a0fdSAndre Fischer #include <com/sun/star/xml/sax/InputSource.hpp> 308590a0fdSAndre Fischer #include <comphelper/processfactory.hxx> 318590a0fdSAndre Fischer #include <comphelper/seqstream.hxx> 32*3edf6992SAndrea Pescetti #include <com/sun/star/ucb/Lock.hpp> 33*3edf6992SAndrea Pescetti #include <com/sun/star/ucb/LockDepth.hpp> 348590a0fdSAndre Fischer #include <com/sun/star/ucb/LockEntry.hpp> 358590a0fdSAndre Fischer #include <com/sun/star/ucb/LockScope.hpp> 368590a0fdSAndre Fischer #include <com/sun/star/ucb/LockType.hpp> 378590a0fdSAndre Fischer #include <map> 388590a0fdSAndre Fischer #include <hash_map> 398590a0fdSAndre Fischer 408590a0fdSAndre Fischer ////////////////////////////////////////////////////////////////////////////// 418590a0fdSAndre Fischer 428590a0fdSAndre Fischer using namespace com::sun::star; 438590a0fdSAndre Fischer 448590a0fdSAndre Fischer ////////////////////////////////////////////////////////////////////////////// 458590a0fdSAndre Fischer // WebDAVNamespace enum and StringToEnum converter 468590a0fdSAndre Fischer 478590a0fdSAndre Fischer namespace 488590a0fdSAndre Fischer { 498590a0fdSAndre Fischer enum WebDAVNamespace 508590a0fdSAndre Fischer { 518590a0fdSAndre Fischer WebDAVNamespace_unknown = 0, 528590a0fdSAndre Fischer WebDAVNamespace_DAV, 538590a0fdSAndre Fischer WebDAVNamespace_ucb_openoffice_org_dav_props, 548590a0fdSAndre Fischer 558590a0fdSAndre Fischer WebDAVNamespace_last 568590a0fdSAndre Fischer }; 578590a0fdSAndre Fischer StrToWebDAVNamespace(const rtl::OUString & rStr)588590a0fdSAndre Fischer WebDAVNamespace StrToWebDAVNamespace(const rtl::OUString& rStr) 598590a0fdSAndre Fischer { 608590a0fdSAndre Fischer static ::rtl::OUString aStrDAV(::rtl::OUString::createFromAscii("DAV:")); 618590a0fdSAndre Fischer static ::rtl::OUString aStrUcbOpenofficeOrgDAVProps(::rtl::OUString::createFromAscii("http://ucb.openoffice.org/dav/props/")); 628590a0fdSAndre Fischer 638590a0fdSAndre Fischer if(rStr.equals(aStrDAV)) 648590a0fdSAndre Fischer { 658590a0fdSAndre Fischer return WebDAVNamespace_DAV; 668590a0fdSAndre Fischer } 678590a0fdSAndre Fischer else if(rStr.equals(aStrUcbOpenofficeOrgDAVProps)) 688590a0fdSAndre Fischer { 698590a0fdSAndre Fischer return WebDAVNamespace_ucb_openoffice_org_dav_props; 708590a0fdSAndre Fischer } 718590a0fdSAndre Fischer 728590a0fdSAndre Fischer return WebDAVNamespace_unknown; 738590a0fdSAndre Fischer } 748590a0fdSAndre Fischer } // end of anonymous namespace 758590a0fdSAndre Fischer 768590a0fdSAndre Fischer ////////////////////////////////////////////////////////////////////////////// 778590a0fdSAndre Fischer // WebDAVName enum and StringToEnum converter using hash_map 788590a0fdSAndre Fischer 798590a0fdSAndre Fischer namespace 808590a0fdSAndre Fischer { 818590a0fdSAndre Fischer enum WebDAVName 828590a0fdSAndre Fischer { 838590a0fdSAndre Fischer WebDAVName_unknown = 0, 848590a0fdSAndre Fischer WebDAVName_multistatus, 858590a0fdSAndre Fischer WebDAVName_response, 868590a0fdSAndre Fischer WebDAVName_href, 878590a0fdSAndre Fischer WebDAVName_propstat, 888590a0fdSAndre Fischer WebDAVName_prop, 898590a0fdSAndre Fischer WebDAVName_resourcetype, 908590a0fdSAndre Fischer WebDAVName_collection, 918590a0fdSAndre Fischer WebDAVName_getcontenttype, 928590a0fdSAndre Fischer WebDAVName_supportedlock, 938590a0fdSAndre Fischer WebDAVName_lockentry, 948590a0fdSAndre Fischer WebDAVName_lockscope, 958590a0fdSAndre Fischer WebDAVName_exclusive, 968590a0fdSAndre Fischer WebDAVName_locktype, 978590a0fdSAndre Fischer WebDAVName_write, 988590a0fdSAndre Fischer WebDAVName_shared, 99*3edf6992SAndrea Pescetti WebDAVName_lockdiscovery, 100*3edf6992SAndrea Pescetti WebDAVName_activelock, 101*3edf6992SAndrea Pescetti WebDAVName_depth, 102*3edf6992SAndrea Pescetti WebDAVName_owner, 103*3edf6992SAndrea Pescetti WebDAVName_timeout, 104*3edf6992SAndrea Pescetti WebDAVName_locktoken, 1058590a0fdSAndre Fischer WebDAVName_status, 1068590a0fdSAndre Fischer WebDAVName_getlastmodified, 1078590a0fdSAndre Fischer WebDAVName_creationdate, 1088590a0fdSAndre Fischer WebDAVName_getcontentlength, 1098590a0fdSAndre Fischer 1108590a0fdSAndre Fischer WebDAVName_last 1118590a0fdSAndre Fischer }; 1128590a0fdSAndre Fischer StrToWebDAVName(const rtl::OUString & rStr)1138590a0fdSAndre Fischer WebDAVName StrToWebDAVName(const rtl::OUString& rStr) 1148590a0fdSAndre Fischer { 1158590a0fdSAndre Fischer typedef std::hash_map< rtl::OUString, WebDAVName, rtl::OUStringHash > WebDAVNameMapper; 1168590a0fdSAndre Fischer typedef std::pair< rtl::OUString, WebDAVName > WebDAVNameValueType; 1178590a0fdSAndre Fischer static WebDAVNameMapper aWebDAVNameMapperList; 1188590a0fdSAndre Fischer 1198590a0fdSAndre Fischer if(aWebDAVNameMapperList.empty()) 1208590a0fdSAndre Fischer { 1218590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("multistatus"), WebDAVName_multistatus)); 1228590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("response"), WebDAVName_response)); 1238590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("href"), WebDAVName_href)); 1248590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("propstat"), WebDAVName_propstat)); 1258590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("prop"), WebDAVName_prop)); 1268590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("resourcetype"), WebDAVName_resourcetype)); 1278590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("collection"), WebDAVName_collection)); 1288590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("getcontenttype"), WebDAVName_getcontenttype)); 1298590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("supportedlock"), WebDAVName_supportedlock)); 1308590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("lockentry"), WebDAVName_lockentry)); 1318590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("lockscope"), WebDAVName_lockscope)); 1328590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("exclusive"), WebDAVName_exclusive)); 1338590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("locktype"), WebDAVName_locktype)); 1348590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("write"), WebDAVName_write)); 1358590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("shared"), WebDAVName_shared)); 136*3edf6992SAndrea Pescetti aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("lockdiscovery"), WebDAVName_lockdiscovery)); 137*3edf6992SAndrea Pescetti aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("activelock"), WebDAVName_activelock)); 138*3edf6992SAndrea Pescetti aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("depth"), WebDAVName_depth)); 139*3edf6992SAndrea Pescetti aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("owner"), WebDAVName_owner)); 140*3edf6992SAndrea Pescetti aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("timeout"), WebDAVName_timeout)); 141*3edf6992SAndrea Pescetti aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("locktoken"), WebDAVName_locktoken)); 1428590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("status"), WebDAVName_status)); 1438590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("getlastmodified"), WebDAVName_getlastmodified)); 1448590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("creationdate"), WebDAVName_creationdate)); 1458590a0fdSAndre Fischer aWebDAVNameMapperList.insert(WebDAVNameValueType(rtl::OUString::createFromAscii("getcontentlength"), WebDAVName_getcontentlength)); 1468590a0fdSAndre Fischer } 1478590a0fdSAndre Fischer 1488590a0fdSAndre Fischer const WebDAVNameMapper::const_iterator aResult(aWebDAVNameMapperList.find(rStr)); 1498590a0fdSAndre Fischer 1508590a0fdSAndre Fischer if(aResult == aWebDAVNameMapperList.end()) 1518590a0fdSAndre Fischer { 1528590a0fdSAndre Fischer return WebDAVName_unknown; 1538590a0fdSAndre Fischer } 1548590a0fdSAndre Fischer else 1558590a0fdSAndre Fischer { 1568590a0fdSAndre Fischer return aResult->second; 1578590a0fdSAndre Fischer } 1588590a0fdSAndre Fischer } 1598590a0fdSAndre Fischer } // end of anonymous namespace 1608590a0fdSAndre Fischer 1618590a0fdSAndre Fischer ////////////////////////////////////////////////////////////////////////////// 1628590a0fdSAndre Fischer // WebDAVContext, holding information for each start/endElement pair 1638590a0fdSAndre Fischer 1648590a0fdSAndre Fischer namespace 1658590a0fdSAndre Fischer { 1668590a0fdSAndre Fischer typedef std::map< ::rtl::OUString, ::rtl::OUString > NamespaceMap; 1678590a0fdSAndre Fischer typedef std::pair< const ::rtl::OUString, ::rtl::OUString > NamespaceValueType; 1688590a0fdSAndre Fischer 1698590a0fdSAndre Fischer class WebDAVContext 1708590a0fdSAndre Fischer { 1718590a0fdSAndre Fischer private: 1728590a0fdSAndre Fischer WebDAVContext* mpParent; 1738590a0fdSAndre Fischer NamespaceMap maNamespaceMap; 1748590a0fdSAndre Fischer ::rtl::OUString maWhiteSpace; 1758590a0fdSAndre Fischer 1768590a0fdSAndre Fischer ::rtl::OUString maNamespace; 1778590a0fdSAndre Fischer ::rtl::OUString maName; 1788590a0fdSAndre Fischer 1798590a0fdSAndre Fischer WebDAVNamespace maWebDAVNamespace; 1808590a0fdSAndre Fischer WebDAVName maWebDAVName; 1818590a0fdSAndre Fischer 1828590a0fdSAndre Fischer // local helpers 1838590a0fdSAndre Fischer void parseForNamespaceTokens(const uno::Reference< xml::sax::XAttributeList >& xAttribs); 1848590a0fdSAndre Fischer ::rtl::OUString mapNamespaceToken(const ::rtl::OUString& rToken) const; 1858590a0fdSAndre Fischer void splitName(const ::rtl::OUString& rSource); 1868590a0fdSAndre Fischer 1878590a0fdSAndre Fischer public: 1888590a0fdSAndre Fischer WebDAVContext(WebDAVContext* pParent, const ::rtl::OUString& aName, const uno::Reference< xml::sax::XAttributeList >& xAttribs); 1898590a0fdSAndre Fischer ~WebDAVContext(); 1908590a0fdSAndre Fischer getParent() const1918590a0fdSAndre Fischer WebDAVContext* getParent() const { return mpParent; } getWhiteSpace()1928590a0fdSAndre Fischer ::rtl::OUString& getWhiteSpace() { return maWhiteSpace; } setWhiteSpace(const::rtl::OUString & rNew)1938590a0fdSAndre Fischer void setWhiteSpace(const ::rtl::OUString& rNew) { maWhiteSpace = rNew; } 1948590a0fdSAndre Fischer getNamespace() const1958590a0fdSAndre Fischer const ::rtl::OUString& getNamespace() const { return maNamespace; } getName() const1968590a0fdSAndre Fischer const ::rtl::OUString& getName() const { return maName; } getWebDAVNamespace() const197a180b29cSHerbert Dürr WebDAVNamespace getWebDAVNamespace() const { return maWebDAVNamespace; } getWebDAVName() const198a180b29cSHerbert Dürr WebDAVName getWebDAVName() const { return maWebDAVName; } 1998590a0fdSAndre Fischer }; 2008590a0fdSAndre Fischer parseForNamespaceTokens(const uno::Reference<xml::sax::XAttributeList> & xAttribs)2018590a0fdSAndre Fischer void WebDAVContext::parseForNamespaceTokens(const uno::Reference< xml::sax::XAttributeList >& xAttribs) 2028590a0fdSAndre Fischer { 2038590a0fdSAndre Fischer const sal_Int16 nAttributes(xAttribs->getLength()); 2048590a0fdSAndre Fischer static ::rtl::OUString aStrXmlns(::rtl::OUString::createFromAscii("xmlns")); 2058590a0fdSAndre Fischer 2068590a0fdSAndre Fischer for(sal_Int16 a(0); a < nAttributes; a++) 2078590a0fdSAndre Fischer { 2088590a0fdSAndre Fischer const ::rtl::OUString aName(xAttribs->getNameByIndex(a)); 2098590a0fdSAndre Fischer const sal_Int32 nLen(aName.getLength()); 2108590a0fdSAndre Fischer 2118590a0fdSAndre Fischer if(nLen) 2128590a0fdSAndre Fischer { 2138590a0fdSAndre Fischer if(aName.match(aStrXmlns, 0)) 2148590a0fdSAndre Fischer { 2158590a0fdSAndre Fischer const sal_Int32 nIndex(aName.indexOf(sal_Unicode(':'), 0)); 2168590a0fdSAndre Fischer 2178590a0fdSAndre Fischer if(-1 != nIndex && nIndex + 1 < nLen) 2188590a0fdSAndre Fischer { 2198590a0fdSAndre Fischer const ::rtl::OUString aToken(aName.copy(nIndex + 1)); 2208590a0fdSAndre Fischer 2218590a0fdSAndre Fischer maNamespaceMap.insert(NamespaceValueType(aToken, xAttribs->getValueByIndex(a))); 2228590a0fdSAndre Fischer } 2238590a0fdSAndre Fischer } 2248590a0fdSAndre Fischer } 2258590a0fdSAndre Fischer } 2268590a0fdSAndre Fischer } 2278590a0fdSAndre Fischer mapNamespaceToken(const::rtl::OUString & rToken) const2288590a0fdSAndre Fischer ::rtl::OUString WebDAVContext::mapNamespaceToken(const ::rtl::OUString& rToken) const 2298590a0fdSAndre Fischer { 2308590a0fdSAndre Fischer NamespaceMap::const_iterator iter = maNamespaceMap.find(rToken); 2318590a0fdSAndre Fischer 2328590a0fdSAndre Fischer if(maNamespaceMap.end() == iter) 2338590a0fdSAndre Fischer { 2348590a0fdSAndre Fischer if(getParent()) 2358590a0fdSAndre Fischer { 2368590a0fdSAndre Fischer return getParent()->mapNamespaceToken(rToken); 2378590a0fdSAndre Fischer } 2388590a0fdSAndre Fischer else 2398590a0fdSAndre Fischer { 2408590a0fdSAndre Fischer return rToken; 2418590a0fdSAndre Fischer } 2428590a0fdSAndre Fischer } 2438590a0fdSAndre Fischer else 2448590a0fdSAndre Fischer { 2458590a0fdSAndre Fischer return (*iter).second; 2468590a0fdSAndre Fischer } 2478590a0fdSAndre Fischer } 2488590a0fdSAndre Fischer splitName(const::rtl::OUString & rSource)2498590a0fdSAndre Fischer void WebDAVContext::splitName(const ::rtl::OUString& rSource) 2508590a0fdSAndre Fischer { 2518590a0fdSAndre Fischer const sal_Int32 nLen(rSource.getLength()); 2528590a0fdSAndre Fischer maNamespace = ::rtl::OUString(); 2538590a0fdSAndre Fischer maName = rSource; 2548590a0fdSAndre Fischer 2558590a0fdSAndre Fischer if(nLen) 2568590a0fdSAndre Fischer { 2578590a0fdSAndre Fischer const sal_Int32 nIndex(rSource.indexOf(sal_Unicode(':'), 0)); 2588590a0fdSAndre Fischer 2598590a0fdSAndre Fischer if(-1 != nIndex && nIndex > 0 && nIndex + 1 < nLen) 2608590a0fdSAndre Fischer { 2618590a0fdSAndre Fischer maNamespace = mapNamespaceToken(rSource.copy(0, nIndex)); 2628590a0fdSAndre Fischer maName = rSource.copy(nIndex + 1); 2638590a0fdSAndre Fischer } 2648590a0fdSAndre Fischer } 2658590a0fdSAndre Fischer } 2668590a0fdSAndre Fischer WebDAVContext(WebDAVContext * pParent,const::rtl::OUString & aName,const uno::Reference<xml::sax::XAttributeList> & xAttribs)2678590a0fdSAndre Fischer WebDAVContext::WebDAVContext(WebDAVContext* pParent, const ::rtl::OUString& aName, const uno::Reference< xml::sax::XAttributeList >& xAttribs) 2688590a0fdSAndre Fischer : mpParent(pParent), 2698590a0fdSAndre Fischer maNamespaceMap(), 2708590a0fdSAndre Fischer maWhiteSpace(), 2718590a0fdSAndre Fischer maNamespace(), 2728590a0fdSAndre Fischer maName(), 2738590a0fdSAndre Fischer maWebDAVNamespace(WebDAVNamespace_unknown), 2748590a0fdSAndre Fischer maWebDAVName(WebDAVName_unknown) 2758590a0fdSAndre Fischer { 2768590a0fdSAndre Fischer const sal_Int16 nAttributes(xAttribs->getLength()); 2778590a0fdSAndre Fischer 2788590a0fdSAndre Fischer if(nAttributes) 2798590a0fdSAndre Fischer { 2808590a0fdSAndre Fischer // parse evtl. namespace entries 2818590a0fdSAndre Fischer parseForNamespaceTokens(xAttribs); 2828590a0fdSAndre Fischer } 2838590a0fdSAndre Fischer 2848590a0fdSAndre Fischer // split name to namespace and name 2858590a0fdSAndre Fischer splitName(aName); 2868590a0fdSAndre Fischer 2878590a0fdSAndre Fischer // evaluate enums for namespace and name 2888590a0fdSAndre Fischer maWebDAVNamespace = StrToWebDAVNamespace(maNamespace); 2898590a0fdSAndre Fischer maWebDAVName = StrToWebDAVName(maName); 2908590a0fdSAndre Fischer } 2918590a0fdSAndre Fischer ~WebDAVContext()2928590a0fdSAndre Fischer WebDAVContext::~WebDAVContext() 2938590a0fdSAndre Fischer { 2948590a0fdSAndre Fischer } 2958590a0fdSAndre Fischer } // end of anonymous namespace 2968590a0fdSAndre Fischer 2978590a0fdSAndre Fischer ////////////////////////////////////////////////////////////////////////////// 2988590a0fdSAndre Fischer // the Xml parser itself 2998590a0fdSAndre Fischer 3008590a0fdSAndre Fischer namespace 3018590a0fdSAndre Fischer { 3028590a0fdSAndre Fischer enum WebDAVResponseParserMode 3038590a0fdSAndre Fischer { 3048590a0fdSAndre Fischer WebDAVResponseParserMode_PropFind = 0, 305*3edf6992SAndrea Pescetti WebDAVResponseParserMode_PropName, 306*3edf6992SAndrea Pescetti WebDAVResponseParserMode_LockResponse 3078590a0fdSAndre Fischer }; 3088590a0fdSAndre Fischer 3098590a0fdSAndre Fischer class WebDAVResponseParser : public cppu::WeakImplHelper1< com::sun::star::xml::sax::XDocumentHandler > 3108590a0fdSAndre Fischer { 3118590a0fdSAndre Fischer private: 3128590a0fdSAndre Fischer std::vector< http_dav_ucp::DAVResource > maResult_PropFind; 3138590a0fdSAndre Fischer std::vector< http_dav_ucp::DAVResourceInfo > maResult_PropName; 314*3edf6992SAndrea Pescetti http_dav_ucp::DAVPropertyValue maResult_Lock; 3158590a0fdSAndre Fischer 3168590a0fdSAndre Fischer WebDAVContext* mpContext; 3178590a0fdSAndre Fischer ::rtl::OUString maHref; 318*3edf6992SAndrea Pescetti ::rtl::OUString maHrefLocks; //this is used for locks, when lockdiscoveryactive 319*3edf6992SAndrea Pescetti 3208590a0fdSAndre Fischer ::rtl::OUString maStatus; 3218590a0fdSAndre Fischer std::vector< http_dav_ucp::DAVPropertyValue > maResponseProperties; 3228590a0fdSAndre Fischer std::vector< http_dav_ucp::DAVPropertyValue > maPropStatProperties; 3238590a0fdSAndre Fischer std::vector< ::rtl::OUString > maResponseNames; 3248590a0fdSAndre Fischer std::vector< ::rtl::OUString > maPropStatNames; 325*3edf6992SAndrea Pescetti uno::Sequence< ::rtl::OUString > maLockTokens; 3268590a0fdSAndre Fischer uno::Sequence< ucb::LockEntry > maLockEntries; 327*3edf6992SAndrea Pescetti uno::Sequence< ucb::Lock > maLocks; //the returned locks following a lockdiscovery request 3288590a0fdSAndre Fischer ucb::LockScope maLockScope; 3298590a0fdSAndre Fischer ucb::LockType maLockType; 330*3edf6992SAndrea Pescetti ucb::LockDepth maLockDepth; 331*3edf6992SAndrea Pescetti ::rtl::OUString maLockOwner; 332*3edf6992SAndrea Pescetti sal_Int64 maLockTimeout; 333*3edf6992SAndrea Pescetti ::rtl::OUString maLockToken; 334*3edf6992SAndrea Pescetti 3358590a0fdSAndre Fischer WebDAVResponseParserMode meWebDAVResponseParserMode; 3368590a0fdSAndre Fischer 3378590a0fdSAndre Fischer // bitfield 3388590a0fdSAndre Fischer bool mbResourceTypeCollection : 1; 3398590a0fdSAndre Fischer bool mbLockScopeSet : 1; 3408590a0fdSAndre Fischer bool mbLockTypeSet : 1; 341*3edf6992SAndrea Pescetti bool mbLockTokenSet : 1; 342*3edf6992SAndrea Pescetti //TODO: add other flag to manage reading od token, depth, timeout, owner 343*3edf6992SAndrea Pescetti bool mbLockDiscoveryActive : 1; 3448590a0fdSAndre Fischer 3458590a0fdSAndre Fischer // local helpers whitespaceIsAvailable() const3468590a0fdSAndre Fischer bool whitespaceIsAvailable() const 3478590a0fdSAndre Fischer { 3488590a0fdSAndre Fischer return mpContext && mpContext->getWhiteSpace().getLength(); 3498590a0fdSAndre Fischer } hasParent(WebDAVName aWebDAVName) const3508590a0fdSAndre Fischer bool hasParent(WebDAVName aWebDAVName) const 3518590a0fdSAndre Fischer { 3528590a0fdSAndre Fischer return mpContext && mpContext->getParent() && aWebDAVName == mpContext->getParent()->getWebDAVName(); 3538590a0fdSAndre Fischer } propertyIsReady() const3548590a0fdSAndre Fischer bool propertyIsReady() const 3558590a0fdSAndre Fischer { 3568590a0fdSAndre Fischer return hasParent(WebDAVName_prop) && whitespaceIsAvailable(); 3578590a0fdSAndre Fischer } isCollectingProperties() const3588590a0fdSAndre Fischer bool isCollectingProperties() const 3598590a0fdSAndre Fischer { 3608590a0fdSAndre Fischer return WebDAVResponseParserMode_PropFind == meWebDAVResponseParserMode; 3618590a0fdSAndre Fischer } isCollectingPropNames() const3628590a0fdSAndre Fischer bool isCollectingPropNames() const 3638590a0fdSAndre Fischer { 3648590a0fdSAndre Fischer return WebDAVResponseParserMode_PropName == meWebDAVResponseParserMode; 3658590a0fdSAndre Fischer } isWaitingLockResponse() const366*3edf6992SAndrea Pescetti bool isWaitingLockResponse() const 367*3edf6992SAndrea Pescetti { 368*3edf6992SAndrea Pescetti return WebDAVResponseParserMode_LockResponse == meWebDAVResponseParserMode; 369*3edf6992SAndrea Pescetti } collectThisPropertyAsName() const3708590a0fdSAndre Fischer bool collectThisPropertyAsName() const 3718590a0fdSAndre Fischer { 3728590a0fdSAndre Fischer return isCollectingPropNames() && hasParent(WebDAVName_prop); 3738590a0fdSAndre Fischer } pop_context()3748590a0fdSAndre Fischer void pop_context() 3758590a0fdSAndre Fischer { 3768590a0fdSAndre Fischer if(mpContext) 3778590a0fdSAndre Fischer { 3788590a0fdSAndre Fischer WebDAVContext* pTemp = mpContext; 3798590a0fdSAndre Fischer mpContext = mpContext->getParent(); 3808590a0fdSAndre Fischer delete pTemp; 3818590a0fdSAndre Fischer } 3828590a0fdSAndre Fischer else 3838590a0fdSAndre Fischer { 3848590a0fdSAndre Fischer OSL_ENSURE(false, "Parser context pop without context (!)"); 3858590a0fdSAndre Fischer } 3868590a0fdSAndre Fischer } 3878590a0fdSAndre Fischer 3888590a0fdSAndre Fischer public: 3898590a0fdSAndre Fischer WebDAVResponseParser(WebDAVResponseParserMode eWebDAVResponseParserMode); 3908590a0fdSAndre Fischer ~WebDAVResponseParser(); 3918590a0fdSAndre Fischer 3928590a0fdSAndre Fischer // Methods XDocumentHandler 3938590a0fdSAndre Fischer virtual void SAL_CALL startDocument( ) throw (xml::sax::SAXException, uno::RuntimeException); 3948590a0fdSAndre Fischer virtual void SAL_CALL endDocument( ) throw (xml::sax::SAXException, uno::RuntimeException); 395*3edf6992SAndrea Pescetti virtual void SAL_CALL startElement( const ::rtl::OUString& aName, const uno::Reference< xml::sax::XAttributeList >& xAttribs ) 396*3edf6992SAndrea Pescetti throw (xml::sax::SAXException, uno::RuntimeException); 3978590a0fdSAndre Fischer virtual void SAL_CALL endElement( const ::rtl::OUString& aName ) throw (xml::sax::SAXException, uno::RuntimeException); 3988590a0fdSAndre Fischer virtual void SAL_CALL characters( const ::rtl::OUString& aChars ) throw (xml::sax::SAXException, uno::RuntimeException); 3998590a0fdSAndre Fischer virtual void SAL_CALL ignorableWhitespace( const ::rtl::OUString& aWhitespaces ) throw (xml::sax::SAXException, uno::RuntimeException); 4008590a0fdSAndre Fischer virtual void SAL_CALL processingInstruction( const ::rtl::OUString& aTarget, const ::rtl::OUString& aData ) throw (xml::sax::SAXException, uno::RuntimeException); 4018590a0fdSAndre Fischer virtual void SAL_CALL setDocumentLocator( const uno::Reference< xml::sax::XLocator >& xLocator ) throw (xml::sax::SAXException, uno::RuntimeException); 4028590a0fdSAndre Fischer getResult_PropFind() const4038590a0fdSAndre Fischer const std::vector< http_dav_ucp::DAVResource >& getResult_PropFind() const { return maResult_PropFind; } getResult_PropName() const4048590a0fdSAndre Fischer const std::vector< http_dav_ucp::DAVResourceInfo >& getResult_PropName() const { return maResult_PropName; } getResult_Lock() const405*3edf6992SAndrea Pescetti const http_dav_ucp::DAVPropertyValue& getResult_Lock() const { return maResult_Lock; } 4068590a0fdSAndre Fischer }; 4078590a0fdSAndre Fischer WebDAVResponseParser(WebDAVResponseParserMode eWebDAVResponseParserMode)4088590a0fdSAndre Fischer WebDAVResponseParser::WebDAVResponseParser(WebDAVResponseParserMode eWebDAVResponseParserMode) 4098590a0fdSAndre Fischer : maResult_PropFind(), 4108590a0fdSAndre Fischer maResult_PropName(), 411*3edf6992SAndrea Pescetti maResult_Lock(), 4128590a0fdSAndre Fischer mpContext(0), 4138590a0fdSAndre Fischer maHref(), 414*3edf6992SAndrea Pescetti maHrefLocks(), 4158590a0fdSAndre Fischer maStatus(), 4168590a0fdSAndre Fischer maResponseProperties(), 4178590a0fdSAndre Fischer maPropStatProperties(), 4188590a0fdSAndre Fischer maResponseNames(), 4198590a0fdSAndre Fischer maPropStatNames(), 420*3edf6992SAndrea Pescetti maLockTokens(), 4218590a0fdSAndre Fischer maLockEntries(), 422*3edf6992SAndrea Pescetti maLocks(), 4238590a0fdSAndre Fischer maLockScope(ucb::LockScope_EXCLUSIVE), 4248590a0fdSAndre Fischer maLockType(ucb::LockType_WRITE), 425*3edf6992SAndrea Pescetti maLockDepth(ucb::LockDepth_ZERO), 426*3edf6992SAndrea Pescetti maLockOwner(), 427*3edf6992SAndrea Pescetti maLockTimeout(0), 4288590a0fdSAndre Fischer meWebDAVResponseParserMode(eWebDAVResponseParserMode), 4298590a0fdSAndre Fischer mbResourceTypeCollection(false), 4308590a0fdSAndre Fischer mbLockScopeSet(false), 431*3edf6992SAndrea Pescetti mbLockTypeSet(false), 432*3edf6992SAndrea Pescetti mbLockDiscoveryActive(false) 4338590a0fdSAndre Fischer { 4348590a0fdSAndre Fischer } 4358590a0fdSAndre Fischer ~WebDAVResponseParser()4368590a0fdSAndre Fischer WebDAVResponseParser::~WebDAVResponseParser() 4378590a0fdSAndre Fischer { 4388590a0fdSAndre Fischer OSL_ENSURE(!mpContext, "Parser destructed with existing content (!)"); 4398590a0fdSAndre Fischer while(mpContext) 4408590a0fdSAndre Fischer { 4418590a0fdSAndre Fischer pop_context(); 4428590a0fdSAndre Fischer } 4438590a0fdSAndre Fischer } 4448590a0fdSAndre Fischer startDocument()4458590a0fdSAndre Fischer void SAL_CALL WebDAVResponseParser::startDocument( ) throw (xml::sax::SAXException, uno::RuntimeException) 4468590a0fdSAndre Fischer { 4478590a0fdSAndre Fischer OSL_ENSURE(!mpContext, "Parser start with existing content (!)"); 4488590a0fdSAndre Fischer } 4498590a0fdSAndre Fischer endDocument()4508590a0fdSAndre Fischer void SAL_CALL WebDAVResponseParser::endDocument( ) throw (xml::sax::SAXException, uno::RuntimeException) 4518590a0fdSAndre Fischer { 4528590a0fdSAndre Fischer OSL_ENSURE(!mpContext, "Parser end with existing content (!)"); 4538590a0fdSAndre Fischer } 4548590a0fdSAndre Fischer startElement(const::rtl::OUString & aName,const uno::Reference<xml::sax::XAttributeList> & xAttribs)455*3edf6992SAndrea Pescetti void SAL_CALL WebDAVResponseParser::startElement( const ::rtl::OUString& aName, const uno::Reference< xml::sax::XAttributeList >& xAttribs ) 456*3edf6992SAndrea Pescetti throw (xml::sax::SAXException, uno::RuntimeException) 4578590a0fdSAndre Fischer { 4588590a0fdSAndre Fischer const sal_Int32 nLen(aName.getLength()); 4598590a0fdSAndre Fischer 4608590a0fdSAndre Fischer if(nLen) 4618590a0fdSAndre Fischer { 4628590a0fdSAndre Fischer // create new context (push) 4638590a0fdSAndre Fischer mpContext = new WebDAVContext(mpContext, aName, xAttribs); 4648590a0fdSAndre Fischer 4658590a0fdSAndre Fischer if(collectThisPropertyAsName()) 4668590a0fdSAndre Fischer { 4678590a0fdSAndre Fischer // When collecting property names and parent is prop there is no need 4688590a0fdSAndre Fischer // to handle the content of this property deeper (evtl. preparations) 4698590a0fdSAndre Fischer } 4708590a0fdSAndre Fischer else 4718590a0fdSAndre Fischer { 4728590a0fdSAndre Fischer switch(mpContext->getWebDAVNamespace()) 4738590a0fdSAndre Fischer { 4748590a0fdSAndre Fischer default: // WebDAVNamespace_unknown, WebDAVNamespace_last or unhandled 4758590a0fdSAndre Fischer { 4768590a0fdSAndre Fischer break; 4778590a0fdSAndre Fischer } 4788590a0fdSAndre Fischer case WebDAVNamespace_DAV: 4798590a0fdSAndre Fischer { 4808590a0fdSAndre Fischer switch(mpContext->getWebDAVName()) 4818590a0fdSAndre Fischer { 4828590a0fdSAndre Fischer default: // WebDAVName_unknown, WebDAVName_last or unhandled 4838590a0fdSAndre Fischer { 4848590a0fdSAndre Fischer break; 4858590a0fdSAndre Fischer } 4868590a0fdSAndre Fischer case WebDAVName_propstat: 4878590a0fdSAndre Fischer { 4888590a0fdSAndre Fischer // propstat start 4898590a0fdSAndre Fischer if(isCollectingProperties()) 4908590a0fdSAndre Fischer { 4918590a0fdSAndre Fischer // reset maPropStatProperties 4928590a0fdSAndre Fischer maPropStatProperties.clear(); 4938590a0fdSAndre Fischer } 4948590a0fdSAndre Fischer else 4958590a0fdSAndre Fischer { 4968590a0fdSAndre Fischer // when collecting properties reset maPropStatNames 4978590a0fdSAndre Fischer maPropStatNames.clear(); 4988590a0fdSAndre Fischer } 4998590a0fdSAndre Fischer break; 5008590a0fdSAndre Fischer } 5018590a0fdSAndre Fischer case WebDAVName_response: 5028590a0fdSAndre Fischer { 5038590a0fdSAndre Fischer // response start, reset Href and status and maResponseProperties 5048590a0fdSAndre Fischer maHref = maStatus = ::rtl::OUString(); 5058590a0fdSAndre Fischer 5068590a0fdSAndre Fischer if(isCollectingProperties()) 5078590a0fdSAndre Fischer { 5088590a0fdSAndre Fischer // reset maResponseProperties 5098590a0fdSAndre Fischer maResponseProperties.clear(); 5108590a0fdSAndre Fischer } 5118590a0fdSAndre Fischer else 5128590a0fdSAndre Fischer { 5138590a0fdSAndre Fischer // reset maResponseNames when collecting properties 5148590a0fdSAndre Fischer maResponseNames.clear(); 5158590a0fdSAndre Fischer } 5168590a0fdSAndre Fischer break; 5178590a0fdSAndre Fischer } 5188590a0fdSAndre Fischer case WebDAVName_resourcetype: 5198590a0fdSAndre Fischer { 5208590a0fdSAndre Fischer // resourcetype start, reset collection 5218590a0fdSAndre Fischer mbResourceTypeCollection = false; 5228590a0fdSAndre Fischer break; 5238590a0fdSAndre Fischer } 5248590a0fdSAndre Fischer case WebDAVName_supportedlock: 5258590a0fdSAndre Fischer { 5268590a0fdSAndre Fischer // supportedlock start, reset maLockEntries 5278590a0fdSAndre Fischer maLockEntries.realloc(0); 5288590a0fdSAndre Fischer break; 5298590a0fdSAndre Fischer } 5308590a0fdSAndre Fischer case WebDAVName_lockentry: 5318590a0fdSAndre Fischer { 5328590a0fdSAndre Fischer // lockentry start, reset maLockEntries 5338590a0fdSAndre Fischer mbLockScopeSet = false; 5348590a0fdSAndre Fischer mbLockTypeSet = false; 5358590a0fdSAndre Fischer break; 5368590a0fdSAndre Fischer } 537*3edf6992SAndrea Pescetti case WebDAVName_lockdiscovery: 538*3edf6992SAndrea Pescetti { 539*3edf6992SAndrea Pescetti // lockentry start, reset maLocks 540*3edf6992SAndrea Pescetti maLocks.realloc(0); 541*3edf6992SAndrea Pescetti mbLockDiscoveryActive = true; 542*3edf6992SAndrea Pescetti break; 543*3edf6992SAndrea Pescetti } 544*3edf6992SAndrea Pescetti case WebDAVName_activelock: 545*3edf6992SAndrea Pescetti { 546*3edf6992SAndrea Pescetti // activelockstart, reset vars 547*3edf6992SAndrea Pescetti mbLockScopeSet = false; 548*3edf6992SAndrea Pescetti mbLockTypeSet = false; 549*3edf6992SAndrea Pescetti mbLockTokenSet = false; 550*3edf6992SAndrea Pescetti maLockTokens.realloc(0); 551*3edf6992SAndrea Pescetti maHrefLocks = ::rtl::OUString(); 552*3edf6992SAndrea Pescetti break; 553*3edf6992SAndrea Pescetti } 554*3edf6992SAndrea Pescetti case WebDAVName_locktoken: 555*3edf6992SAndrea Pescetti { 556*3edf6992SAndrea Pescetti mbLockTokenSet = true; 557*3edf6992SAndrea Pescetti break; 558*3edf6992SAndrea Pescetti } 5598590a0fdSAndre Fischer } 5608590a0fdSAndre Fischer break; 5618590a0fdSAndre Fischer } 5628590a0fdSAndre Fischer case WebDAVNamespace_ucb_openoffice_org_dav_props: 5638590a0fdSAndre Fischer { 5648590a0fdSAndre Fischer break; 5658590a0fdSAndre Fischer } 5668590a0fdSAndre Fischer } 5678590a0fdSAndre Fischer } 5688590a0fdSAndre Fischer } 5698590a0fdSAndre Fischer } 5708590a0fdSAndre Fischer endElement(const::rtl::OUString & aName)5718590a0fdSAndre Fischer void SAL_CALL WebDAVResponseParser::endElement( const ::rtl::OUString& aName ) throw (xml::sax::SAXException, uno::RuntimeException) 5728590a0fdSAndre Fischer { 5738590a0fdSAndre Fischer const sal_Int32 nLen(aName.getLength()); 5748590a0fdSAndre Fischer OSL_ENSURE(mpContext, "Parser EndElement without content (!)"); 5758590a0fdSAndre Fischer 5768590a0fdSAndre Fischer if(mpContext && nLen) 5778590a0fdSAndre Fischer { 5788590a0fdSAndre Fischer if(collectThisPropertyAsName()) 5798590a0fdSAndre Fischer { 5808590a0fdSAndre Fischer // When collecting property names and parent is prop, just append the prop name 5818590a0fdSAndre Fischer // to the collection, no need to parse deeper 5828590a0fdSAndre Fischer maPropStatNames.push_back(mpContext->getNamespace() + mpContext->getName()); 5838590a0fdSAndre Fischer } 5848590a0fdSAndre Fischer else 5858590a0fdSAndre Fischer { 5868590a0fdSAndre Fischer switch(mpContext->getWebDAVNamespace()) 5878590a0fdSAndre Fischer { 5888590a0fdSAndre Fischer default: // WebDAVNamespace_unknown, WebDAVNamespace_last or unhandled 5898590a0fdSAndre Fischer { 5908590a0fdSAndre Fischer break; 5918590a0fdSAndre Fischer } 5928590a0fdSAndre Fischer case WebDAVNamespace_DAV: 5938590a0fdSAndre Fischer { 5948590a0fdSAndre Fischer switch(mpContext->getWebDAVName()) 5958590a0fdSAndre Fischer { 5968590a0fdSAndre Fischer default: // WebDAVName_unknown, WebDAVName_last or unhandled 5978590a0fdSAndre Fischer { 5988590a0fdSAndre Fischer break; 5998590a0fdSAndre Fischer } 6008590a0fdSAndre Fischer case WebDAVName_href: 6018590a0fdSAndre Fischer { 6028590a0fdSAndre Fischer // href end, save it if we have whitespace 6038590a0fdSAndre Fischer if(whitespaceIsAvailable()) 6048590a0fdSAndre Fischer { 605*3edf6992SAndrea Pescetti if(mbLockDiscoveryActive) 606*3edf6992SAndrea Pescetti { 607*3edf6992SAndrea Pescetti maHrefLocks = mpContext->getWhiteSpace(); 608*3edf6992SAndrea Pescetti } 609*3edf6992SAndrea Pescetti else 610*3edf6992SAndrea Pescetti { 6118590a0fdSAndre Fischer maHref = mpContext->getWhiteSpace(); 6128590a0fdSAndre Fischer } 613*3edf6992SAndrea Pescetti } 6148590a0fdSAndre Fischer break; 6158590a0fdSAndre Fischer } 6168590a0fdSAndre Fischer case WebDAVName_status: 6178590a0fdSAndre Fischer { 6188590a0fdSAndre Fischer // status end, save it if we have whitespace 6198590a0fdSAndre Fischer if(whitespaceIsAvailable()) 6208590a0fdSAndre Fischer { 6218590a0fdSAndre Fischer maStatus = mpContext->getWhiteSpace(); 6228590a0fdSAndre Fischer } 6238590a0fdSAndre Fischer break; 6248590a0fdSAndre Fischer } 6258590a0fdSAndre Fischer case WebDAVName_getlastmodified: 6268590a0fdSAndre Fischer { 6278590a0fdSAndre Fischer // getlastmodified end, safe if content is correct 6288590a0fdSAndre Fischer if(propertyIsReady()) 6298590a0fdSAndre Fischer { 6308590a0fdSAndre Fischer static rtl::OUString aStr(rtl::OUString::createFromAscii("DAV:getlastmodified")); 6318590a0fdSAndre Fischer http_dav_ucp::DAVPropertyValue aDAVPropertyValue; 6328590a0fdSAndre Fischer 6338590a0fdSAndre Fischer aDAVPropertyValue.Name = aStr; 6348590a0fdSAndre Fischer aDAVPropertyValue.Value <<= mpContext->getWhiteSpace(); 6358590a0fdSAndre Fischer maPropStatProperties.push_back(aDAVPropertyValue); 6368590a0fdSAndre Fischer } 6378590a0fdSAndre Fischer break; 6388590a0fdSAndre Fischer } 6398590a0fdSAndre Fischer case WebDAVName_creationdate: 6408590a0fdSAndre Fischer { 6418590a0fdSAndre Fischer // creationdate end, safe if content is correct 6428590a0fdSAndre Fischer if(propertyIsReady()) 6438590a0fdSAndre Fischer { 6448590a0fdSAndre Fischer static rtl::OUString aStr(rtl::OUString::createFromAscii("DAV:creationdate")); 6458590a0fdSAndre Fischer http_dav_ucp::DAVPropertyValue aDAVPropertyValue; 6468590a0fdSAndre Fischer 6478590a0fdSAndre Fischer aDAVPropertyValue.Name = aStr; 6488590a0fdSAndre Fischer aDAVPropertyValue.Value <<= mpContext->getWhiteSpace(); 6498590a0fdSAndre Fischer maPropStatProperties.push_back(aDAVPropertyValue); 6508590a0fdSAndre Fischer } 6518590a0fdSAndre Fischer break; 6528590a0fdSAndre Fischer } 6538590a0fdSAndre Fischer case WebDAVName_collection: 6548590a0fdSAndre Fischer { 6558590a0fdSAndre Fischer // collection end, check and set 6568590a0fdSAndre Fischer if(hasParent(WebDAVName_resourcetype)) 6578590a0fdSAndre Fischer { 6588590a0fdSAndre Fischer mbResourceTypeCollection = true; 6598590a0fdSAndre Fischer } 6608590a0fdSAndre Fischer break; 6618590a0fdSAndre Fischer } 6628590a0fdSAndre Fischer case WebDAVName_resourcetype: 6638590a0fdSAndre Fischer { 6648590a0fdSAndre Fischer // resourcetype end, check for collection 6658590a0fdSAndre Fischer if(hasParent(WebDAVName_prop)) 6668590a0fdSAndre Fischer { 6678590a0fdSAndre Fischer static rtl::OUString aStrA(rtl::OUString::createFromAscii("DAV:resourcetype")); 6688590a0fdSAndre Fischer static rtl::OUString aStrB(rtl::OUString::createFromAscii("collection")); 6698590a0fdSAndre Fischer http_dav_ucp::DAVPropertyValue aDAVPropertyValue; 6708590a0fdSAndre Fischer 6718590a0fdSAndre Fischer aDAVPropertyValue.Name = aStrA; 6728590a0fdSAndre Fischer aDAVPropertyValue.Value <<= (mbResourceTypeCollection ? aStrB : rtl::OUString()); 6738590a0fdSAndre Fischer maPropStatProperties.push_back(aDAVPropertyValue); 6748590a0fdSAndre Fischer } 6758590a0fdSAndre Fischer break; 6768590a0fdSAndre Fischer } 6778590a0fdSAndre Fischer case WebDAVName_getcontentlength: 6788590a0fdSAndre Fischer { 6798590a0fdSAndre Fischer // getcontentlength end, safe if content is correct 6808590a0fdSAndre Fischer if(propertyIsReady()) 6818590a0fdSAndre Fischer { 6828590a0fdSAndre Fischer static rtl::OUString aStr(rtl::OUString::createFromAscii("DAV:getcontentlength")); 6838590a0fdSAndre Fischer http_dav_ucp::DAVPropertyValue aDAVPropertyValue; 6848590a0fdSAndre Fischer 6858590a0fdSAndre Fischer aDAVPropertyValue.Name = aStr; 6868590a0fdSAndre Fischer aDAVPropertyValue.Value <<= mpContext->getWhiteSpace(); 6878590a0fdSAndre Fischer maPropStatProperties.push_back(aDAVPropertyValue); 6888590a0fdSAndre Fischer } 6898590a0fdSAndre Fischer break; 6908590a0fdSAndre Fischer } 6918590a0fdSAndre Fischer case WebDAVName_getcontenttype: 6928590a0fdSAndre Fischer { 6938590a0fdSAndre Fischer // getcontenttype end, safe if content is correct 6948590a0fdSAndre Fischer if(propertyIsReady()) 6958590a0fdSAndre Fischer { 6968590a0fdSAndre Fischer static rtl::OUString aStr(rtl::OUString::createFromAscii("DAV:getcontenttype")); 6978590a0fdSAndre Fischer http_dav_ucp::DAVPropertyValue aDAVPropertyValue; 6988590a0fdSAndre Fischer 6998590a0fdSAndre Fischer aDAVPropertyValue.Name = aStr; 7008590a0fdSAndre Fischer aDAVPropertyValue.Value <<= mpContext->getWhiteSpace(); 7018590a0fdSAndre Fischer maPropStatProperties.push_back(aDAVPropertyValue); 7028590a0fdSAndre Fischer } 7038590a0fdSAndre Fischer break; 7048590a0fdSAndre Fischer } 7058590a0fdSAndre Fischer case WebDAVName_supportedlock: 7068590a0fdSAndre Fischer { 7078590a0fdSAndre Fischer // supportedlock end 7088590a0fdSAndre Fischer if(hasParent(WebDAVName_prop) && maLockEntries.hasElements()) 7098590a0fdSAndre Fischer { 7108590a0fdSAndre Fischer static rtl::OUString aStr(rtl::OUString::createFromAscii("DAV:supportedlock")); 7118590a0fdSAndre Fischer http_dav_ucp::DAVPropertyValue aDAVPropertyValue; 7128590a0fdSAndre Fischer 7138590a0fdSAndre Fischer aDAVPropertyValue.Name = aStr; 7148590a0fdSAndre Fischer aDAVPropertyValue.Value <<= maLockEntries; 7158590a0fdSAndre Fischer maPropStatProperties.push_back(aDAVPropertyValue); 7168590a0fdSAndre Fischer } 7178590a0fdSAndre Fischer break; 7188590a0fdSAndre Fischer } 7198590a0fdSAndre Fischer case WebDAVName_lockentry: 7208590a0fdSAndre Fischer { 7218590a0fdSAndre Fischer // lockentry end 7228590a0fdSAndre Fischer if(hasParent(WebDAVName_supportedlock) && (mbLockScopeSet && mbLockTypeSet)) 7238590a0fdSAndre Fischer { 7248590a0fdSAndre Fischer const sal_Int32 nLength(maLockEntries.getLength()); 7258590a0fdSAndre Fischer ucb::LockEntry aEntry; 7268590a0fdSAndre Fischer 7278590a0fdSAndre Fischer aEntry.Scope = maLockScope; 7288590a0fdSAndre Fischer aEntry.Type = maLockType; 7298590a0fdSAndre Fischer maLockEntries.realloc(nLength + 1); 7308590a0fdSAndre Fischer maLockEntries[nLength] = aEntry; 7318590a0fdSAndre Fischer } 7328590a0fdSAndre Fischer break; 7338590a0fdSAndre Fischer } 7348590a0fdSAndre Fischer case WebDAVName_exclusive: 7358590a0fdSAndre Fischer { 7368590a0fdSAndre Fischer // exclusive lockscope end 737*3edf6992SAndrea Pescetti if(hasParent(WebDAVName_lockscope) || hasParent(WebDAVName_activelock)) 7388590a0fdSAndre Fischer { 7398590a0fdSAndre Fischer maLockScope = ucb::LockScope_EXCLUSIVE; 7408590a0fdSAndre Fischer mbLockScopeSet = true; 7418590a0fdSAndre Fischer } 7428590a0fdSAndre Fischer break; 7438590a0fdSAndre Fischer } 7448590a0fdSAndre Fischer case WebDAVName_shared: 7458590a0fdSAndre Fischer { 7468590a0fdSAndre Fischer // shared lockscope end 747*3edf6992SAndrea Pescetti if(hasParent(WebDAVName_lockscope) || hasParent(WebDAVName_activelock)) 7488590a0fdSAndre Fischer { 7498590a0fdSAndre Fischer maLockScope = ucb::LockScope_SHARED; 7508590a0fdSAndre Fischer mbLockScopeSet = true; 7518590a0fdSAndre Fischer } 7528590a0fdSAndre Fischer break; 7538590a0fdSAndre Fischer } 7548590a0fdSAndre Fischer case WebDAVName_write: 7558590a0fdSAndre Fischer { 7568590a0fdSAndre Fischer // write locktype end 757*3edf6992SAndrea Pescetti if(hasParent(WebDAVName_locktype) || hasParent(WebDAVName_activelock)) 7588590a0fdSAndre Fischer { 7598590a0fdSAndre Fischer maLockType = ucb::LockType_WRITE; 7608590a0fdSAndre Fischer mbLockTypeSet = true; 7618590a0fdSAndre Fischer } 7628590a0fdSAndre Fischer break; 7638590a0fdSAndre Fischer } 764*3edf6992SAndrea Pescetti case WebDAVName_lockdiscovery: 765*3edf6992SAndrea Pescetti { 766*3edf6992SAndrea Pescetti // lockdiscovery end 767*3edf6992SAndrea Pescetti if(hasParent(WebDAVName_prop)) 768*3edf6992SAndrea Pescetti { 769*3edf6992SAndrea Pescetti static ::rtl::OUString aStr(rtl::OUString::createFromAscii("DAV:lockdiscovery")); 770*3edf6992SAndrea Pescetti if(isWaitingLockResponse()) 771*3edf6992SAndrea Pescetti { 772*3edf6992SAndrea Pescetti maResult_Lock.Name = aStr; 773*3edf6992SAndrea Pescetti maResult_Lock.Value <<= maLocks; 774*3edf6992SAndrea Pescetti } 775*3edf6992SAndrea Pescetti else 776*3edf6992SAndrea Pescetti { 777*3edf6992SAndrea Pescetti ::http_dav_ucp::DAVPropertyValue aDAVPropertyValue; 778*3edf6992SAndrea Pescetti 779*3edf6992SAndrea Pescetti aDAVPropertyValue.Name = aStr; 780*3edf6992SAndrea Pescetti aDAVPropertyValue.Value <<= maLocks; 781*3edf6992SAndrea Pescetti maPropStatProperties.push_back(aDAVPropertyValue); 782*3edf6992SAndrea Pescetti } 783*3edf6992SAndrea Pescetti } 784*3edf6992SAndrea Pescetti mbLockDiscoveryActive = false; 785*3edf6992SAndrea Pescetti break; 786*3edf6992SAndrea Pescetti } 787*3edf6992SAndrea Pescetti case WebDAVName_activelock: 788*3edf6992SAndrea Pescetti { 789*3edf6992SAndrea Pescetti if(hasParent(WebDAVName_lockdiscovery) && 790*3edf6992SAndrea Pescetti mbLockScopeSet && mbLockTypeSet && mbLockTokenSet) 791*3edf6992SAndrea Pescetti { 792*3edf6992SAndrea Pescetti const sal_Int32 nLength(maLocks.getLength()); 793*3edf6992SAndrea Pescetti ucb::Lock aLock; 794*3edf6992SAndrea Pescetti 795*3edf6992SAndrea Pescetti aLock.Scope = maLockScope; 796*3edf6992SAndrea Pescetti aLock.Type = maLockType; 797*3edf6992SAndrea Pescetti //add tokens, depth, timeout, owner 798*3edf6992SAndrea Pescetti aLock.LockTokens = maLockTokens; 799*3edf6992SAndrea Pescetti aLock.Depth = maLockDepth; 800*3edf6992SAndrea Pescetti aLock.Owner <<= maLockOwner; 801*3edf6992SAndrea Pescetti aLock.Timeout = maLockTimeout; 802*3edf6992SAndrea Pescetti maLocks.realloc(nLength + 1); 803*3edf6992SAndrea Pescetti maLocks[nLength] = aLock; 804*3edf6992SAndrea Pescetti } 805*3edf6992SAndrea Pescetti break; 806*3edf6992SAndrea Pescetti } 807*3edf6992SAndrea Pescetti case WebDAVName_locktoken: 808*3edf6992SAndrea Pescetti { 809*3edf6992SAndrea Pescetti if(hasParent(WebDAVName_activelock)) 810*3edf6992SAndrea Pescetti { 811*3edf6992SAndrea Pescetti //add a token to the list of tokens 812*3edf6992SAndrea Pescetti const sal_Int32 nLength(maLockTokens.getLength()); 813*3edf6992SAndrea Pescetti maLockTokens.realloc(nLength + 1); 814*3edf6992SAndrea Pescetti maLockTokens[nLength] = maHrefLocks; 815*3edf6992SAndrea Pescetti mbLockTokenSet = true; 816*3edf6992SAndrea Pescetti } 817*3edf6992SAndrea Pescetti break; 818*3edf6992SAndrea Pescetti } 819*3edf6992SAndrea Pescetti case WebDAVName_timeout: 820*3edf6992SAndrea Pescetti { 821*3edf6992SAndrea Pescetti if(hasParent(WebDAVName_activelock)) 822*3edf6992SAndrea Pescetti { 823*3edf6992SAndrea Pescetti ::rtl::OUString aStr( mpContext->getWhiteSpace().toAsciiLowerCase()); 824*3edf6992SAndrea Pescetti static ::rtl::OUString aInfinite( ::rtl::OUString::createFromAscii( "infinite" ) ); 825*3edf6992SAndrea Pescetti static ::rtl::OUString aSecond( ::rtl::OUString::createFromAscii( "second-" ) ); 826*3edf6992SAndrea Pescetti //look for infinity 827*3edf6992SAndrea Pescetti sal_Int32 secondIndex; 828*3edf6992SAndrea Pescetti if(aStr.indexOf(aInfinite) != -1) 829*3edf6992SAndrea Pescetti { 830*3edf6992SAndrea Pescetti maLockTimeout = -1; 831*3edf6992SAndrea Pescetti } 832*3edf6992SAndrea Pescetti else if((secondIndex = aStr.indexOf(aSecond)) != -1) 833*3edf6992SAndrea Pescetti { 834*3edf6992SAndrea Pescetti secondIndex += aSecond.getLength(); 835*3edf6992SAndrea Pescetti maLockTimeout = aStr.copy(secondIndex).toInt64(); 836*3edf6992SAndrea Pescetti } 837*3edf6992SAndrea Pescetti } 838*3edf6992SAndrea Pescetti break; 839*3edf6992SAndrea Pescetti } 840*3edf6992SAndrea Pescetti case WebDAVName_owner: 841*3edf6992SAndrea Pescetti { 842*3edf6992SAndrea Pescetti if(whitespaceIsAvailable()) 843*3edf6992SAndrea Pescetti { 844*3edf6992SAndrea Pescetti if(hasParent(WebDAVName_activelock)) 845*3edf6992SAndrea Pescetti { 846*3edf6992SAndrea Pescetti maLockOwner = mpContext->getWhiteSpace(); 847*3edf6992SAndrea Pescetti } 848*3edf6992SAndrea Pescetti } 849*3edf6992SAndrea Pescetti break; 850*3edf6992SAndrea Pescetti } 851*3edf6992SAndrea Pescetti case WebDAVName_depth: 852*3edf6992SAndrea Pescetti { 853*3edf6992SAndrea Pescetti if(hasParent(WebDAVName_activelock)) 854*3edf6992SAndrea Pescetti { 855*3edf6992SAndrea Pescetti //set depth, one of three values 856*3edf6992SAndrea Pescetti ::rtl::OUString aStr( mpContext->getWhiteSpace() ); 857*3edf6992SAndrea Pescetti //default to zero, if not found 858*3edf6992SAndrea Pescetti maLockDepth = ucb::LockDepth_ZERO; 859*3edf6992SAndrea Pescetti if(aStr.equalsIgnoreAsciiCase(::rtl::OUString::createFromAscii("0"))) 860*3edf6992SAndrea Pescetti maLockDepth = ucb::LockDepth_ZERO; 861*3edf6992SAndrea Pescetti else if(aStr.equalsIgnoreAsciiCase(::rtl::OUString::createFromAscii("1"))) 862*3edf6992SAndrea Pescetti maLockDepth = ucb::LockDepth_ONE; 863*3edf6992SAndrea Pescetti else if(aStr.equalsIgnoreAsciiCase(::rtl::OUString::createFromAscii("infinity"))) 864*3edf6992SAndrea Pescetti maLockDepth = ucb::LockDepth_INFINITY; 865*3edf6992SAndrea Pescetti } 866*3edf6992SAndrea Pescetti break; 867*3edf6992SAndrea Pescetti } 8688590a0fdSAndre Fischer case WebDAVName_propstat: 8698590a0fdSAndre Fischer { 8708590a0fdSAndre Fischer // propstat end, check status 8718590a0fdSAndre Fischer if(maStatus.getLength()) 8728590a0fdSAndre Fischer { 8738590a0fdSAndre Fischer static ::rtl::OUString aStrStatusOkay(::rtl::OUString::createFromAscii("HTTP/1.1 200 OK")); 8748590a0fdSAndre Fischer 8758590a0fdSAndre Fischer if(maStatus.equals(aStrStatusOkay)) 8768590a0fdSAndre Fischer { 8778590a0fdSAndre Fischer if(isCollectingProperties()) 8788590a0fdSAndre Fischer { 8798590a0fdSAndre Fischer if(maPropStatProperties.size()) 8808590a0fdSAndre Fischer { 8818590a0fdSAndre Fischer // append to maResponseProperties if okay 8828590a0fdSAndre Fischer maResponseProperties.insert(maResponseProperties.end(), maPropStatProperties.begin(), maPropStatProperties.end()); 8838590a0fdSAndre Fischer } 8848590a0fdSAndre Fischer } 8858590a0fdSAndre Fischer else 8868590a0fdSAndre Fischer { 8878590a0fdSAndre Fischer if(maPropStatNames.size()) 8888590a0fdSAndre Fischer { 8898590a0fdSAndre Fischer // when collecting properties append to 8908590a0fdSAndre Fischer maResponseNames.insert(maResponseNames.end(), maPropStatNames.begin(), maPropStatNames.end()); 8918590a0fdSAndre Fischer } 8928590a0fdSAndre Fischer } 8938590a0fdSAndre Fischer } 8948590a0fdSAndre Fischer } 8958590a0fdSAndre Fischer break; 8968590a0fdSAndre Fischer } 8978590a0fdSAndre Fischer case WebDAVName_response: 8988590a0fdSAndre Fischer { 899*3edf6992SAndrea Pescetti // response end 9008590a0fdSAndre Fischer if(maHref.getLength()) 9018590a0fdSAndre Fischer { 9028590a0fdSAndre Fischer if(isCollectingProperties()) 9038590a0fdSAndre Fischer { 9048590a0fdSAndre Fischer // create DAVResource when we have content 9058590a0fdSAndre Fischer if(maResponseProperties.size()) 9068590a0fdSAndre Fischer { 907*3edf6992SAndrea Pescetti ::http_dav_ucp::DAVResource aDAVResource; 9088590a0fdSAndre Fischer 9098590a0fdSAndre Fischer aDAVResource.uri = maHref; 9108590a0fdSAndre Fischer aDAVResource.properties = maResponseProperties; 9118590a0fdSAndre Fischer maResult_PropFind.push_back(aDAVResource); 9128590a0fdSAndre Fischer } 9138590a0fdSAndre Fischer } 9148590a0fdSAndre Fischer else 9158590a0fdSAndre Fischer { 9168590a0fdSAndre Fischer // when collecting properties add them to result when there are some 9178590a0fdSAndre Fischer if(maResponseNames.size()) 9188590a0fdSAndre Fischer { 9198590a0fdSAndre Fischer http_dav_ucp::DAVResourceInfo aDAVResourceInfo(maHref); 9208590a0fdSAndre Fischer 9218590a0fdSAndre Fischer aDAVResourceInfo.properties = maResponseNames; 9228590a0fdSAndre Fischer maResult_PropName.push_back(aDAVResourceInfo); 9238590a0fdSAndre Fischer } 9248590a0fdSAndre Fischer } 9258590a0fdSAndre Fischer } 9268590a0fdSAndre Fischer break; 9278590a0fdSAndre Fischer } 9288590a0fdSAndre Fischer } 9298590a0fdSAndre Fischer break; 9308590a0fdSAndre Fischer } 9318590a0fdSAndre Fischer case WebDAVNamespace_ucb_openoffice_org_dav_props: 9328590a0fdSAndre Fischer { 9338590a0fdSAndre Fischer break; 9348590a0fdSAndre Fischer } 9358590a0fdSAndre Fischer } 9368590a0fdSAndre Fischer } 9378590a0fdSAndre Fischer 9388590a0fdSAndre Fischer // destroy last context (pop) 9398590a0fdSAndre Fischer pop_context(); 9408590a0fdSAndre Fischer } 9418590a0fdSAndre Fischer } 9428590a0fdSAndre Fischer characters(const::rtl::OUString & aChars)9438590a0fdSAndre Fischer void SAL_CALL WebDAVResponseParser::characters( const ::rtl::OUString& aChars ) throw (xml::sax::SAXException, uno::RuntimeException) 9448590a0fdSAndre Fischer { 9458590a0fdSAndre Fischer // collect whitespace over evtl. several calls in mpContext 9468590a0fdSAndre Fischer OSL_ENSURE(mpContext, "Parser characters without content (!)"); 9478590a0fdSAndre Fischer const sal_Int32 nLen(aChars.getLength()); 9488590a0fdSAndre Fischer 9498590a0fdSAndre Fischer if(mpContext && nLen) 9508590a0fdSAndre Fischer { 9518590a0fdSAndre Fischer // remove leading/trailing blanks and CRLF 9528590a0fdSAndre Fischer const ::rtl::OUString aTrimmedChars(aChars.trim()); 9538590a0fdSAndre Fischer 9548590a0fdSAndre Fischer if(aTrimmedChars.getLength()) 9558590a0fdSAndre Fischer { 9568590a0fdSAndre Fischer ::rtl::OUString aNew(mpContext->getWhiteSpace()); 9578590a0fdSAndre Fischer 9588590a0fdSAndre Fischer if(aNew.getLength()) 9598590a0fdSAndre Fischer { 9608590a0fdSAndre Fischer // add one char when appending (see html1.1 spec) 9618590a0fdSAndre Fischer aNew += ::rtl::OUString(sal_Unicode(' ')); 9628590a0fdSAndre Fischer } 9638590a0fdSAndre Fischer 9648590a0fdSAndre Fischer aNew += aTrimmedChars; 9658590a0fdSAndre Fischer mpContext->setWhiteSpace(aNew); 9668590a0fdSAndre Fischer } 9678590a0fdSAndre Fischer } 9688590a0fdSAndre Fischer } 9698590a0fdSAndre Fischer ignorableWhitespace(const::rtl::OUString &)9708590a0fdSAndre Fischer void SAL_CALL WebDAVResponseParser::ignorableWhitespace( const ::rtl::OUString& /*aWhitespaces*/ ) throw (xml::sax::SAXException, uno::RuntimeException) 9718590a0fdSAndre Fischer { 9728590a0fdSAndre Fischer } 9738590a0fdSAndre Fischer processingInstruction(const::rtl::OUString &,const::rtl::OUString &)974*3edf6992SAndrea Pescetti void SAL_CALL WebDAVResponseParser::processingInstruction( const ::rtl::OUString& /*aTarget*/, const ::rtl::OUString& /*aData*/ ) 975*3edf6992SAndrea Pescetti throw (xml::sax::SAXException, uno::RuntimeException) 9768590a0fdSAndre Fischer { 9778590a0fdSAndre Fischer } 9788590a0fdSAndre Fischer setDocumentLocator(const uno::Reference<xml::sax::XLocator> &)9798590a0fdSAndre Fischer void SAL_CALL WebDAVResponseParser::setDocumentLocator( const uno::Reference< xml::sax::XLocator >& /*xLocator*/ ) throw (xml::sax::SAXException, uno::RuntimeException) 9808590a0fdSAndre Fischer { 9818590a0fdSAndre Fischer } 9828590a0fdSAndre Fischer } // end of anonymous namespace 9838590a0fdSAndre Fischer 9848590a0fdSAndre Fischer ////////////////////////////////////////////////////////////////////////////// 9858590a0fdSAndre Fischer // wrapper for various calls to the parser 9868590a0fdSAndre Fischer 9878590a0fdSAndre Fischer namespace 9888590a0fdSAndre Fischer { parseWebDAVPropNameResponse(const uno::Reference<io::XInputStream> & xInputStream,std::vector<http_dav_ucp::DAVResource> & rPropFind,std::vector<http_dav_ucp::DAVResourceInfo> & rPropName,http_dav_ucp::DAVPropertyValue & rPropValue,WebDAVResponseParserMode eWebDAVResponseParserMode)9898590a0fdSAndre Fischer void parseWebDAVPropNameResponse( 9908590a0fdSAndre Fischer const uno::Reference< io::XInputStream >& xInputStream, 9918590a0fdSAndre Fischer std::vector< http_dav_ucp::DAVResource >& rPropFind, 9928590a0fdSAndre Fischer std::vector< http_dav_ucp::DAVResourceInfo >& rPropName, 993*3edf6992SAndrea Pescetti http_dav_ucp::DAVPropertyValue& rPropValue, 9948590a0fdSAndre Fischer WebDAVResponseParserMode eWebDAVResponseParserMode) 9958590a0fdSAndre Fischer { 9968590a0fdSAndre Fischer if(xInputStream.is()) 9978590a0fdSAndre Fischer { 9988590a0fdSAndre Fischer try 9998590a0fdSAndre Fischer { 10008590a0fdSAndre Fischer // prepare ParserInputSrouce 10018590a0fdSAndre Fischer xml::sax::InputSource myInputSource; 10028590a0fdSAndre Fischer myInputSource.aInputStream = xInputStream; 10038590a0fdSAndre Fischer 10048590a0fdSAndre Fischer // get parser 10058590a0fdSAndre Fischer uno::Reference< xml::sax::XParser > xParser( 10068590a0fdSAndre Fischer comphelper::getProcessServiceFactory()->createInstance( 10078590a0fdSAndre Fischer rtl::OUString::createFromAscii("com.sun.star.xml.sax.Parser") ), 10088590a0fdSAndre Fischer uno::UNO_QUERY_THROW ); 10098590a0fdSAndre Fischer 10108590a0fdSAndre Fischer // create parser; connect parser and filter 10118590a0fdSAndre Fischer WebDAVResponseParser* pWebDAVResponseParser = new WebDAVResponseParser(eWebDAVResponseParserMode); 10128590a0fdSAndre Fischer uno::Reference< xml::sax::XDocumentHandler > xWebDAVHdl(pWebDAVResponseParser); 10138590a0fdSAndre Fischer xParser->setDocumentHandler(xWebDAVHdl); 10148590a0fdSAndre Fischer 10158590a0fdSAndre Fischer // finally, parse the stream 10168590a0fdSAndre Fischer xParser->parseStream(myInputSource); 10178590a0fdSAndre Fischer 10188590a0fdSAndre Fischer // get result 10198590a0fdSAndre Fischer switch(eWebDAVResponseParserMode) 10208590a0fdSAndre Fischer { 10218590a0fdSAndre Fischer case WebDAVResponseParserMode_PropFind: 10228590a0fdSAndre Fischer { 10238590a0fdSAndre Fischer rPropFind = pWebDAVResponseParser->getResult_PropFind(); 10248590a0fdSAndre Fischer break; 10258590a0fdSAndre Fischer } 10268590a0fdSAndre Fischer case WebDAVResponseParserMode_PropName: 10278590a0fdSAndre Fischer { 10288590a0fdSAndre Fischer rPropName = pWebDAVResponseParser->getResult_PropName(); 10298590a0fdSAndre Fischer break; 10308590a0fdSAndre Fischer } 1031*3edf6992SAndrea Pescetti case WebDAVResponseParserMode_LockResponse: 1032*3edf6992SAndrea Pescetti { 1033*3edf6992SAndrea Pescetti rPropValue = pWebDAVResponseParser->getResult_Lock(); 1034*3edf6992SAndrea Pescetti break; 1035*3edf6992SAndrea Pescetti } 10368590a0fdSAndre Fischer } 10378590a0fdSAndre Fischer } 10388590a0fdSAndre Fischer catch(uno::Exception&) 10398590a0fdSAndre Fischer { 10408590a0fdSAndre Fischer OSL_ENSURE(false, "WebDAV Parse error (!)"); 10418590a0fdSAndre Fischer } 10428590a0fdSAndre Fischer } 10438590a0fdSAndre Fischer } 10448590a0fdSAndre Fischer } // end of anonymous namespace 10458590a0fdSAndre Fischer 10468590a0fdSAndre Fischer ////////////////////////////////////////////////////////////////////////////// 10478590a0fdSAndre Fischer // helper to parse a XML WebDAV response 10488590a0fdSAndre Fischer 10498590a0fdSAndre Fischer namespace http_dav_ucp 10508590a0fdSAndre Fischer { parseWebDAVPropFindResponse(const uno::Reference<io::XInputStream> & xInputStream)10518590a0fdSAndre Fischer std::vector< DAVResource > parseWebDAVPropFindResponse(const uno::Reference< io::XInputStream >& xInputStream) 10528590a0fdSAndre Fischer { 10538590a0fdSAndre Fischer std::vector< DAVResource > aRetval; 10548590a0fdSAndre Fischer std::vector< DAVResourceInfo > aFoo; 1055*3edf6992SAndrea Pescetti DAVPropertyValue aFoo2; 10568590a0fdSAndre Fischer 1057*3edf6992SAndrea Pescetti parseWebDAVPropNameResponse(xInputStream, aRetval, aFoo, aFoo2, WebDAVResponseParserMode_PropFind); 10588590a0fdSAndre Fischer return aRetval; 10598590a0fdSAndre Fischer } 10608590a0fdSAndre Fischer parseWebDAVPropNameResponse(const uno::Reference<io::XInputStream> & xInputStream)10618590a0fdSAndre Fischer std::vector< DAVResourceInfo > parseWebDAVPropNameResponse(const uno::Reference< io::XInputStream >& xInputStream) 10628590a0fdSAndre Fischer { 10638590a0fdSAndre Fischer std::vector< DAVResource > aFoo; 10648590a0fdSAndre Fischer std::vector< DAVResourceInfo > aRetval; 1065*3edf6992SAndrea Pescetti DAVPropertyValue aFoo2; 10668590a0fdSAndre Fischer 1067*3edf6992SAndrea Pescetti parseWebDAVPropNameResponse(xInputStream, aFoo, aRetval, aFoo2, WebDAVResponseParserMode_PropName); 10688590a0fdSAndre Fischer return aRetval; 10698590a0fdSAndre Fischer } 1070*3edf6992SAndrea Pescetti parseWebDAVLockResponse(const uno::Reference<io::XInputStream> & xInputStream)1071*3edf6992SAndrea Pescetti http_dav_ucp::DAVPropertyValue parseWebDAVLockResponse(const uno::Reference< io::XInputStream >& xInputStream) 1072*3edf6992SAndrea Pescetti { 1073*3edf6992SAndrea Pescetti std::vector< DAVResource > aFoo2; 1074*3edf6992SAndrea Pescetti std::vector< DAVResourceInfo > aFoo; 1075*3edf6992SAndrea Pescetti http_dav_ucp::DAVPropertyValue aRetval; 1076*3edf6992SAndrea Pescetti 1077*3edf6992SAndrea Pescetti 1078*3edf6992SAndrea Pescetti parseWebDAVPropNameResponse(xInputStream, aFoo2, aFoo, aRetval, WebDAVResponseParserMode_LockResponse); 1079*3edf6992SAndrea Pescetti return aRetval; 1080*3edf6992SAndrea Pescetti } 1081*3edf6992SAndrea Pescetti 10828590a0fdSAndre Fischer } // namespace http_dav_ucp 10838590a0fdSAndre Fischer 10848590a0fdSAndre Fischer ////////////////////////////////////////////////////////////////////////////// 10858590a0fdSAndre Fischer // eof 1086