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 Jovanovic rtl::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