1*9646dec5SDamjan Jovanovic /************************************************************** 2*9646dec5SDamjan Jovanovic * 3*9646dec5SDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one 4*9646dec5SDamjan Jovanovic * or more contributor license agreements. See the NOTICE file 5*9646dec5SDamjan Jovanovic * distributed with this work for additional information 6*9646dec5SDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file 7*9646dec5SDamjan Jovanovic * to you under the Apache License, Version 2.0 (the 8*9646dec5SDamjan Jovanovic * "License"); you may not use this file except in compliance 9*9646dec5SDamjan Jovanovic * with the License. You may obtain a copy of the License at 10*9646dec5SDamjan Jovanovic * 11*9646dec5SDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0 12*9646dec5SDamjan Jovanovic * 13*9646dec5SDamjan Jovanovic * Unless required by applicable law or agreed to in writing, 14*9646dec5SDamjan Jovanovic * software distributed under the License is distributed on an 15*9646dec5SDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*9646dec5SDamjan Jovanovic * KIND, either express or implied. See the License for the 17*9646dec5SDamjan Jovanovic * specific language governing permissions and limitations 18*9646dec5SDamjan Jovanovic * under the License. 19*9646dec5SDamjan Jovanovic * 20*9646dec5SDamjan Jovanovic *************************************************************/ 21*9646dec5SDamjan Jovanovic 22*9646dec5SDamjan Jovanovic // MARKER(update_precomp.py): autogen include statement, do not remove 23*9646dec5SDamjan Jovanovic #include "precompiled_webdav.hxx" 24*9646dec5SDamjan Jovanovic 25*9646dec5SDamjan Jovanovic #include <rtl/ustrbuf.hxx> 26*9646dec5SDamjan Jovanovic #include "DAVProperties.hxx" 27*9646dec5SDamjan Jovanovic #include "PropfindRequest.hxx" 28*9646dec5SDamjan Jovanovic 29*9646dec5SDamjan Jovanovic using namespace http_dav_ucp; 30*9646dec5SDamjan Jovanovic generatePROPFINDRequestBody(const std::vector<::rtl::OUString> * propNames,const bool onlyPropertyNames)31*9646dec5SDamjan Jovanovicrtl::OString PropfindRequest::generatePROPFINDRequestBody( 32*9646dec5SDamjan Jovanovic const std::vector< ::rtl::OUString > * propNames, 33*9646dec5SDamjan Jovanovic const bool onlyPropertyNames ) 34*9646dec5SDamjan Jovanovic { 35*9646dec5SDamjan Jovanovic #define PROPFIND_HEADER "<?xml version=\"1.0\" encoding=\"utf-8\"?><propfind xmlns=\"DAV:\">" 36*9646dec5SDamjan Jovanovic #define PROPFIND_TRAILER "</propfind>" 37*9646dec5SDamjan Jovanovic 38*9646dec5SDamjan Jovanovic // TODO is it really needed a Unicode string buffer? 39*9646dec5SDamjan Jovanovic // All properties and property names aren't supposed to be ASCII? 40*9646dec5SDamjan Jovanovic rtl::OUStringBuffer aBuffer; 41*9646dec5SDamjan Jovanovic aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( PROPFIND_HEADER )); 42*9646dec5SDamjan Jovanovic 43*9646dec5SDamjan Jovanovic // create and fill body with requested properties 44*9646dec5SDamjan Jovanovic const int nPropCount = ( !onlyPropertyNames && propNames ) 45*9646dec5SDamjan Jovanovic ? propNames->size() 46*9646dec5SDamjan Jovanovic : 0; 47*9646dec5SDamjan Jovanovic if ( nPropCount > 0 ) 48*9646dec5SDamjan Jovanovic { 49*9646dec5SDamjan Jovanovic aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<prop>" ) ); 50*9646dec5SDamjan Jovanovic CurlPropName thePropName; 51*9646dec5SDamjan Jovanovic for ( int theIndex = 0; theIndex < nPropCount; theIndex ++ ) 52*9646dec5SDamjan Jovanovic { 53*9646dec5SDamjan Jovanovic // split fullname into namespace and name! 54*9646dec5SDamjan Jovanovic DAVProperties::createCurlPropName( (*propNames)[ theIndex ], 55*9646dec5SDamjan Jovanovic thePropName ); 56*9646dec5SDamjan Jovanovic 57*9646dec5SDamjan Jovanovic /* <*propname* xmlns="*propns*" /> */ 58*9646dec5SDamjan Jovanovic aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<" )); 59*9646dec5SDamjan Jovanovic aBuffer.appendAscii( thePropName.name ); 60*9646dec5SDamjan Jovanovic aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( " xmlnx=\"" )); 61*9646dec5SDamjan Jovanovic aBuffer.appendAscii( thePropName.nspace ); 62*9646dec5SDamjan Jovanovic aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "\"/>" )); 63*9646dec5SDamjan Jovanovic } 64*9646dec5SDamjan Jovanovic 65*9646dec5SDamjan Jovanovic aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "</prop>" )); 66*9646dec5SDamjan Jovanovic } 67*9646dec5SDamjan Jovanovic else 68*9646dec5SDamjan Jovanovic { 69*9646dec5SDamjan Jovanovic if ( onlyPropertyNames ) 70*9646dec5SDamjan Jovanovic { 71*9646dec5SDamjan Jovanovic aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<propname/>" )); 72*9646dec5SDamjan Jovanovic } 73*9646dec5SDamjan Jovanovic else 74*9646dec5SDamjan Jovanovic { 75*9646dec5SDamjan Jovanovic aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<allprop/>" )); 76*9646dec5SDamjan Jovanovic } 77*9646dec5SDamjan Jovanovic } 78*9646dec5SDamjan Jovanovic 79*9646dec5SDamjan Jovanovic aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( PROPFIND_TRAILER )); 80*9646dec5SDamjan Jovanovic return rtl::OUStringToOString( aBuffer.makeStringAndClear(), RTL_TEXTENCODING_UTF8 ); 81*9646dec5SDamjan Jovanovic } 82