[Libreoffice-commits] core.git: 4 commits - ucb/source
Ariel Constenla-Haile
arielch at apache.org
Mon May 27 12:25:59 PDT 2013
ucb/source/ucp/webdav/AprEnv.cxx | 2
ucb/source/ucp/webdav/DAVRequestEnvironment.hxx | 2
ucb/source/ucp/webdav/DAVResource.hxx | 4
ucb/source/ucp/webdav/DAVResourceAccess.cxx | 55 +++++-
ucb/source/ucp/webdav/DAVResourceAccess.hxx | 8
ucb/source/ucp/webdav/SerfCallbacks.cxx | 6
ucb/source/ucp/webdav/SerfCopyReqProcImpl.cxx | 2
ucb/source/ucp/webdav/SerfCopyReqProcImpl.hxx | 2
ucb/source/ucp/webdav/SerfDeleteReqProcImpl.cxx | 2
ucb/source/ucp/webdav/SerfDeleteReqProcImpl.hxx | 2
ucb/source/ucp/webdav/SerfGetReqProcImpl.cxx | 2
ucb/source/ucp/webdav/SerfGetReqProcImpl.hxx | 6
ucb/source/ucp/webdav/SerfHeadReqProcImpl.cxx | 2
ucb/source/ucp/webdav/SerfHeadReqProcImpl.hxx | 6
ucb/source/ucp/webdav/SerfLockStore.cxx | 6
ucb/source/ucp/webdav/SerfLockStore.hxx | 4
ucb/source/ucp/webdav/SerfMkColReqProcImpl.cxx | 2
ucb/source/ucp/webdav/SerfMkColReqProcImpl.hxx | 2
ucb/source/ucp/webdav/SerfMoveReqProcImpl.cxx | 2
ucb/source/ucp/webdav/SerfMoveReqProcImpl.hxx | 2
ucb/source/ucp/webdav/SerfPostReqProcImpl.cxx | 2
ucb/source/ucp/webdav/SerfPostReqProcImpl.hxx | 4
ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx | 36 ++--
ucb/source/ucp/webdav/SerfPropFindReqProcImpl.hxx | 4
ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx | 85 +++++----
ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.hxx | 4
ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx | 2
ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx | 2
ucb/source/ucp/webdav/SerfRequestProcessor.cxx | 10 -
ucb/source/ucp/webdav/SerfRequestProcessor.hxx | 8
ucb/source/ucp/webdav/SerfRequestProcessorImpl.cxx | 2
ucb/source/ucp/webdav/SerfRequestProcessorImpl.hxx | 2
ucb/source/ucp/webdav/SerfRequestProcessorImplFac.cxx | 22 +-
ucb/source/ucp/webdav/SerfRequestProcessorImplFac.hxx | 4
ucb/source/ucp/webdav/SerfSession.cxx | 16 -
ucb/source/ucp/webdav/SerfSession.hxx | 6
ucb/source/ucp/webdav/SerfUri.cxx | 2
ucb/source/ucp/webdav/SerfUri.hxx | 2
ucb/source/ucp/webdav/UCBDeadPropertyValue.cxx | 2
ucb/source/ucp/webdav/webdavcontent.cxx | 162 ++++++++++++++++--
ucb/source/ucp/webdav/webdavprovider.cxx | 2
ucb/source/ucp/webdav/webdavresponseparser.cxx | 2
ucb/source/ucp/webdav/webdavresponseparser.hxx | 2
43 files changed, 355 insertions(+), 147 deletions(-)
New commits:
commit 7056e8ef89e938e38fc5b2b8a7493f0c79d5efd4
Author: Ariel Constenla-Haile <arielch at apache.org>
Date: Sun Mar 24 12:21:32 2013 +0000
Resolves@ #i121926# fix malformed PROPFIND/PROPPATCH request body
(cherry picked from commit 3c83ceae5e4ff5afe20ea76aeaaae6303cdaec2d)
Conflicts:
ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx
ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx
Change-Id: I13dab5fb80235e2ab968a1492c05bf579ba08d40
diff --git a/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx
index ef02e68..ccceaf4 100644
--- a/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx
@@ -23,6 +23,8 @@
#include "webdavresponseparser.hxx"
#include <comphelper/seqstream.hxx>
+#include <rtl/ustrbuf.hxx>
+
using namespace com::sun::star;
@@ -89,14 +91,20 @@ serf_bucket_t * SerfPropFindReqProcImpl::createSerfRequestBucket( serf_request_t
// body bucket - certain properties OR all properties OR only property names
serf_bucket_t* body_bkt = 0;
- OUString aBodyText;
+ OString aBodyText;
{
+ // TODO is it really needed a Unicode string buffer?
+ // All properties and property names aren't supposed to be ASCII?
+ rtl::OUStringBuffer aBuffer;
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( PROPFIND_HEADER ));
+
// create and fill body bucket with requested properties
const int nPropCount = ( !mbOnlyPropertyNames && mpPropNames )
? mpPropNames->size()
: 0;
if ( nPropCount > 0 )
{
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<prop>" ) );
SerfPropName thePropName;
for ( int theIndex = 0; theIndex < nPropCount; theIndex ++ )
{
@@ -120,23 +128,19 @@ serf_bucket_t * SerfPropFindReqProcImpl::createSerfRequestBucket( serf_request_t
{
if ( mbOnlyPropertyNames )
{
- aBodyText = OUString::createFromAscii( "<propname/>" );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<propname/>" ));
}
else
{
- aBodyText = OUString::createFromAscii( "<allprop/>" );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<allprop/>" ));
}
}
- aBodyText = OUString::createFromAscii( PROPFIND_HEADER ) +
- aBodyText +
- OUString::createFromAscii( PROPFIND_TRAILER );
- body_bkt = SERF_BUCKET_SIMPLE_STRING( OUStringToOString( aBodyText, RTL_TEXTENCODING_UTF8 ),
- pSerfBucketAlloc );
- if ( useChunkedEncoding() )
- {
- body_bkt = serf_bucket_chunk_create( body_bkt, pSerfBucketAlloc );
- }
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( PROPFIND_TRAILER ));
+ aBodyText = rtl::OUStringToOString( aBuffer.makeStringAndClear(), RTL_TEXTENCODING_UTF8 );
+ body_bkt = serf_bucket_simple_copy_create( aBodyText.getStr(),
+ aBodyText.getLength(),
+ pSerfBucketAlloc );
}
// create serf request
diff --git a/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx
index d504a66..c3e95b4 100644
--- a/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx
@@ -18,6 +18,7 @@
*/
#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
#include "DAVProperties.hxx"
#include "UCBDeadPropertyValue.hxx"
@@ -48,20 +49,33 @@ serf_bucket_t * SerfPropPatchReqProcImpl::createSerfRequestBucket( serf_request_
// body bucket
serf_bucket_t* body_bkt = 0;
- OUString aBodyText;
+ OString aBodyText;
{
// create and fill body bucket with properties to be set or removed
- static const char* OpCodes[2] = { "set", "remove" };
+ static const struct
+ {
+ const char *str;
+ sal_Int32 len;
+ }
+ OpCode [] = {
+ { RTL_CONSTASCII_STRINGPARAM( "set" ) },
+ { RTL_CONSTASCII_STRINGPARAM( "remove" ) }
+ };
const int nPropCount = ( mpProperties != 0 )
? mpProperties->size()
: 0;
if ( nPropCount > 0 )
{
+ rtl::OUStringBuffer aBuffer;
+ // add PropPatch xml header in front
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( PROPPATCH_HEADER ));
+
// <*operation code*><prop>
+
ProppatchOperation lastOp = (*mpProperties)[ 0 ].operation;
- aBodyText += OUString::createFromAscii( "<" );
- aBodyText += OUString::createFromAscii( OpCodes[lastOp] );
- aBodyText += OUString::createFromAscii( "><prop>" );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<" ));
+ aBuffer.appendAscii( OpCode[lastOp].str, OpCode[lastOp].len );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "><prop>" ));
SerfPropName thePropName;
for ( int n = 0; n < nPropCount; ++n )
@@ -74,24 +88,24 @@ serf_bucket_t * SerfPropPatchReqProcImpl::createSerfRequestBucket( serf_request_
if ( rProperty.operation != lastOp )
{
// </prop></*last operation code*><*operation code><prop>
- aBodyText += OUString::createFromAscii( "</prop></" );
- aBodyText += OUString::createFromAscii( OpCodes[lastOp] );
- aBodyText += OUString::createFromAscii( "><" );
- aBodyText += OUString::createFromAscii( OpCodes[rProperty.operation] );
- aBodyText += OUString::createFromAscii( "><prop>" );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "</prop></" ));
+ aBuffer.appendAscii( OpCode[lastOp].str, OpCode[lastOp].len );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "><" ));
+ aBuffer.appendAscii( OpCode[rProperty.operation].str, OpCode[rProperty.operation].len );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "><prop>" ));
}
// <*propname* xmlns="*propns*"
- aBodyText += OUString::createFromAscii( "<" );
- aBodyText += OUString::createFromAscii( thePropName.name );
- aBodyText += OUString::createFromAscii( " xmlns=\"" );
- aBodyText += OUString::createFromAscii( thePropName.nspace );
- aBodyText += OUString::createFromAscii( "\"" );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "<" ));
+ aBuffer.appendAscii( thePropName.name );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( " xmlns=\"" ));
+ aBuffer.appendAscii( thePropName.nspace );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "\"" ));
if ( rProperty.operation == PROPSET )
{
// >*property value*</*propname*>
- aBodyText += OUString::createFromAscii( ">" );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( ">" ));
OUString aStringValue;
if ( DAVProperties::isUCBDeadProperty( thePropName ) )
@@ -103,37 +117,32 @@ serf_bucket_t * SerfPropPatchReqProcImpl::createSerfRequestBucket( serf_request_
{
rProperty.value >>= aStringValue;
}
- aBodyText += aStringValue;
- aBodyText += OUString::createFromAscii( "</" );
- aBodyText += OUString::createFromAscii( thePropName.name );
- aBodyText += OUString::createFromAscii( ">" );
+ aBuffer.append( aStringValue );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "</" ));
+ aBuffer.appendAscii( thePropName.name );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( ">" ));
}
else
{
// />
- aBodyText += OUString::createFromAscii( "/>" );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "/>" ));
}
lastOp = rProperty.operation;
}
// </prop></*last operation code*>
- aBodyText += OUString::createFromAscii( "</prop></" );
- aBodyText += OUString::createFromAscii( OpCodes[lastOp] );
- aBodyText += OUString::createFromAscii( ">" );
-
- // add PropPatch xml header in front
- aBodyText = OUString::createFromAscii( PROPPATCH_HEADER ) + aBodyText;
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "</prop></" ));
+ aBuffer.appendAscii( OpCode[lastOp].str, OpCode[lastOp].len );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( ">" ));
// add PropPatch xml trailer at end
- aBodyText += OUString::createFromAscii( PROPPATCH_TRAILER );
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( PROPPATCH_TRAILER ));
- body_bkt = SERF_BUCKET_SIMPLE_STRING( OUStringToOString( aBodyText, RTL_TEXTENCODING_UTF8 ),
- pSerfBucketAlloc );
- if ( useChunkedEncoding() )
- {
- body_bkt = serf_bucket_chunk_create( body_bkt, pSerfBucketAlloc );
- }
+ aBodyText = rtl::OUStringToOString( aBuffer.makeStringAndClear(), RTL_TEXTENCODING_UTF8 );
+ body_bkt = serf_bucket_simple_copy_create( aBodyText.getStr(),
+ aBodyText.getLength(),
+ pSerfBucketAlloc );
}
}
commit 3c18e25efdbbc13be3a0c6ed354d5e7a46feb451
Author: Ariel Constenla-Haile <arielch at apache.org>
Date: Sun Mar 24 12:21:20 2013 +0000
Header clean-up
(cherry picked from commit 9e6159be30751d0ff3af6086de0114cb769873ee)
Change-Id: I1bd046e1aca89d3dd35780338737ca4a6f207bca
diff --git a/ucb/source/ucp/webdav/AprEnv.cxx b/ucb/source/ucp/webdav/AprEnv.cxx
index 6c52b1a..327b7dd 100644
--- a/ucb/source/ucp/webdav/AprEnv.cxx
+++ b/ucb/source/ucp/webdav/AprEnv.cxx
@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <AprEnv.hxx>
+#include "AprEnv.hxx"
namespace apr_environment
{
diff --git a/ucb/source/ucp/webdav/DAVRequestEnvironment.hxx b/ucb/source/ucp/webdav/DAVRequestEnvironment.hxx
index ea63b9ef..db2a853 100644
--- a/ucb/source/ucp/webdav/DAVRequestEnvironment.hxx
+++ b/ucb/source/ucp/webdav/DAVRequestEnvironment.hxx
@@ -23,7 +23,7 @@
#include <vector>
#include <rtl/ref.hxx>
-#include <DAVAuthListener.hxx>
+#include "DAVAuthListener.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/DAVResource.hxx b/ucb/source/ucp/webdav/DAVResource.hxx
index 9e43a13..e0986b5 100644
--- a/ucb/source/ucp/webdav/DAVResource.hxx
+++ b/ucb/source/ucp/webdav/DAVResource.hxx
@@ -24,8 +24,8 @@
#include <vector>
-#include "rtl/ustring.hxx"
-#include "com/sun/star/uno/Any.hxx"
+#include <rtl/ustring.hxx>
+#include <com/sun/star/uno/Any.hxx>
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/DAVResourceAccess.cxx b/ucb/source/ucp/webdav/DAVResourceAccess.cxx
index 5ce2db6..531d6d1 100644
--- a/ucb/source/ucp/webdav/DAVResourceAccess.cxx
+++ b/ucb/source/ucp/webdav/DAVResourceAccess.cxx
@@ -17,13 +17,13 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include "osl/diagnose.h"
+#include <osl/diagnose.h>
-#include "com/sun/star/task/XInteractionAbort.hpp"
-#include "com/sun/star/ucb/XWebDAVCommandEnvironment.hpp"
+#include <com/sun/star/task/XInteractionAbort.hpp>
+#include <com/sun/star/ucb/XWebDAVCommandEnvironment.hpp>
-#include "ucbhelper/simpleauthenticationrequest.hxx"
-#include "comphelper/seekableinput.hxx"
+#include <ucbhelper/simpleauthenticationrequest.hxx>
+#include <comphelper/seekableinput.hxx>
#include "DAVAuthListenerImpl.hxx"
#include "DAVResourceAccess.hxx"
diff --git a/ucb/source/ucp/webdav/SerfCallbacks.cxx b/ucb/source/ucp/webdav/SerfCallbacks.cxx
index 25539ce..c0aa58b 100644
--- a/ucb/source/ucp/webdav/SerfCallbacks.cxx
+++ b/ucb/source/ucp/webdav/SerfCallbacks.cxx
@@ -17,10 +17,10 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <SerfCallbacks.hxx>
+#include "SerfCallbacks.hxx"
-#include <SerfSession.hxx>
-#include <SerfRequestProcessor.hxx>
+#include "SerfSession.hxx"
+#include "SerfRequestProcessor.hxx"
using namespace http_dav_ucp;
diff --git a/ucb/source/ucp/webdav/SerfCopyReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfCopyReqProcImpl.cxx
index 5e730c0..1bc2098 100644
--- a/ucb/source/ucp/webdav/SerfCopyReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfCopyReqProcImpl.cxx
@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <SerfCopyReqProcImpl.hxx>
+#include "SerfCopyReqProcImpl.hxx"
#include <serf.h>
diff --git a/ucb/source/ucp/webdav/SerfCopyReqProcImpl.hxx b/ucb/source/ucp/webdav/SerfCopyReqProcImpl.hxx
index 75631bb..49ecb42 100644
--- a/ucb/source/ucp/webdav/SerfCopyReqProcImpl.hxx
+++ b/ucb/source/ucp/webdav/SerfCopyReqProcImpl.hxx
@@ -20,7 +20,7 @@
#ifndef INCLUDED_SERFCOPYREQPROCIMPL_HXX
#define INCLUDED_SERFCOPYREQPROCIMPL_HXX
-#include <SerfRequestProcessorImpl.hxx>
+#include "SerfRequestProcessorImpl.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.cxx
index 0a0ca35..9287408 100644
--- a/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.cxx
@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <SerfDeleteReqProcImpl.hxx>
+#include "SerfDeleteReqProcImpl.hxx"
#include <serf.h>
diff --git a/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.hxx b/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.hxx
index 1cf2ec1..203a677 100644
--- a/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.hxx
+++ b/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.hxx
@@ -20,7 +20,7 @@
#ifndef INCLUDED_SERFDELETEREQPROCIMPL_HXX
#define INCLUDED_SERFDELETEREQPROCIMPL_HXX
-#include <SerfRequestProcessorImpl.hxx>
+#include "SerfRequestProcessorImpl.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/SerfGetReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfGetReqProcImpl.cxx
index 3632853..03c686f 100644
--- a/ucb/source/ucp/webdav/SerfGetReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfGetReqProcImpl.cxx
@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <SerfGetReqProcImpl.hxx>
+#include "SerfGetReqProcImpl.hxx"
using namespace com::sun::star;
diff --git a/ucb/source/ucp/webdav/SerfGetReqProcImpl.hxx b/ucb/source/ucp/webdav/SerfGetReqProcImpl.hxx
index dd02be1..868d006 100644
--- a/ucb/source/ucp/webdav/SerfGetReqProcImpl.hxx
+++ b/ucb/source/ucp/webdav/SerfGetReqProcImpl.hxx
@@ -20,13 +20,13 @@
#ifndef INCLUDED_SERFGETREQPROCIMPL_HXX
#define INCLUDED_SERFGETREQPROCIMPL_HXX
-#include <SerfRequestProcessorImpl.hxx>
+#include "SerfRequestProcessorImpl.hxx"
#include <vector>
#include <rtl/ustring.hxx>
-#include <DAVResource.hxx>
+#include "DAVResource.hxx"
-#include <SerfInputStream.hxx>
+#include "SerfInputStream.hxx"
#include <com/sun/star/io/XOutputStream.hpp>
namespace http_dav_ucp
diff --git a/ucb/source/ucp/webdav/SerfHeadReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfHeadReqProcImpl.cxx
index e48a1a0..248a5c5 100644
--- a/ucb/source/ucp/webdav/SerfHeadReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfHeadReqProcImpl.cxx
@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <SerfHeadReqProcImpl.hxx>
+#include "SerfHeadReqProcImpl.hxx"
using namespace com::sun::star;
diff --git a/ucb/source/ucp/webdav/SerfHeadReqProcImpl.hxx b/ucb/source/ucp/webdav/SerfHeadReqProcImpl.hxx
index 4041756..4902da1 100644
--- a/ucb/source/ucp/webdav/SerfHeadReqProcImpl.hxx
+++ b/ucb/source/ucp/webdav/SerfHeadReqProcImpl.hxx
@@ -20,13 +20,13 @@
#ifndef INCLUDED_SERFHEADREQPROCIMPL_HXX
#define INCLUDED_SERFHEADREQPROCIMPL_HXX
-#include <SerfRequestProcessorImpl.hxx>
+#include "SerfRequestProcessorImpl.hxx"
#include <vector>
#include <rtl/ustring.hxx>
-#include <DAVResource.hxx>
+#include "DAVResource.hxx"
-#include <SerfInputStream.hxx>
+#include "SerfInputStream.hxx"
#include <com/sun/star/io/XOutputStream.hpp>
namespace http_dav_ucp
diff --git a/ucb/source/ucp/webdav/SerfLockStore.cxx b/ucb/source/ucp/webdav/SerfLockStore.cxx
index 27ed897..80dcd60 100644
--- a/ucb/source/ucp/webdav/SerfLockStore.cxx
+++ b/ucb/source/ucp/webdav/SerfLockStore.cxx
@@ -19,9 +19,9 @@
#include <ne_locks.h>
#include <ne_uri.h>
-#include "rtl/ustring.hxx"
-#include "osl/time.h"
-#include "osl/thread.hxx"
+#include <rtl/ustring.hxx>
+#include <osl/time.h>
+#include <osl/thread.hxx>
#include "SerfSession.hxx"
#include "SerfLockStore.hxx"
diff --git a/ucb/source/ucp/webdav/SerfLockStore.hxx b/ucb/source/ucp/webdav/SerfLockStore.hxx
index ac3e951..4fff5f6 100644
--- a/ucb/source/ucp/webdav/SerfLockStore.hxx
+++ b/ucb/source/ucp/webdav/SerfLockStore.hxx
@@ -22,8 +22,8 @@
#define INCLUDED_SERFLOCKSTORE_HXX
#include <map>
-#include "osl/mutex.hxx"
-#include "rtl/ref.hxx"
+#include <osl/mutex.hxx>
+#include <rtl/ref.hxx>
#include "SerfTypes.hxx"
namespace http_dav_ucp
diff --git a/ucb/source/ucp/webdav/SerfMkColReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfMkColReqProcImpl.cxx
index 0d5a492..07c6725 100644
--- a/ucb/source/ucp/webdav/SerfMkColReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfMkColReqProcImpl.cxx
@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <SerfMkColReqProcImpl.hxx>
+#include "SerfMkColReqProcImpl.hxx"
#include <serf.h>
diff --git a/ucb/source/ucp/webdav/SerfMkColReqProcImpl.hxx b/ucb/source/ucp/webdav/SerfMkColReqProcImpl.hxx
index 3e1ded5..3f7c75e 100644
--- a/ucb/source/ucp/webdav/SerfMkColReqProcImpl.hxx
+++ b/ucb/source/ucp/webdav/SerfMkColReqProcImpl.hxx
@@ -20,7 +20,7 @@
#ifndef INCLUDED_SERFMKCOLREQPROCIMPL_HXX
#define INCLUDED_SERFMKCOLREQPROCIMPL_HXX
-#include <SerfRequestProcessorImpl.hxx>
+#include "SerfRequestProcessorImpl.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/SerfMoveReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfMoveReqProcImpl.cxx
index 89d6df1..b0cb2cc 100644
--- a/ucb/source/ucp/webdav/SerfMoveReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfMoveReqProcImpl.cxx
@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <SerfMoveReqProcImpl.hxx>
+#include "SerfMoveReqProcImpl.hxx"
#include <serf.h>
diff --git a/ucb/source/ucp/webdav/SerfMoveReqProcImpl.hxx b/ucb/source/ucp/webdav/SerfMoveReqProcImpl.hxx
index 0ed5d2d..e7156db 100644
--- a/ucb/source/ucp/webdav/SerfMoveReqProcImpl.hxx
+++ b/ucb/source/ucp/webdav/SerfMoveReqProcImpl.hxx
@@ -20,7 +20,7 @@
#ifndef INCLUDED_SERFMOVEREQPROCIMPL_HXX
#define INCLUDED_SERFMOVEREQPROCIMPL_HXX
-#include <SerfRequestProcessorImpl.hxx>
+#include "SerfRequestProcessorImpl.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/SerfPostReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfPostReqProcImpl.cxx
index 50accc4..86e2f36 100644
--- a/ucb/source/ucp/webdav/SerfPostReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfPostReqProcImpl.cxx
@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <SerfPostReqProcImpl.hxx>
+#include "SerfPostReqProcImpl.hxx"
#include <serf.h>
diff --git a/ucb/source/ucp/webdav/SerfPostReqProcImpl.hxx b/ucb/source/ucp/webdav/SerfPostReqProcImpl.hxx
index 9cb6af3..9ad9beb 100644
--- a/ucb/source/ucp/webdav/SerfPostReqProcImpl.hxx
+++ b/ucb/source/ucp/webdav/SerfPostReqProcImpl.hxx
@@ -20,9 +20,9 @@
#ifndef INCLUDED_SERFPOSTREQPROCIMPL_HXX
#define INCLUDED_SERFPOSTREQPROCIMPL_HXX
-#include <SerfRequestProcessorImpl.hxx>
+#include "SerfRequestProcessorImpl.hxx"
-#include <SerfInputStream.hxx>
+#include "SerfInputStream.hxx"
#include <com/sun/star/io/XOutputStream.hpp>
namespace http_dav_ucp
diff --git a/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx
index 5fb7680..ef02e68 100644
--- a/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx
@@ -17,11 +17,11 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <SerfPropFindReqProcImpl.hxx>
-#include <SerfTypes.hxx>
-#include <DAVProperties.hxx>
+#include "SerfPropFindReqProcImpl.hxx"
+#include "SerfTypes.hxx"
+#include "DAVProperties.hxx"
-#include <webdavresponseparser.hxx>
+#include "webdavresponseparser.hxx"
#include <comphelper/seqstream.hxx>
using namespace com::sun::star;
diff --git a/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.hxx b/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.hxx
index 35503ba..7f7bd9d 100644
--- a/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.hxx
+++ b/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.hxx
@@ -20,14 +20,14 @@
#ifndef INCLUDED_SERFPROPFINDREQPROCIMPL_HXX
#define INCLUDED_SERFPROPFINDREQPROCIMPL_HXX
-#include <SerfRequestProcessorImpl.hxx>
+#include "SerfRequestProcessorImpl.hxx"
#include <vector>
#include <rtl/ustring.hxx>
#include "DAVTypes.hxx"
#include "DAVResource.hxx"
-#include <SerfInputStream.hxx>
+#include "SerfInputStream.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx
index 9b2583a..d504a66 100644
--- a/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx
@@ -18,11 +18,11 @@
*/
#include <rtl/ustring.hxx>
-#include <DAVProperties.hxx>
-#include <UCBDeadPropertyValue.hxx>
+#include "DAVProperties.hxx"
+#include "UCBDeadPropertyValue.hxx"
-#include <SerfPropPatchReqProcImpl.hxx>
-#include <SerfTypes.hxx>
+#include "SerfPropPatchReqProcImpl.hxx"
+#include "SerfTypes.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.hxx b/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.hxx
index c2ee2d1..1b9693c 100644
--- a/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.hxx
+++ b/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.hxx
@@ -20,10 +20,10 @@
#ifndef INCLUDED_SERFPROPPATCHREQPROCIMPL_HXX
#define INCLUDED_SERFPROPPATCHREQPROCIMPL_HXX
-#include <SerfRequestProcessorImpl.hxx>
+#include "SerfRequestProcessorImpl.hxx"
#include <vector>
-#include <DAVTypes.hxx>
+#include "DAVTypes.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx b/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx
index 2b83dcf..6440318 100644
--- a/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx
@@ -19,7 +19,7 @@
#include <rtl/ustring.hxx>
-#include <SerfPutReqProcImpl.hxx>
+#include "SerfPutReqProcImpl.hxx"
#include <serf.h>
diff --git a/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx b/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx
index 64474d7..a0bcccd 100644
--- a/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx
+++ b/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx
@@ -20,7 +20,7 @@
#ifndef INCLUDED_SERFPUTREQPROCIMPL_HXX
#define INCLUDED_SERFPUTREQPROCIMPL_HXX
-#include <SerfRequestProcessorImpl.hxx>
+#include "SerfRequestProcessorImpl.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/SerfRequestProcessor.cxx b/ucb/source/ucp/webdav/SerfRequestProcessor.cxx
index db4c5ac..dbf1ec1 100644
--- a/ucb/source/ucp/webdav/SerfRequestProcessor.cxx
+++ b/ucb/source/ucp/webdav/SerfRequestProcessor.cxx
@@ -17,11 +17,11 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <SerfRequestProcessor.hxx>
-#include <SerfRequestProcessorImpl.hxx>
-#include <SerfRequestProcessorImplFac.hxx>
-#include <SerfCallbacks.hxx>
-#include <SerfSession.hxx>
+#include "SerfRequestProcessor.hxx"
+#include "SerfRequestProcessorImpl.hxx"
+#include "SerfRequestProcessorImplFac.hxx"
+#include "SerfCallbacks.hxx"
+#include "SerfSession.hxx"
#include <apr_strings.h>
diff --git a/ucb/source/ucp/webdav/SerfRequestProcessor.hxx b/ucb/source/ucp/webdav/SerfRequestProcessor.hxx
index 734cd07..9addb34 100644
--- a/ucb/source/ucp/webdav/SerfRequestProcessor.hxx
+++ b/ucb/source/ucp/webdav/SerfRequestProcessor.hxx
@@ -26,11 +26,11 @@
#include <serf.h>
-#include <DAVTypes.hxx>
-#include <DAVResource.hxx>
-#include <DAVException.hxx>
+#include "DAVTypes.hxx"
+#include "DAVResource.hxx"
+#include "DAVException.hxx"
-#include <SerfInputStream.hxx>
+#include "SerfInputStream.hxx"
#include <com/sun/star/io/XOutputStream.hpp>
namespace http_dav_ucp
diff --git a/ucb/source/ucp/webdav/SerfRequestProcessorImpl.cxx b/ucb/source/ucp/webdav/SerfRequestProcessorImpl.cxx
index 7637684..f5023b8 100644
--- a/ucb/source/ucp/webdav/SerfRequestProcessorImpl.cxx
+++ b/ucb/source/ucp/webdav/SerfRequestProcessorImpl.cxx
@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <SerfRequestProcessorImpl.hxx>
+#include "SerfRequestProcessorImpl.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/SerfRequestProcessorImpl.hxx b/ucb/source/ucp/webdav/SerfRequestProcessorImpl.hxx
index 2d0eb1b..cea80bd 100644
--- a/ucb/source/ucp/webdav/SerfRequestProcessorImpl.hxx
+++ b/ucb/source/ucp/webdav/SerfRequestProcessorImpl.hxx
@@ -23,7 +23,7 @@
#include <serf.h>
#include <sal/types.h>
-#include <DAVRequestEnvironment.hxx>
+#include "DAVRequestEnvironment.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.cxx b/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.cxx
index 3abf5a7..cbd45a1 100644
--- a/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.cxx
+++ b/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.cxx
@@ -17,17 +17,17 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <SerfRequestProcessorImplFac.hxx>
-#include <SerfPropFindReqProcImpl.hxx>
-#include <SerfPropPatchReqProcImpl.hxx>
-#include <SerfGetReqProcImpl.hxx>
-#include <SerfHeadReqProcImpl.hxx>
-#include <SerfPutReqProcImpl.hxx>
-#include <SerfPostReqProcImpl.hxx>
-#include <SerfDeleteReqProcImpl.hxx>
-#include <SerfMkColReqProcImpl.hxx>
-#include <SerfCopyReqProcImpl.hxx>
-#include <SerfMoveReqProcImpl.hxx>
+#include "SerfRequestProcessorImplFac.hxx"
+#include "SerfPropFindReqProcImpl.hxx"
+#include "SerfPropPatchReqProcImpl.hxx"
+#include "SerfGetReqProcImpl.hxx"
+#include "SerfHeadReqProcImpl.hxx"
+#include "SerfPutReqProcImpl.hxx"
+#include "SerfPostReqProcImpl.hxx"
+#include "SerfDeleteReqProcImpl.hxx"
+#include "SerfMkColReqProcImpl.hxx"
+#include "SerfCopyReqProcImpl.hxx"
+#include "SerfMoveReqProcImpl.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.hxx b/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.hxx
index 083287e..f31d96a 100644
--- a/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.hxx
+++ b/ucb/source/ucp/webdav/SerfRequestProcessorImplFac.hxx
@@ -25,8 +25,8 @@
#include "DAVTypes.hxx"
#include "DAVResource.hxx"
-#include <SerfRequestProcessorImpl.hxx>
-#include <SerfInputStream.hxx>
+#include "SerfRequestProcessorImpl.hxx"
+#include "SerfInputStream.hxx"
#include <com/sun/star/io/XOutputStream.hpp>
namespace http_dav_ucp
diff --git a/ucb/source/ucp/webdav/SerfSession.cxx b/ucb/source/ucp/webdav/SerfSession.cxx
index 33c5428..ffef27d 100644
--- a/ucb/source/ucp/webdav/SerfSession.cxx
+++ b/ucb/source/ucp/webdav/SerfSession.cxx
@@ -25,17 +25,17 @@
#include "comphelper/sequence.hxx"
#include "ucbhelper/simplecertificatevalidationrequest.hxx"
-#include <AprEnv.hxx>
+#include "AprEnv.hxx"
#include <apr_strings.h>
#include "DAVAuthListener.hxx"
-#include <SerfTypes.hxx>
-#include <SerfSession.hxx>
-#include <SerfUri.hxx>
-#include <SerfRequestProcessor.hxx>
-#include <SerfCallbacks.hxx>
-#include <SerfInputStream.hxx>
-#include <UCBDeadPropertyValue.hxx>
+#include "SerfTypes.hxx"
+#include "SerfSession.hxx"
+#include "SerfUri.hxx"
+#include "SerfRequestProcessor.hxx"
+#include "SerfCallbacks.hxx"
+#include "SerfInputStream.hxx"
+#include "UCBDeadPropertyValue.hxx"
#include <com/sun/star/xml/crypto/XSecurityEnvironment.hpp>
#include <com/sun/star/security/XCertificate.hpp>
diff --git a/ucb/source/ucp/webdav/SerfSession.hxx b/ucb/source/ucp/webdav/SerfSession.hxx
index 585a28a..aa75d45 100644
--- a/ucb/source/ucp/webdav/SerfSession.hxx
+++ b/ucb/source/ucp/webdav/SerfSession.hxx
@@ -25,10 +25,10 @@
#include <vector>
#include <boost/shared_ptr.hpp>
#include <osl/mutex.hxx>
-#include <DAVSession.hxx>
-#include <SerfTypes.hxx>
+#include "DAVSession.hxx"
+#include "SerfTypes.hxx"
//#include "SerfLockStore.hxx"
-#include <SerfUri.hxx>
+#include "SerfUri.hxx"
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
namespace ucbhelper { class ProxyDecider; }
diff --git a/ucb/source/ucp/webdav/SerfUri.cxx b/ucb/source/ucp/webdav/SerfUri.cxx
index a82418c..66aec6d 100644
--- a/ucb/source/ucp/webdav/SerfUri.cxx
+++ b/ucb/source/ucp/webdav/SerfUri.cxx
@@ -23,7 +23,7 @@
#include <rtl/ustrbuf.hxx>
#include "SerfUri.hxx"
#include "DAVException.hxx"
-#include <AprEnv.hxx>
+#include "AprEnv.hxx"
#include "../inc/urihelper.hxx"
diff --git a/ucb/source/ucp/webdav/SerfUri.hxx b/ucb/source/ucp/webdav/SerfUri.hxx
index 15b0a6b..eb192b5 100644
--- a/ucb/source/ucp/webdav/SerfUri.hxx
+++ b/ucb/source/ucp/webdav/SerfUri.hxx
@@ -23,7 +23,7 @@
#include <apr-util/apr_uri.h>
#include <rtl/ustring.hxx>
-#include <DAVException.hxx>
+#include "DAVException.hxx"
namespace http_dav_ucp
{
diff --git a/ucb/source/ucp/webdav/UCBDeadPropertyValue.cxx b/ucb/source/ucp/webdav/UCBDeadPropertyValue.cxx
index 3a953d2..82096f2 100644
--- a/ucb/source/ucp/webdav/UCBDeadPropertyValue.cxx
+++ b/ucb/source/ucp/webdav/UCBDeadPropertyValue.cxx
@@ -23,7 +23,7 @@
#include "UCBDeadPropertyValue.hxx"
using namespace http_dav_ucp;
-using namespace com::sun::star;
+using namespace ::com::sun::star;
//////////////////////////////////////////////////////////////////////////
diff --git a/ucb/source/ucp/webdav/webdavcontent.cxx b/ucb/source/ucp/webdav/webdavcontent.cxx
index 6410dd3..8bc4d69 100644
--- a/ucb/source/ucp/webdav/webdavcontent.cxx
+++ b/ucb/source/ucp/webdav/webdavcontent.cxx
@@ -18,7 +18,7 @@
*/
#include <osl/diagnose.h>
-#include "osl/doublecheckedlocking.h"
+#include <osl/doublecheckedlocking.h>
#include <rtl/uri.hxx>
#include <rtl/ustrbuf.hxx>
#include <comphelper/processfactory.hxx>
@@ -41,9 +41,9 @@
#include <com/sun/star/ucb/InsertCommandArgument.hpp>
#include <com/sun/star/ucb/InteractiveBadTransferURLException.hpp>
#include <com/sun/star/ucb/InteractiveAugmentedIOException.hpp>
-#include "com/sun/star/ucb/InteractiveLockingLockedException.hpp"
-#include "com/sun/star/ucb/InteractiveLockingLockExpiredException.hpp"
-#include "com/sun/star/ucb/InteractiveLockingNotLockedException.hpp"
+#include <com/sun/star/ucb/InteractiveLockingLockedException.hpp>
+#include <com/sun/star/ucb/InteractiveLockingLockExpiredException.hpp>
+#include <com/sun/star/ucb/InteractiveLockingNotLockedException.hpp>
#include <com/sun/star/ucb/InteractiveNetworkConnectException.hpp>
#include <com/sun/star/ucb/InteractiveNetworkGeneralException.hpp>
#include <com/sun/star/ucb/InteractiveNetworkReadException.hpp>
diff --git a/ucb/source/ucp/webdav/webdavprovider.cxx b/ucb/source/ucp/webdav/webdavprovider.cxx
index 0d4d091..ad93bf9 100644
--- a/ucb/source/ucp/webdav/webdavprovider.cxx
+++ b/ucb/source/ucp/webdav/webdavprovider.cxx
@@ -21,7 +21,7 @@
#include "webdavprovider.hxx"
#include "webdavcontent.hxx"
-#include "osl/mutex.hxx"
+#include <osl/mutex.hxx>
using namespace com::sun::star;
using namespace http_dav_ucp;
diff --git a/ucb/source/ucp/webdav/webdavresponseparser.cxx b/ucb/source/ucp/webdav/webdavresponseparser.cxx
index f61efc8..2da021f 100644
--- a/ucb/source/ucp/webdav/webdavresponseparser.cxx
+++ b/ucb/source/ucp/webdav/webdavresponseparser.cxx
@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <webdavresponseparser.hxx>
+#include "webdavresponseparser.hxx"
#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
#include <cppuhelper/implbase2.hxx>
#include <com/sun/star/xml/sax/Parser.hpp>
diff --git a/ucb/source/ucp/webdav/webdavresponseparser.hxx b/ucb/source/ucp/webdav/webdavresponseparser.hxx
index d59cb2a..f385895 100644
--- a/ucb/source/ucp/webdav/webdavresponseparser.hxx
+++ b/ucb/source/ucp/webdav/webdavresponseparser.hxx
@@ -22,7 +22,7 @@
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/io/XInputStream.hpp>
-#include <DAVResource.hxx>
+#include "DAVResource.hxx"
#include <vector>
//////////////////////////////////////////////////////////////////////////////
commit b42211965a5246735c6551f1472c82da8d20d508
Author: Ariel Constenla-Haile <arielch at apache.org>
Date: Sun Mar 24 12:20:58 2013 +0000
Resolves; #i121201# Handle servers not supporting HEAD requests
(cherry picked from commit d7085ea6fe26d2fc2ba384da04e454e78887f1f1)
Change-Id: I4b3d50906468b998a1f4964d0ad1af3d31725332
diff --git a/ucb/source/ucp/webdav/DAVResourceAccess.cxx b/ucb/source/ucp/webdav/DAVResourceAccess.cxx
index ee713ea..5ce2db6 100644
--- a/ucb/source/ucp/webdav/DAVResourceAccess.cxx
+++ b/ucb/source/ucp/webdav/DAVResourceAccess.cxx
@@ -459,6 +459,51 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET(
}
//=========================================================================
+uno::Reference< io::XInputStream > DAVResourceAccess::GET(
+ DAVRequestHeaders &rRequestHeaders,
+ const std::vector< OUString > & rHeaderNames,
+ DAVResource & rResource,
+ const uno::Reference< ucb::XCommandEnvironment > & xEnv )
+ throw( DAVException )
+{
+ initialize();
+
+ uno::Reference< io::XInputStream > xStream;
+ int errorCount = 0;
+ bool bRetry;
+ do
+ {
+ bRetry = false;
+ try
+ {
+ getUserRequestHeaders( xEnv,
+ getRequestURI(),
+ OUString( "GET" ),
+ rRequestHeaders );
+
+ xStream = m_xSession->GET( getRequestURI(),
+ rHeaderNames,
+ rResource,
+ DAVRequestEnvironment(
+ getRequestURI(),
+ new DAVAuthListener_Impl(
+ xEnv, m_aURL ),
+ rRequestHeaders, xEnv ) );
+ }
+ catch ( DAVException & e )
+ {
+ errorCount++;
+ bRetry = handleException( e, errorCount );
+ if ( !bRetry )
+ throw;
+ }
+ }
+ while ( bRetry );
+
+ return xStream;
+}
+
+//=========================================================================
void DAVResourceAccess::GET(
uno::Reference< io::XOutputStream > & rStream,
const std::vector< OUString > & rHeaderNames,
diff --git a/ucb/source/ucp/webdav/DAVResourceAccess.hxx b/ucb/source/ucp/webdav/DAVResourceAccess.hxx
index a6d5623..23705ce 100644
--- a/ucb/source/ucp/webdav/DAVResourceAccess.hxx
+++ b/ucb/source/ucp/webdav/DAVResourceAccess.hxx
@@ -126,6 +126,14 @@ public:
com::sun::star::ucb::XCommandEnvironment > & xEnv )
throw ( DAVException );
+ com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
+ GET( DAVRequestHeaders & rRequestHeaders,
+ const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all'
+ DAVResource & rResource,
+ const com::sun::star::uno::Reference<
+ com::sun::star::ucb::XCommandEnvironment > & xEnv )
+ throw ( DAVException );
+
void
GET( com::sun::star::uno::Reference<
com::sun::star::io::XOutputStream > & rStream,
diff --git a/ucb/source/ucp/webdav/webdavcontent.cxx b/ucb/source/ucp/webdav/webdavcontent.cxx
index d5e4f90..6410dd3 100644
--- a/ucb/source/ucp/webdav/webdavcontent.cxx
+++ b/ucb/source/ucp/webdav/webdavcontent.cxx
@@ -75,6 +75,118 @@
using namespace com::sun::star;
using namespace http_dav_ucp;
+namespace
+{
+static void lcl_sendPartialGETRequest( bool &bError,
+ DAVException &aLastException,
+ const std::vector< rtl::OUString > aProps,
+ std::vector< rtl::OUString > &aHeaderNames,
+ const std::auto_ptr< DAVResourceAccess > &xResAccess,
+ std::auto_ptr< ContentProperties > &xProps,
+ const uno::Reference< ucb::XCommandEnvironment >& xEnv )
+{
+ bool bIsRequestSize = false;
+ DAVResource aResource;
+ DAVRequestHeaders aPartialGet;
+ aPartialGet.push_back(
+ DAVRequestHeader(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Range" ) ),
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "bytes=0-0" ))));
+
+ for ( std::vector< rtl::OUString >::const_iterator it = aHeaderNames.begin();
+ it != aHeaderNames.end(); it++ )
+ {
+ if ( it->equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Content-Length" ) ) )
+ {
+ bIsRequestSize = true;
+ break;
+ }
+ }
+
+ if ( bIsRequestSize )
+ {
+ // we need to know if the server accepts range requests for a resource
+ // and the range unit it uses
+ aHeaderNames.push_back( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Accept-Ranges" ) ) );
+ aHeaderNames.push_back( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Content-Range" ) ) );
+ }
+ try
+ {
+ uno::Reference< io::XInputStream > xIn = xResAccess->GET( aPartialGet,
+ aHeaderNames,
+ aResource,
+ xEnv );
+ bError = false;
+
+ if ( bIsRequestSize )
+ {
+ // the ContentProperties maps "Content-Length" to the UCB "Size" property
+ // This would have an unrealistic value of 1 byte because we did only a partial GET
+ // Solution: if "Content-Range" is present, map it with UCB "Size" property
+ rtl::OUString aAcceptRanges, aContentRange, aContentLength;
+ std::vector< DAVPropertyValue > &aResponseProps = aResource.properties;
+ for ( std::vector< DAVPropertyValue >::const_iterator it = aResponseProps.begin();
+ it != aResponseProps.end(); it++ )
+ {
+ if ( it->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Accept-Ranges" ) ) )
+ it->Value >>= aAcceptRanges;
+ else if ( it->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Content-Range" ) ) )
+ it->Value >>= aContentRange;
+ else if ( it->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Content-Length" ) ) )
+ it->Value >>= aContentLength;
+ }
+
+ sal_Int64 nSize = 1;
+ if ( aContentLength.getLength() )
+ {
+ nSize = aContentLength.toInt64();
+ }
+
+ // according to http://tools.ietf.org/html/rfc2616#section-3.12
+ // the only range unit defined is "bytes" and implementations
+ // MAY ignore ranges specified using other units.
+ if ( nSize == 1 &&
+ aContentRange.getLength() &&
+ aAcceptRanges.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "bytes" ) ) )
+ {
+ // Parse the Content-Range to get the size
+ // vid. http://tools.ietf.org/html/rfc2616#section-14.16
+ // Content-Range: <range unit> <bytes range>/<size>
+ sal_Int32 nSlash = aContentRange.lastIndexOf( sal_Unicode('/'));
+ if ( nSlash != -1 )
+ {
+ rtl::OUString aSize = aContentRange.copy( nSlash + 1 );
+ // "*" means that the instance-length is unknown at the time when the response was generated
+ if ( !aSize.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "*" )))
+ {
+ for ( std::vector< DAVPropertyValue >::iterator it = aResponseProps.begin();
+ it != aResponseProps.end(); it++ )
+ {
+ if ( it->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Content-Length" ) ) )
+ {
+ it->Value <<= aSize;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if ( xProps.get() )
+ xProps->addProperties(
+ aProps,
+ ContentProperties( aResource ) );
+ else
+ xProps.reset ( new ContentProperties( aResource ) );
+ }
+ catch ( DAVException const & ex )
+ {
+ aLastException = ex;
+ }
+}
+}
+
//=========================================================================
//=========================================================================
//
@@ -1335,13 +1447,43 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues(
}
catch ( DAVException const & e )
{
- bNetworkAccessAllowed
- = shouldAccessNetworkAfterException( e );
+ // non "general-purpose servers" may not support HEAD requests
+ // see http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.1
+ // In this case, perform a partial GET only to get the header info
+ // vid. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35
+ // WARNING if the server does not support partial GETs,
+ // the GET will transfer the whole content
+ bool bError = true;
+ DAVException aLastException = e;
+
+ // According to the spec. the origin server SHOULD return
+ // * 405 (Method Not Allowed):
+ // the method is known but not allowed for the requested resource
+ // * 501 (Not Implemented):
+ // the method is unrecognized or not implemented
+ // TODO SC_NOT_FOUND is only for google-code server
+ if ( aLastException.getStatus() == SC_NOT_IMPLEMENTED ||
+ aLastException.getStatus() == SC_METHOD_NOT_ALLOWED ||
+ aLastException.getStatus() == SC_NOT_FOUND )
+ {
+ lcl_sendPartialGETRequest( bError,
+ aLastException,
+ aMissingProps,
+ aHeaderNames,
+ xResAccess,
+ xProps,
+ xEnv );
+ m_bDidGetOrHead = !bError;
+ }
- if ( !bNetworkAccessAllowed )
+ if ( bError )
{
- cancelCommandExecution( e, xEnv );
- // unreachable
+ if ( !(bNetworkAccessAllowed
+ = shouldAccessNetworkAfterException( aLastException )) )
+ {
+ cancelCommandExecution( aLastException, xEnv );
+ // unreachable
+ }
}
}
}
commit a86bc34ddcff6b04bb9fdb8c960bbf2c49540da1
Author: Ariel Constenla-Haile <arielch at apache.org>
Date: Sun Mar 24 12:20:48 2013 +0000
Resolves: #i121922# Fix wrong condition
(cherry picked from commit 19c47c4496af7db6c8e41cc218d6c8c2fe69db0e)
Change-Id: Ic3febe262cb6723a17e3ea9078137479211fbe59
diff --git a/ucb/source/ucp/webdav/webdavcontent.cxx b/ucb/source/ucp/webdav/webdavcontent.cxx
index d2fad39..d5e4f90 100644
--- a/ucb/source/ucp/webdav/webdavcontent.cxx
+++ b/ucb/source/ucp/webdav/webdavcontent.cxx
@@ -1301,7 +1301,7 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues(
if ( !( xProps.get()
&& xProps->containsAllNames(
rProperties, aMissingProps ) )
- && !m_bDidGetOrHead )
+ || !m_bDidGetOrHead )
{
// Possibly the missing props can be obtained using a HEAD
// request.
More information about the Libreoffice-commits
mailing list