You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by or...@apache.org on 2012/03/12 17:06:44 UTC
svn commit: r1299727 - in /incubator/ooo/trunk/main: ucb/source/ucp/webdav/
uui/source/
Author: orw
Date: Mon Mar 12 16:06:42 2012
New Revision: 1299727
URL: http://svn.apache.org/viewvc?rev=1299727&view=rev
Log:
119036 - adapt serf integration
-- use transfer-encoding 'chunked' on HTTPS
-- switch transfer-encoding between 'chunked' and none on 413 HTTP status code
-- refactoring
-- improve user experience of certification dialog - only shown once
Modified:
incubator/ooo/trunk/main/ucb/source/ucp/webdav/DAVResourceAccess.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfCopyReqProcImpl.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfCopyReqProcImpl.hxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.hxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfGetReqProcImpl.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfGetReqProcImpl.hxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfHeadReqProcImpl.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfHeadReqProcImpl.hxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMkColReqProcImpl.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMkColReqProcImpl.hxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMoveReqProcImpl.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMoveReqProcImpl.hxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPostReqProcImpl.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPostReqProcImpl.hxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.hxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.hxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessor.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessor.hxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessorImpl.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessorImpl.hxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfSession.cxx
incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfSession.hxx
incubator/ooo/trunk/main/uui/source/iahndl-ssl.cxx
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/DAVResourceAccess.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/DAVResourceAccess.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/DAVResourceAccess.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/DAVResourceAccess.cxx Mon Mar 12 16:06:42 2012
@@ -1158,7 +1158,8 @@ sal_Bool DAVResourceAccess::handleExcept
// if we have a bad connection try again. Up to three times.
case DAVException::DAV_HTTP_ERROR:
// retry up to three times, if not a client-side error.
- if ( ( e.getStatus() < 400 || e.getStatus() >= 500 ) &&
+ if ( ( e.getStatus() < 400 || e.getStatus() >= 500 ||
+ e.getStatus() == 413 ) &&
errorCount < 3 )
{
return sal_True;
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfCopyReqProcImpl.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfCopyReqProcImpl.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfCopyReqProcImpl.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfCopyReqProcImpl.cxx Mon Mar 12 16:06:42 2012
@@ -71,38 +71,15 @@ serf_bucket_t * SerfCopyReqProcImpl::cre
return req_bkt;
}
-
-bool SerfCopyReqProcImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * /*inAprPool*/,
- apr_status_t & outStatus )
+void SerfCopyReqProcImpl::processChunkOfResponseData( const char* /*data*/,
+ apr_size_t /*len*/ )
{
- const char* data;
- apr_size_t len;
-
- while (1) {
- outStatus = serf_bucket_read(inSerfResponseBucket, 8096, &data, &len);
- if (SERF_BUCKET_READ_ERROR(outStatus))
- {
- return true;
- }
-
- /* are we done yet? */
- if (APR_STATUS_IS_EOF(outStatus))
- {
- outStatus = APR_EOF;
- return true;
- }
-
- /* have we drained the response so far? */
- if ( APR_STATUS_IS_EAGAIN( outStatus ) )
- {
- return false;
- }
- }
+ // nothing to do;
+}
- /* NOTREACHED */
- return true;
+void SerfCopyReqProcImpl::handleEndOfResponseData( serf_bucket_t * /*inSerfResponseBucket*/ )
+{
+ // nothing to do;
}
} // namespace http_dav_ucp
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfCopyReqProcImpl.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfCopyReqProcImpl.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfCopyReqProcImpl.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfCopyReqProcImpl.hxx Mon Mar 12 16:06:42 2012
@@ -39,11 +39,12 @@ public:
virtual
serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
+protected:
virtual
- bool processSerfResponseBucket( serf_request_t * inSerfRequest,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * inAprPool,
- apr_status_t & outStatus );
+ void processChunkOfResponseData( const char* data, apr_size_t len );
+
+ virtual
+ void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket );
private:
const char* mDestPathStr;
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.cxx Mon Mar 12 16:06:42 2012
@@ -56,38 +56,15 @@ serf_bucket_t * SerfDeleteReqProcImpl::c
return req_bkt;
}
-
-bool SerfDeleteReqProcImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * /*inAprPool*/,
- apr_status_t & outStatus )
+void SerfDeleteReqProcImpl::processChunkOfResponseData( const char* /*data*/,
+ apr_size_t /*len*/ )
{
- const char* data;
- apr_size_t len;
-
- while (1) {
- outStatus = serf_bucket_read(inSerfResponseBucket, 8096, &data, &len);
- if (SERF_BUCKET_READ_ERROR(outStatus))
- {
- return true;
- }
-
- /* are we done yet? */
- if (APR_STATUS_IS_EOF(outStatus))
- {
- outStatus = APR_EOF;
- return true;
- }
-
- /* have we drained the response so far? */
- if ( APR_STATUS_IS_EAGAIN( outStatus ) )
- {
- return false;
- }
- }
+ // nothing to do;
+}
- /* NOTREACHED */
- return true;
+void SerfDeleteReqProcImpl::handleEndOfResponseData( serf_bucket_t * /*inSerfResponseBucket*/ )
+{
+ // nothing to do;
}
} // namespace http_dav_ucp
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfDeleteReqProcImpl.hxx Mon Mar 12 16:06:42 2012
@@ -37,11 +37,12 @@ public:
virtual
serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
+protected:
virtual
- bool processSerfResponseBucket( serf_request_t * inSerfRequest,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * inAprPool,
- apr_status_t & outStatus );
+ void processChunkOfResponseData( const char* data, apr_size_t len );
+
+ virtual
+ void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket );
};
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfGetReqProcImpl.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfGetReqProcImpl.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfGetReqProcImpl.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfGetReqProcImpl.cxx Mon Mar 12 16:06:42 2012
@@ -95,6 +95,20 @@ serf_bucket_t * SerfGetReqProcImpl::crea
return req_bkt;
}
+void SerfGetReqProcImpl::processChunkOfResponseData( const char* data,
+ apr_size_t len )
+{
+ if ( xInputStream.is() )
+ {
+ xInputStream->AddToStream( data, len );
+ }
+ else if ( xOutputStream.is() )
+ {
+ const uno::Sequence< sal_Int8 > aDataSeq( (sal_Int8 *)data, len );
+ xOutputStream->writeBytes( aDataSeq );
+ }
+}
+
namespace
{
apr_status_t Serf_ProcessResponseHeader( void* inUserData,
@@ -109,62 +123,19 @@ namespace
}
} // end of anonymous namespace
-bool SerfGetReqProcImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * /*inAprPool*/,
- apr_status_t & outStatus )
+void SerfGetReqProcImpl::handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket )
{
- const char* data;
- apr_size_t len;
-
- while (1) {
- outStatus = serf_bucket_read(inSerfResponseBucket, 8096, &data, &len);
- if (SERF_BUCKET_READ_ERROR(outStatus))
- {
- return true;
- }
-
- if ( len > 0 )
- {
- if ( xInputStream.is() )
- {
- xInputStream->AddToStream( data, len );
- }
- else if ( xOutputStream.is() )
- {
- const uno::Sequence< sal_Int8 > aDataSeq( (sal_Int8 *)data, len );
- xOutputStream->writeBytes( aDataSeq );
- }
- }
-
- /* are we done yet? */
- if (APR_STATUS_IS_EOF(outStatus))
- {
- // read response header, if requested
- if ( mpHeaderNames != 0 && mpResource != 0 )
- {
- serf_bucket_t* SerfHeaderBucket = serf_bucket_response_get_headers( inSerfResponseBucket );
- if ( SerfHeaderBucket != 0 )
- {
- serf_bucket_headers_do( SerfHeaderBucket,
- Serf_ProcessResponseHeader,
- this );
- }
- }
-
- outStatus = APR_EOF;
- return true;
- }
-
- /* have we drained the response so far? */
- if ( APR_STATUS_IS_EAGAIN( outStatus ) )
+ // read response header, if requested
+ if ( mpHeaderNames != 0 && mpResource != 0 )
+ {
+ serf_bucket_t* SerfHeaderBucket = serf_bucket_response_get_headers( inSerfResponseBucket );
+ if ( SerfHeaderBucket != 0 )
{
- return false;
+ serf_bucket_headers_do( SerfHeaderBucket,
+ Serf_ProcessResponseHeader,
+ this );
}
}
-
- /* NOTREACHED */
- return true;
}
void SerfGetReqProcImpl::processSingleResponseHeader( const char* inHeaderName,
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfGetReqProcImpl.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfGetReqProcImpl.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfGetReqProcImpl.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfGetReqProcImpl.hxx Mon Mar 12 16:06:42 2012
@@ -58,14 +58,16 @@ public:
virtual
serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
- virtual
- bool processSerfResponseBucket( serf_request_t * inSerfRequest,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * inAprPool,
- apr_status_t & outStatus );
-
void processSingleResponseHeader( const char* inHeaderName,
const char* inHeaderValue );
+
+protected:
+ virtual
+ void processChunkOfResponseData( const char* data, apr_size_t len );
+
+ virtual
+ void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket );
+
private:
com::sun::star::uno::Reference< SerfInputStream > xInputStream;
com::sun::star::uno::Reference< com::sun::star::io::XOutputStream > xOutputStream;
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfHeadReqProcImpl.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfHeadReqProcImpl.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfHeadReqProcImpl.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfHeadReqProcImpl.cxx Mon Mar 12 16:06:42 2012
@@ -60,6 +60,12 @@ serf_bucket_t * SerfHeadReqProcImpl::cre
return req_bkt;
}
+void SerfHeadReqProcImpl::processChunkOfResponseData( const char* /*data*/,
+ apr_size_t /*len*/ )
+{
+ // nothing to do
+}
+
namespace
{
apr_status_t Serf_ProcessResponseHeader( void* inUserData,
@@ -74,51 +80,19 @@ namespace
}
} // end of anonymous namespace
-bool SerfHeadReqProcImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * /*inAprPool*/,
- apr_status_t & outStatus )
+void SerfHeadReqProcImpl::handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket )
{
- const char* data;
- apr_size_t len;
-
- serf_bucket_t* SerfHeaderBucket = serf_bucket_response_get_headers( inSerfResponseBucket );
-
- while ( SerfHeaderBucket )
+ // read response header, if requested
+ if ( mpHeaderNames != 0 && mpResource != 0 )
{
- outStatus = serf_bucket_read(SerfHeaderBucket, 8096, &data, &len);
- if (SERF_BUCKET_READ_ERROR(outStatus))
- {
- return true;
- }
-
- /* are we done yet? */
- if (APR_STATUS_IS_EOF(outStatus))
+ serf_bucket_t* SerfHeaderBucket = serf_bucket_response_get_headers( inSerfResponseBucket );
+ if ( SerfHeaderBucket != 0 )
{
- // read response header, if requested
- if ( mpHeaderNames != 0 && mpResource != 0 )
- {
- serf_bucket_t* SerfHeaderBucket = serf_bucket_response_get_headers( inSerfResponseBucket );
- if ( SerfHeaderBucket != 0 )
- {
- serf_bucket_headers_do( SerfHeaderBucket,
- Serf_ProcessResponseHeader,
- this );
- }
- }
-
- outStatus = APR_EOF;
- return true;
- }
-
- /* have we drained the response so far? */
- if ( APR_STATUS_IS_EAGAIN( outStatus ) )
- {
- return false;
+ serf_bucket_headers_do( SerfHeaderBucket,
+ Serf_ProcessResponseHeader,
+ this );
}
}
-
- return true;
}
void SerfHeadReqProcImpl::processSingleResponseHeader( const char* inHeaderName,
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfHeadReqProcImpl.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfHeadReqProcImpl.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfHeadReqProcImpl.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfHeadReqProcImpl.hxx Mon Mar 12 16:06:42 2012
@@ -46,14 +46,16 @@ public:
virtual
serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
- virtual
- bool processSerfResponseBucket( serf_request_t * inSerfRequest,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * inAprPool,
- apr_status_t & outStatus );
-
void processSingleResponseHeader( const char* inHeaderName,
const char* inHeaderValue );
+
+protected:
+ virtual
+ void processChunkOfResponseData( const char* data, apr_size_t len );
+
+ virtual
+ void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket );
+
private:
const std::vector< ::rtl::OUString > * mpHeaderNames;
DAVResource* mpResource;
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMkColReqProcImpl.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMkColReqProcImpl.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMkColReqProcImpl.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMkColReqProcImpl.cxx Mon Mar 12 16:06:42 2012
@@ -56,38 +56,15 @@ serf_bucket_t * SerfMkColReqProcImpl::cr
return req_bkt;
}
-
-bool SerfMkColReqProcImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * /*inAprPool*/,
- apr_status_t & outStatus )
+void SerfMkColReqProcImpl::processChunkOfResponseData( const char* /*data*/,
+ apr_size_t /*len*/ )
{
- const char* data;
- apr_size_t len;
-
- while (1) {
- outStatus = serf_bucket_read(inSerfResponseBucket, 8096, &data, &len);
- if (SERF_BUCKET_READ_ERROR(outStatus))
- {
- return true;
- }
-
- /* are we done yet? */
- if (APR_STATUS_IS_EOF(outStatus))
- {
- outStatus = APR_EOF;
- return true;
- }
-
- /* have we drained the response so far? */
- if ( APR_STATUS_IS_EAGAIN( outStatus ) )
- {
- return false;
- }
- }
+ // nothing to do;
+}
- /* NOTREACHED */
- return true;
+void SerfMkColReqProcImpl::handleEndOfResponseData( serf_bucket_t * /*inSerfResponseBucket*/ )
+{
+ // nothing to do;
}
} // namespace http_dav_ucp
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMkColReqProcImpl.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMkColReqProcImpl.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMkColReqProcImpl.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMkColReqProcImpl.hxx Mon Mar 12 16:06:42 2012
@@ -37,12 +37,12 @@ public:
virtual
serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
+protected:
virtual
- bool processSerfResponseBucket( serf_request_t * inSerfRequest,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * inAprPool,
- apr_status_t & outStatus );
+ void processChunkOfResponseData( const char* data, apr_size_t len );
+ virtual
+ void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket );
};
} // namespace http_dav_ucp
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMoveReqProcImpl.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMoveReqProcImpl.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMoveReqProcImpl.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMoveReqProcImpl.cxx Mon Mar 12 16:06:42 2012
@@ -71,38 +71,15 @@ serf_bucket_t * SerfMoveReqProcImpl::cre
return req_bkt;
}
-
-bool SerfMoveReqProcImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * /*inAprPool*/,
- apr_status_t & outStatus )
+void SerfMoveReqProcImpl::processChunkOfResponseData( const char* /*data*/,
+ apr_size_t /*len*/ )
{
- const char* data;
- apr_size_t len;
-
- while (1) {
- outStatus = serf_bucket_read(inSerfResponseBucket, 8096, &data, &len);
- if (SERF_BUCKET_READ_ERROR(outStatus))
- {
- return true;
- }
-
- /* are we done yet? */
- if (APR_STATUS_IS_EOF(outStatus))
- {
- outStatus = APR_EOF;
- return true;
- }
-
- /* have we drained the response so far? */
- if ( APR_STATUS_IS_EAGAIN( outStatus ) )
- {
- return false;
- }
- }
+ // nothing to do;
+}
- /* NOTREACHED */
- return true;
+void SerfMoveReqProcImpl::handleEndOfResponseData( serf_bucket_t * /*inSerfResponseBucket*/ )
+{
+ // nothing to do;
}
} // namespace http_dav_ucp
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMoveReqProcImpl.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMoveReqProcImpl.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMoveReqProcImpl.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfMoveReqProcImpl.hxx Mon Mar 12 16:06:42 2012
@@ -39,11 +39,12 @@ public:
virtual
serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
+protected:
virtual
- bool processSerfResponseBucket( serf_request_t * inSerfRequest,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * inAprPool,
- apr_status_t & outStatus );
+ void processChunkOfResponseData( const char* data, apr_size_t len );
+
+ virtual
+ void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket );
private:
const char* mDestPathStr;
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPostReqProcImpl.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPostReqProcImpl.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPostReqProcImpl.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPostReqProcImpl.cxx Mon Mar 12 16:06:42 2012
@@ -76,6 +76,10 @@ serf_bucket_t * SerfPostReqProcImpl::cre
if ( mpPostData != 0 && mnPostDataLen > 0 )
{
body_bkt = SERF_BUCKET_SIMPLE_STRING_LEN( mpPostData, mnPostDataLen, pSerfBucketAlloc );
+ if ( useChunkedEncoding() )
+ {
+ body_bkt = serf_bucket_chunk_create( body_bkt, pSerfBucketAlloc );
+ }
}
// create serf request
@@ -94,6 +98,10 @@ serf_bucket_t * SerfPostReqProcImpl::cre
// request specific header fields
if ( body_bkt != 0 )
{
+ if ( useChunkedEncoding() )
+ {
+ serf_bucket_headers_setn( hdrs_bkt, "Transfer-Encoding", "chunked");
+ }
serf_bucket_headers_setn( hdrs_bkt, "Content-Length",
rtl::OUStringToOString( rtl::OUString::valueOf( (sal_Int32)mnPostDataLen ), RTL_TEXTENCODING_UTF8 ) );
}
@@ -109,51 +117,23 @@ serf_bucket_t * SerfPostReqProcImpl::cre
return req_bkt;
}
-
-bool SerfPostReqProcImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * /*inAprPool*/,
- apr_status_t & outStatus )
+void SerfPostReqProcImpl::processChunkOfResponseData( const char* data,
+ apr_size_t len )
{
- const char* data;
- apr_size_t len;
-
- while (1) {
- outStatus = serf_bucket_read(inSerfResponseBucket, 8096, &data, &len);
- if (SERF_BUCKET_READ_ERROR(outStatus))
- {
- return true;
- }
-
- if ( len > 0 )
- {
- if ( xInputStream.is() )
- {
- xInputStream->AddToStream( data, len );
- }
- else if ( xOutputStream.is() )
- {
- const uno::Sequence< sal_Int8 > aDataSeq( (sal_Int8 *)data, len );
- xOutputStream->writeBytes( aDataSeq );
- }
- }
-
- /* are we done yet? */
- if (APR_STATUS_IS_EOF(outStatus))
- {
- outStatus = APR_EOF;
- return true;
- }
-
- /* have we drained the response so far? */
- if ( APR_STATUS_IS_EAGAIN( outStatus ) )
- {
- return false;
- }
+ if ( xInputStream.is() )
+ {
+ xInputStream->AddToStream( data, len );
+ }
+ else if ( xOutputStream.is() )
+ {
+ const uno::Sequence< sal_Int8 > aDataSeq( (sal_Int8 *)data, len );
+ xOutputStream->writeBytes( aDataSeq );
}
+}
- /* NOTREACHED */
- return true;
+void SerfPostReqProcImpl::handleEndOfResponseData( serf_bucket_t * /*inSerfResponseBucket*/ )
+{
+ // nothing to do;
}
} // namespace http_dav_ucp
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPostReqProcImpl.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPostReqProcImpl.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPostReqProcImpl.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPostReqProcImpl.hxx Mon Mar 12 16:06:42 2012
@@ -52,11 +52,12 @@ public:
virtual
serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
+protected:
virtual
- bool processSerfResponseBucket( serf_request_t * inSerfRequest,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * inAprPool,
- apr_status_t & outStatus );
+ void processChunkOfResponseData( const char* data, apr_size_t len );
+
+ virtual
+ void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket );
private:
const char* mpPostData;
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.cxx Mon Mar 12 16:06:42 2012
@@ -136,6 +136,10 @@ serf_bucket_t * SerfPropFindReqProcImpl:
rtl::OUString::createFromAscii( PROPFIND_TRAILER );
body_bkt = SERF_BUCKET_SIMPLE_STRING( rtl::OUStringToOString( aBodyText, RTL_TEXTENCODING_UTF8 ),
pSerfBucketAlloc );
+ if ( useChunkedEncoding() )
+ {
+ body_bkt = serf_bucket_chunk_create( body_bkt, pSerfBucketAlloc );
+ }
}
// create serf request
@@ -156,6 +160,10 @@ serf_bucket_t * SerfPropFindReqProcImpl:
serf_bucket_headers_setn( hdrs_bkt, "Depth", mDepthStr );
if ( body_bkt != 0 && aBodyText.getLength() > 0 )
{
+ if ( useChunkedEncoding() )
+ {
+ serf_bucket_headers_setn( hdrs_bkt, "Transfer-Encoding", "chunked");
+ }
serf_bucket_headers_setn( hdrs_bkt, "Content-Type", "application/xml" );
serf_bucket_headers_setn( hdrs_bkt, "Content-Length",
rtl::OUStringToOString( rtl::OUString::valueOf( aBodyText.getLength() ), RTL_TEXTENCODING_UTF8 ) );
@@ -164,54 +172,27 @@ serf_bucket_t * SerfPropFindReqProcImpl:
return req_bkt;
}
-
-bool SerfPropFindReqProcImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * /*inAprPool*/,
- apr_status_t & outStatus )
+void SerfPropFindReqProcImpl::processChunkOfResponseData( const char* data,
+ apr_size_t len )
{
- const char* data;
- apr_size_t len;
-
- while (1) {
- outStatus = serf_bucket_read(inSerfResponseBucket, 2048, &data, &len);
- if (SERF_BUCKET_READ_ERROR(outStatus))
- {
- return true;
- }
-
- if ( len > 0 )
- {
- xInputStream->AddToStream( data, len );
- }
-
- /* are we done yet? */
- if (APR_STATUS_IS_EOF(outStatus))
- {
- if ( mbOnlyPropertyNames )
- {
- const std::vector< DAVResourceInfo > rResInfo( parseWebDAVPropNameResponse( xInputStream.get() ) );
- *mpResInfo = rResInfo;
- }
- else
- {
- const std::vector< DAVResource > rResources( parseWebDAVPropFindResponse( xInputStream.get() ) );
- *mpResources = rResources;
- }
-
- outStatus = APR_EOF;
- return true;
- }
-
- /* have we drained the response so far? */
- if ( APR_STATUS_IS_EAGAIN( outStatus ) )
- {
- return false;
- }
+ if ( xInputStream.is() )
+ {
+ xInputStream->AddToStream( data, len );
}
+}
- /* NOTREACHED */
- return true;
+void SerfPropFindReqProcImpl::handleEndOfResponseData( serf_bucket_t * /*inSerfResponseBucket*/ )
+{
+ if ( mbOnlyPropertyNames )
+ {
+ const std::vector< DAVResourceInfo > rResInfo( parseWebDAVPropNameResponse( xInputStream.get() ) );
+ *mpResInfo = rResInfo;
+ }
+ else
+ {
+ const std::vector< DAVResource > rResources( parseWebDAVPropFindResponse( xInputStream.get() ) );
+ *mpResources = rResources;
+ }
}
} // namespace http_dav_ucp
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropFindReqProcImpl.hxx Mon Mar 12 16:06:42 2012
@@ -51,11 +51,12 @@ public:
virtual
serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
+protected:
virtual
- bool processSerfResponseBucket( serf_request_t * inSerfRequest,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * inAprPool,
- apr_status_t & outStatus );
+ void processChunkOfResponseData( const char* data, apr_size_t len );
+
+ virtual
+ void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket );
private:
void init( const Depth inDepth );
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.cxx Mon Mar 12 16:06:42 2012
@@ -134,6 +134,10 @@ serf_bucket_t * SerfPropPatchReqProcImpl
body_bkt = SERF_BUCKET_SIMPLE_STRING( rtl::OUStringToOString( aBodyText, RTL_TEXTENCODING_UTF8 ),
pSerfBucketAlloc );
+ if ( useChunkedEncoding() )
+ {
+ body_bkt = serf_bucket_chunk_create( body_bkt, pSerfBucketAlloc );
+ }
}
}
@@ -153,6 +157,10 @@ serf_bucket_t * SerfPropPatchReqProcImpl
// request specific header fields
if ( body_bkt != 0 && aBodyText.getLength() > 0 )
{
+ if ( useChunkedEncoding() )
+ {
+ serf_bucket_headers_setn( hdrs_bkt, "Transfer-Encoding", "chunked");
+ }
serf_bucket_headers_setn( hdrs_bkt, "Content-Type", "application/xml" );
serf_bucket_headers_setn( hdrs_bkt, "Content-Length",
rtl::OUStringToOString( rtl::OUString::valueOf( aBodyText.getLength() ), RTL_TEXTENCODING_UTF8 ) );
@@ -161,38 +169,15 @@ serf_bucket_t * SerfPropPatchReqProcImpl
return req_bkt;
}
-
-bool SerfPropPatchReqProcImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * /*inAprPool*/,
- apr_status_t & outStatus )
+void SerfPropPatchReqProcImpl::processChunkOfResponseData( const char* /*data*/,
+ apr_size_t /*len*/ )
{
- const char* data;
- apr_size_t len;
-
- while (1) {
- outStatus = serf_bucket_read(inSerfResponseBucket, 2048, &data, &len);
- if (SERF_BUCKET_READ_ERROR(outStatus))
- {
- return true;
- }
-
- /* are we done yet? */
- if (APR_STATUS_IS_EOF(outStatus))
- {
- outStatus = APR_EOF;
- return true;
- }
-
- /* have we drained the response so far? */
- if ( APR_STATUS_IS_EAGAIN( outStatus ) )
- {
- return false;
- }
- }
+ // nothing to do;
+}
- /* NOTREACHED */
- return true;
+void SerfPropPatchReqProcImpl::handleEndOfResponseData( serf_bucket_t * /*inSerfResponseBucket*/ )
+{
+ // nothing to do;
}
} // namespace http_dav_ucp
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPropPatchReqProcImpl.hxx Mon Mar 12 16:06:42 2012
@@ -41,11 +41,12 @@ public:
virtual
serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
+protected:
virtual
- bool processSerfResponseBucket( serf_request_t * inSerfRequest,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * inAprPool,
- apr_status_t & outStatus );
+ void processChunkOfResponseData( const char* data, apr_size_t len );
+
+ virtual
+ void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket );
private:
const std::vector< ProppatchValue > * mpProperties;
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.cxx Mon Mar 12 16:06:42 2012
@@ -53,6 +53,10 @@ serf_bucket_t * SerfPutReqProcImpl::crea
if ( mpData != 0 && mnDataLen > 0 )
{
body_bkt = SERF_BUCKET_SIMPLE_STRING_LEN( mpData, mnDataLen, pSerfBucketAlloc );
+ if ( useChunkedEncoding() )
+ {
+ body_bkt = serf_bucket_chunk_create( body_bkt, pSerfBucketAlloc );
+ }
}
// create serf request
@@ -71,6 +75,10 @@ serf_bucket_t * SerfPutReqProcImpl::crea
// request specific header fields
if ( body_bkt != 0 )
{
+ if ( useChunkedEncoding() )
+ {
+ serf_bucket_headers_setn( hdrs_bkt, "Transfer-Encoding", "chunked");
+ }
serf_bucket_headers_setn( hdrs_bkt, "Content-Length",
rtl::OUStringToOString( rtl::OUString::valueOf( (sal_Int32)mnDataLen ), RTL_TEXTENCODING_UTF8 ) );
}
@@ -79,38 +87,15 @@ serf_bucket_t * SerfPutReqProcImpl::crea
return req_bkt;
}
-
-bool SerfPutReqProcImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * /*inAprPool*/,
- apr_status_t & outStatus )
+void SerfPutReqProcImpl::processChunkOfResponseData( const char* /*data*/,
+ apr_size_t /*len*/ )
{
- const char* data;
- apr_size_t len;
-
- while (1) {
- outStatus = serf_bucket_read(inSerfResponseBucket, 8096, &data, &len);
- if (SERF_BUCKET_READ_ERROR(outStatus))
- {
- return true;
- }
-
- /* are we done yet? */
- if (APR_STATUS_IS_EOF(outStatus))
- {
- outStatus = APR_EOF;
- return true;
- }
-
- /* have we drained the response so far? */
- if ( APR_STATUS_IS_EAGAIN( outStatus ) )
- {
- return false;
- }
- }
+ // nothing to do;
+}
- /* NOTREACHED */
- return true;
+void SerfPutReqProcImpl::handleEndOfResponseData( serf_bucket_t * /*inSerfResponseBucket*/ )
+{
+ // nothing to do;
}
} // namespace http_dav_ucp
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfPutReqProcImpl.hxx Mon Mar 12 16:06:42 2012
@@ -40,11 +40,12 @@ public:
virtual
serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest );
+protected:
virtual
- bool processSerfResponseBucket( serf_request_t * inSerfRequest,
- serf_bucket_t * inSerfResponseBucket,
- apr_pool_t * inAprPool,
- apr_status_t & outStatus );
+ void processChunkOfResponseData( const char* data, apr_size_t len );
+
+ virtual
+ void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket );
private:
const char* mpData;
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessor.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessor.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessor.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessor.cxx Mon Mar 12 16:06:42 2012
@@ -34,10 +34,14 @@ namespace http_dav_ucp
{
SerfRequestProcessor::SerfRequestProcessor( SerfSession& rSerfSession,
- const rtl::OUString & inPath )
+ const rtl::OUString & inPath,
+ const bool bUseChunkedEncoding )
: mrSerfSession( rSerfSession )
, mPathStr( 0 )
+ , mbUseChunkedEncoding( bUseChunkedEncoding )
, mDestPathStr( 0 )
+ , mContentType( 0 )
+ , mReferer( 0 )
, mpProcImpl( 0 )
, mbProcessingDone( false )
, mpDAVException()
@@ -226,7 +230,7 @@ bool SerfRequestProcessor::processPost(
mContentType = apr_pstrdup( mrSerfSession.getAprPool(),
rtl::OUStringToOString( inContentType, RTL_TEXTENCODING_UTF8 ) );
mReferer = apr_pstrdup( mrSerfSession.getAprPool(),
- rtl::OUStringToOString( inReferer, RTL_TEXTENCODING_UTF8 ) );
+ rtl::OUStringToOString( inReferer, RTL_TEXTENCODING_UTF8 ) );
mpProcImpl = createPostReqProcImpl( mPathStr,
inData,
inDataLen,
@@ -290,6 +294,12 @@ apr_status_t SerfRequestProcessor::runPr
{
prepareProcessor();
+ // activate chunked encoding, if requested
+ if ( mbUseChunkedEncoding )
+ {
+ mpProcImpl->activateChunkedEncoding();
+ }
+
// create serf request
serf_connection_request_create( mrSerfSession.getSerfConnection(),
Serf_SetupRequest,
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessor.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessor.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessor.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessor.hxx Mon Mar 12 16:06:42 2012
@@ -45,7 +45,8 @@ class SerfRequestProcessor
{
public:
SerfRequestProcessor( SerfSession& rSerfSession,
- const rtl::OUString & inPath );
+ const rtl::OUString & inPath,
+ const bool bUseChunkedEncoding );
~SerfRequestProcessor();
// PROPFIND - allprop & named
@@ -156,6 +157,7 @@ public:
SerfSession& mrSerfSession;
const char* mPathStr;
+ const bool mbUseChunkedEncoding;
const char* mDestPathStr;
const char* mContentType;
const char* mReferer;
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessorImpl.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessorImpl.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessorImpl.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessorImpl.cxx Mon Mar 12 16:06:42 2012
@@ -26,6 +26,7 @@ namespace http_dav_ucp
SerfRequestProcessorImpl::SerfRequestProcessorImpl( const char* inPath )
: mPathStr( inPath )
+ , mbUseChunkedEncoding( false )
{
}
@@ -38,5 +39,55 @@ const char* SerfRequestProcessorImpl::ge
return mPathStr;
}
+void SerfRequestProcessorImpl::activateChunkedEncoding()
+{
+ mbUseChunkedEncoding = true;
+}
+
+const bool SerfRequestProcessorImpl::useChunkedEncoding() const
+{
+ return mbUseChunkedEncoding;
+}
+
+bool SerfRequestProcessorImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
+ serf_bucket_t * inSerfResponseBucket,
+ apr_pool_t * /*inAprPool*/,
+ apr_status_t & outStatus )
+{
+ const char* data;
+ apr_size_t len;
+
+ while (1) {
+ outStatus = serf_bucket_read(inSerfResponseBucket, 8096, &data, &len);
+ if (SERF_BUCKET_READ_ERROR(outStatus))
+ {
+ return true;
+ }
+
+ if ( len > 0 )
+ {
+ processChunkOfResponseData( data, len );
+ }
+
+ /* are we done yet? */
+ if (APR_STATUS_IS_EOF(outStatus))
+ {
+ handleEndOfResponseData( inSerfResponseBucket );
+
+ outStatus = APR_EOF;
+ return true;
+ }
+
+ /* have we drained the response so far? */
+ if ( APR_STATUS_IS_EAGAIN( outStatus ) )
+ {
+ return false;
+ }
+ }
+
+ /* NOTREACHED */
+ return true;
+}
+
} // namespace http_dav_ucp
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessorImpl.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessorImpl.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessorImpl.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfRequestProcessorImpl.hxx Mon Mar 12 16:06:42 2012
@@ -39,18 +39,26 @@ public:
/*pure*/ virtual
serf_bucket_t * createSerfRequestBucket( serf_request_t * inSerfRequest ) = 0;
- /*pure*/ virtual
bool processSerfResponseBucket( serf_request_t * inSerfRequest,
serf_bucket_t * inSerfResponseBucket,
apr_pool_t * inAprPool,
- apr_status_t & outStatus ) = 0;
+ apr_status_t & outStatus );
+
+ void activateChunkedEncoding();
protected:
+ /*pure*/ virtual
+ void processChunkOfResponseData( const char* data, apr_size_t len ) = 0;
+
+ /*pure*/ virtual
+ void handleEndOfResponseData( serf_bucket_t * inSerfResponseBucket ) = 0;
+
const char* getPathStr() const;
+ const bool useChunkedEncoding() const;
private:
const char* mPathStr;
-
+ bool mbUseChunkedEncoding;
};
} // namespace http_dav_ucp
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfSession.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfSession.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfSession.cxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfSession.cxx Mon Mar 12 16:06:42 2012
@@ -56,8 +56,6 @@ using namespace http_dav_ucp;
// -------------------------------------------------------------------
// static members!
-bool SerfSession::m_bGlobalsInited = false;
-osl::Mutex SerfSession::m_aGlobalMutex;
//SerfLockStore SerfSession::m_aSerfLockStore;
// -------------------------------------------------------------------
@@ -76,6 +74,8 @@ SerfSession::SerfSession(
, m_pSerfConnection( 0 )
, m_pSerfContext( 0 )
, m_bIsHeadRequestInProgress( false )
+ , m_bUseChunkedEncoding( false )
+ , m_bNoOfTransferEncodingSwitches( 0 )
, m_rProxyDecider( rProxyDecider )
, m_aEnv()
{
@@ -115,14 +115,6 @@ void SerfSession::Init()
if ( m_pSerfConnection == 0 )
{
- osl::Guard< osl::Mutex > theGlobalGuard( m_aGlobalMutex );
- // <--
- if ( !m_bGlobalsInited )
- {
- // TODO - figure out, if anything has to be done here
- m_bGlobalsInited = true;
- }
-
const ucbhelper::InternetProxyServer & rProxyCfg = getProxySettings();
m_aProxyName = rProxyCfg.aName;
@@ -187,6 +179,8 @@ void SerfSession::Init()
serf_config_credentials_callback( m_pSerfContext, Serf_Credentials );
+
+ m_bUseChunkedEncoding = isSSLNeeded();
}
}
@@ -573,6 +567,13 @@ serf_bucket_t* SerfSession::acceptSerfRe
return responseBkt;
}
+SerfRequestProcessor* SerfSession::createReqProc( const rtl::OUString & inPath )
+{
+ return new SerfRequestProcessor( *this,
+ inPath,
+ m_bUseChunkedEncoding );
+}
+
// -------------------------------------------------------------------
// PROPFIND - allprop & named
// -------------------------------------------------------------------
@@ -588,22 +589,20 @@ void SerfSession::PROPFIND( const rtl::O
Init( rEnv );
apr_status_t status = APR_SUCCESS;
- SerfRequestProcessor aReqProc( *this,
- inPath );
- aReqProc.processPropFind( inDepth,
- inPropNames,
- ioResources,
- status );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
+ aReqProc->processPropFind( inDepth,
+ inPropNames,
+ ioResources,
+ status );
if ( status == APR_SUCCESS &&
- aReqProc.mpDAVException == 0 &&
+ aReqProc->mpDAVException == 0 &&
ioResources.empty() )
{
m_aEnv = DAVRequestEnvironment();
throw DAVException( DAVException::DAV_HTTP_ERROR, inPath, (sal_uInt16)APR_EGENERAL );
}
- HandleError( aReqProc,
- inPath, rEnv );
+ HandleError( aReqProc );
}
// -------------------------------------------------------------------
@@ -620,21 +619,19 @@ void SerfSession::PROPFIND( const rtl::O
Init( rEnv );
apr_status_t status = APR_SUCCESS;
- SerfRequestProcessor aReqProc( *this,
- inPath );
- aReqProc.processPropFind( inDepth,
- ioResInfo,
- status );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
+ aReqProc->processPropFind( inDepth,
+ ioResInfo,
+ status );
if ( status == APR_SUCCESS &&
- aReqProc.mpDAVException == 0 &&
+ aReqProc->mpDAVException == 0 &&
ioResInfo.empty() )
{
m_aEnv = DAVRequestEnvironment();
throw DAVException( DAVException::DAV_HTTP_ERROR, inPath, (sal_uInt16)APR_EGENERAL );
}
- HandleError( aReqProc,
- inPath, rEnv );
+ HandleError( aReqProc );
}
// -------------------------------------------------------------------
@@ -650,13 +647,11 @@ void SerfSession::PROPPATCH( const rtl::
Init( rEnv );
apr_status_t status = APR_SUCCESS;
- SerfRequestProcessor aReqProc( *this,
- inPath );
- aReqProc.processPropPatch( inValues,
- status );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
+ aReqProc->processPropPatch( inValues,
+ status );
- HandleError( aReqProc,
- inPath, rEnv );
+ HandleError( aReqProc );
}
// -------------------------------------------------------------------
@@ -674,18 +669,17 @@ void SerfSession::HEAD( const ::rtl::OUS
m_bIsHeadRequestInProgress = true;
- SerfRequestProcessor aReqProc( *this,
- inPath );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
ioResource.uri = inPath;
ioResource.properties.clear();
apr_status_t status = APR_SUCCESS;
- aReqProc.processHead( inHeaderNames,
- ioResource,
- status );
+ aReqProc->processHead( inHeaderNames,
+ ioResource,
+ status );
- HandleError( aReqProc,
- inPath, rEnv );
m_bIsHeadRequestInProgress = false;
+
+ HandleError( aReqProc );
}
// -------------------------------------------------------------------
@@ -702,13 +696,11 @@ SerfSession::GET( const rtl::OUString &
uno::Reference< SerfInputStream > xInputStream( new SerfInputStream );
apr_status_t status = APR_SUCCESS;
- SerfRequestProcessor aReqProc( *this,
- inPath );
- aReqProc.processGet( xInputStream,
- status );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
+ aReqProc->processGet( xInputStream,
+ status );
- HandleError( aReqProc,
- inPath, rEnv );
+ HandleError( aReqProc );
return uno::Reference< io::XInputStream >( xInputStream.get() );
}
@@ -726,13 +718,11 @@ void SerfSession::GET( const rtl::OUStri
Init( rEnv );
apr_status_t status = APR_SUCCESS;
- SerfRequestProcessor aReqProc( *this,
- inPath );
- aReqProc.processGet( ioOutputStream,
- status );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
+ aReqProc->processGet( ioOutputStream,
+ status );
- HandleError( aReqProc,
- inPath, rEnv );
+ HandleError( aReqProc );
}
// -------------------------------------------------------------------
@@ -749,19 +739,17 @@ SerfSession::GET( const rtl::OUString &
Init( rEnv );
- SerfRequestProcessor aReqProc( *this,
- inPath );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
uno::Reference< SerfInputStream > xInputStream( new SerfInputStream );
ioResource.uri = inPath;
ioResource.properties.clear();
apr_status_t status = APR_SUCCESS;
- aReqProc.processGet( xInputStream,
- inHeaderNames,
- ioResource,
- status );
+ aReqProc->processGet( xInputStream,
+ inHeaderNames,
+ ioResource,
+ status );
- HandleError( aReqProc,
- inPath, rEnv );
+ HandleError( aReqProc );
return uno::Reference< io::XInputStream >( xInputStream.get() );
}
@@ -781,18 +769,16 @@ void SerfSession::GET( const rtl::OUStri
Init( rEnv );
- SerfRequestProcessor aReqProc( *this,
- inPath );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
ioResource.uri = inPath;
ioResource.properties.clear();
apr_status_t status = APR_SUCCESS;
- aReqProc.processGet( ioOutputStream,
- inHeaderNames,
- ioResource,
- status );
+ aReqProc->processGet( ioOutputStream,
+ inHeaderNames,
+ ioResource,
+ status );
- HandleError( aReqProc,
- inPath, rEnv );
+ HandleError( aReqProc );
}
// -------------------------------------------------------------------
@@ -807,18 +793,16 @@ void SerfSession::PUT( const rtl::OUStri
Init( rEnv );
- SerfRequestProcessor aReqProc( *this,
- inPath );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
uno::Sequence< sal_Int8 > aDataToSend;
if ( !getDataFromInputStream( inInputStream, aDataToSend, false ) )
throw DAVException( DAVException::DAV_INVALID_ARG );
apr_status_t status = APR_SUCCESS;
- aReqProc.processPut( reinterpret_cast< const char * >( aDataToSend.getConstArray() ),
- aDataToSend.getLength(),
- status );
+ aReqProc->processPut( reinterpret_cast< const char * >( aDataToSend.getConstArray() ),
+ aDataToSend.getLength(),
+ status );
- HandleError( aReqProc,
- inPath, rEnv );
+ HandleError( aReqProc );
}
// -------------------------------------------------------------------
@@ -842,19 +826,17 @@ SerfSession::POST( const rtl::OUString &
Init( rEnv );
- SerfRequestProcessor aReqProc( *this,
- inPath );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
uno::Reference< SerfInputStream > xInputStream( new SerfInputStream );
apr_status_t status = APR_SUCCESS;
- aReqProc.processPost( reinterpret_cast< const char * >( aDataToSend.getConstArray() ),
- aDataToSend.getLength(),
- rContentType,
- rReferer,
- xInputStream,
- status );
+ aReqProc->processPost( reinterpret_cast< const char * >( aDataToSend.getConstArray() ),
+ aDataToSend.getLength(),
+ rContentType,
+ rReferer,
+ xInputStream,
+ status );
- HandleError( aReqProc,
- inPath, rEnv );
+ HandleError( aReqProc );
return uno::Reference< io::XInputStream >( xInputStream.get() );
}
@@ -879,18 +861,16 @@ void SerfSession::POST( const rtl::OUStr
Init( rEnv );
- SerfRequestProcessor aReqProc( *this,
- inPath );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
apr_status_t status = APR_SUCCESS;
- aReqProc.processPost( reinterpret_cast< const char * >( aDataToSend.getConstArray() ),
- aDataToSend.getLength(),
- rContentType,
- rReferer,
- oOutputStream,
- status );
+ aReqProc->processPost( reinterpret_cast< const char * >( aDataToSend.getConstArray() ),
+ aDataToSend.getLength(),
+ rContentType,
+ rReferer,
+ oOutputStream,
+ status );
- HandleError( aReqProc,
- inPath, rEnv );
+ HandleError( aReqProc );
}
// -------------------------------------------------------------------
@@ -904,13 +884,11 @@ void SerfSession::MKCOL( const rtl::OUSt
Init( rEnv );
- SerfRequestProcessor aReqProc( *this,
- inPath );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
apr_status_t status = APR_SUCCESS;
- aReqProc.processMkCol( status );
+ aReqProc->processMkCol( status );
- HandleError( aReqProc,
- inPath, rEnv );
+ HandleError( aReqProc );
}
// -------------------------------------------------------------------
@@ -927,15 +905,13 @@ void SerfSession::COPY( const rtl::OUStr
Init( rEnv );
SerfUri theSourceUri( inSourceURL );
- SerfRequestProcessor aReqProc( *this,
- theSourceUri.GetPath() );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( theSourceUri.GetPath() ) );
apr_status_t status = APR_SUCCESS;
- aReqProc.processCopy( inDestinationURL,
- (inOverWrite ? true : false),
- status );
+ aReqProc->processCopy( inDestinationURL,
+ (inOverWrite ? true : false),
+ status );
- HandleError( aReqProc,
- inSourceURL, rEnv );
+ HandleError( aReqProc );
}
// -------------------------------------------------------------------
@@ -952,15 +928,13 @@ void SerfSession::MOVE( const rtl::OUStr
Init( rEnv );
SerfUri theSourceUri( inSourceURL );
- SerfRequestProcessor aReqProc( *this,
- theSourceUri.GetPath() );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( theSourceUri.GetPath() ) );
apr_status_t status = APR_SUCCESS;
- aReqProc.processMove( inDestinationURL,
- (inOverWrite ? true : false),
- status );
+ aReqProc->processMove( inDestinationURL,
+ (inOverWrite ? true : false),
+ status );
- HandleError( aReqProc,
- inSourceURL, rEnv );
+ HandleError( aReqProc );
}
// -------------------------------------------------------------------
@@ -974,13 +948,11 @@ void SerfSession::DESTROY( const rtl::OU
Init( rEnv );
- SerfRequestProcessor aReqProc( *this,
- inPath );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
apr_status_t status = APR_SUCCESS;
- aReqProc.processDelete( status );
+ aReqProc->processDelete( status );
- HandleError( aReqProc,
- inPath, rEnv );
+ HandleError( aReqProc );
}
// -------------------------------------------------------------------
@@ -1026,10 +998,8 @@ void SerfSession::LOCK( const ::rtl::OUS
Init( rEnv );
- SerfRequestProcessor aReqProc( *this,
- inPath );
- HandleError( aReqProc,
- inPath, rEnv );
+ boost::shared_ptr<SerfRequestProcessor> aReqProc( createReqProc( inPath ) );
+ HandleError( aReqProc );
/* Create a depth zero, exclusive write lock, with default timeout
* (allowing a server to pick a default). token, owner and uri are
* unset. */
@@ -1371,19 +1341,24 @@ bool SerfSession::removeExpiredLocktoken
// HandleError
// Common Error Handler
// -------------------------------------------------------------------
-void SerfSession::HandleError( SerfRequestProcessor& rReqProc,
- const rtl::OUString & /*inPath*/,
- const DAVRequestEnvironment & /*rEnv*/ )
+void SerfSession::HandleError( boost::shared_ptr<SerfRequestProcessor> rReqProc )
throw ( DAVException )
{
m_aEnv = DAVRequestEnvironment();
- if ( rReqProc.mpDAVException )
+ if ( rReqProc->mpDAVException )
{
- DAVException* mpDAVExp( rReqProc.mpDAVException );
+ DAVException* mpDAVExp( rReqProc->mpDAVException );
serf_connection_reset( getSerfConnection() );
+ if ( mpDAVExp->getStatus() == 413 &&
+ m_bNoOfTransferEncodingSwitches < 2 )
+ {
+ m_bUseChunkedEncoding = !m_bUseChunkedEncoding;
+ ++m_bNoOfTransferEncodingSwitches;
+ }
+
throw DAVException( mpDAVExp->getError(),
mpDAVExp->getData(),
mpDAVExp->getStatus() );
Modified: incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfSession.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfSession.hxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfSession.hxx (original)
+++ incubator/ooo/trunk/main/ucb/source/ucp/webdav/SerfSession.hxx Mon Mar 12 16:06:42 2012
@@ -25,9 +25,10 @@
#define INCLUDED_SERFSESSION_HXX
#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 <com/sun/star/lang/XMultiServiceFactory.hpp>
@@ -58,18 +59,20 @@ private:
serf_context_t* m_pSerfContext;
serf_bucket_alloc_t* m_pSerfBucket_Alloc;
bool m_bIsHeadRequestInProgress;
+ bool m_bUseChunkedEncoding;
+ sal_Int16 m_bNoOfTransferEncodingSwitches;
const ucbhelper::InternetProxyDecider & m_rProxyDecider;
DAVRequestEnvironment m_aEnv;
- static bool m_bGlobalsInited;
- static osl::Mutex m_aGlobalMutex;
// static SerfLockStore m_aSerfLockStore;
char* getHostinfo();
bool isSSLNeeded();
+ SerfRequestProcessor* createReqProc( const rtl::OUString & inPath );
+
protected:
virtual ~SerfSession();
@@ -91,7 +94,7 @@ public:
serf_request_t * inRequest,
int inCode,
const char *inAuthProtocol,
- const char *inRealm,
+ const char *inRealm,
apr_pool_t *inAprPool );
apr_status_t verifySerfCertificateChain (
@@ -264,9 +267,7 @@ private:
void Init( const DAVRequestEnvironment & rEnv )
throw ( DAVException );
- void HandleError( SerfRequestProcessor& rReqProc,
- const rtl::OUString & inPath,
- const DAVRequestEnvironment & rEnv )
+ void HandleError( boost::shared_ptr<SerfRequestProcessor> rReqProc )
throw ( DAVException );
const ucbhelper::InternetProxyServer & getProxySettings() const;
Modified: incubator/ooo/trunk/main/uui/source/iahndl-ssl.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/uui/source/iahndl-ssl.cxx?rev=1299727&r1=1299726&r2=1299727&view=diff
==============================================================================
--- incubator/ooo/trunk/main/uui/source/iahndl-ssl.cxx (original)
+++ incubator/ooo/trunk/main/uui/source/iahndl-ssl.cxx Mon Mar 12 16:06:42 2012
@@ -325,7 +325,7 @@ handleCertificateValidationRequest_(
SSLWARN_TYPE_DOMAINMISMATCH,
rRequest.HostName );
}
-
+ else
if ( (((failures & security::CertificateValidity::TIME_INVALID)
== security::CertificateValidity::TIME_INVALID) ||
((failures & security::CertificateValidity::NOT_TIME_NESTED)
@@ -338,7 +338,7 @@ handleCertificateValidationRequest_(
SSLWARN_TYPE_EXPIRED,
rRequest.HostName );
}
-
+ else
if ( (((failures & security::CertificateValidity::REVOKED)
== security::CertificateValidity::REVOKED) ||
((failures & security::CertificateValidity::SIGNATURE_INVALID)