xref: /AOO41X/main/ucb/source/ucp/webdav/SerfRequestProcessorImpl.cxx (revision e9ff7e89dc60331091effa944f46dac083d27a7b) !
18590a0fdSAndre Fischer /**************************************************************
28590a0fdSAndre Fischer  *
38590a0fdSAndre Fischer  * Licensed to the Apache Software Foundation (ASF) under one
48590a0fdSAndre Fischer  * or more contributor license agreements.  See the NOTICE file
58590a0fdSAndre Fischer  * distributed with this work for additional information
68590a0fdSAndre Fischer  * regarding copyright ownership.  The ASF licenses this file
78590a0fdSAndre Fischer  * to you under the Apache License, Version 2.0 (the
88590a0fdSAndre Fischer  * "License"); you may not use this file except in compliance
98590a0fdSAndre Fischer  * with the License.  You may obtain a copy of the License at
108590a0fdSAndre Fischer  *
118590a0fdSAndre Fischer  *   http://www.apache.org/licenses/LICENSE-2.0
128590a0fdSAndre Fischer  *
138590a0fdSAndre Fischer  * Unless required by applicable law or agreed to in writing,
148590a0fdSAndre Fischer  * software distributed under the License is distributed on an
158590a0fdSAndre Fischer  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
168590a0fdSAndre Fischer  * KIND, either express or implied.  See the License for the
178590a0fdSAndre Fischer  * specific language governing permissions and limitations
188590a0fdSAndre Fischer  * under the License.
198590a0fdSAndre Fischer  *
208590a0fdSAndre Fischer  *************************************************************/
218590a0fdSAndre Fischer 
228590a0fdSAndre Fischer #include <SerfRequestProcessorImpl.hxx>
238590a0fdSAndre Fischer 
248590a0fdSAndre Fischer namespace http_dav_ucp
258590a0fdSAndre Fischer {
268590a0fdSAndre Fischer 
27*e9ff7e89SOliver-Rainer Wittmann SerfRequestProcessorImpl::SerfRequestProcessorImpl( const char* inPath,
28*e9ff7e89SOliver-Rainer Wittmann                                                     const DAVRequestHeaders& inRequestHeaders )
298590a0fdSAndre Fischer     : mPathStr( inPath )
30*e9ff7e89SOliver-Rainer Wittmann     , mrRequestHeaders( inRequestHeaders )
3149989859SOliver-Rainer Wittmann     , mbUseChunkedEncoding( false )
328590a0fdSAndre Fischer {
338590a0fdSAndre Fischer }
348590a0fdSAndre Fischer 
358590a0fdSAndre Fischer SerfRequestProcessorImpl::~SerfRequestProcessorImpl()
368590a0fdSAndre Fischer {
378590a0fdSAndre Fischer }
388590a0fdSAndre Fischer 
398590a0fdSAndre Fischer const char* SerfRequestProcessorImpl::getPathStr() const
408590a0fdSAndre Fischer {
418590a0fdSAndre Fischer     return mPathStr;
428590a0fdSAndre Fischer }
438590a0fdSAndre Fischer 
4449989859SOliver-Rainer Wittmann void SerfRequestProcessorImpl::activateChunkedEncoding()
4549989859SOliver-Rainer Wittmann {
4649989859SOliver-Rainer Wittmann     mbUseChunkedEncoding = true;
4749989859SOliver-Rainer Wittmann }
4849989859SOliver-Rainer Wittmann 
4949989859SOliver-Rainer Wittmann const bool SerfRequestProcessorImpl::useChunkedEncoding() const
5049989859SOliver-Rainer Wittmann {
5149989859SOliver-Rainer Wittmann     return mbUseChunkedEncoding;
5249989859SOliver-Rainer Wittmann }
5349989859SOliver-Rainer Wittmann 
54*e9ff7e89SOliver-Rainer Wittmann void SerfRequestProcessorImpl::setRequestHeaders( serf_bucket_t* inoutSerfHeaderBucket )
55*e9ff7e89SOliver-Rainer Wittmann {
56*e9ff7e89SOliver-Rainer Wittmann     DAVRequestHeaders::const_iterator aHeaderIter( mrRequestHeaders.begin() );
57*e9ff7e89SOliver-Rainer Wittmann     const DAVRequestHeaders::const_iterator aEnd( mrRequestHeaders.end() );
58*e9ff7e89SOliver-Rainer Wittmann 
59*e9ff7e89SOliver-Rainer Wittmann     while ( aHeaderIter != aEnd )
60*e9ff7e89SOliver-Rainer Wittmann     {
61*e9ff7e89SOliver-Rainer Wittmann         const rtl::OString aHeader = rtl::OUStringToOString( (*aHeaderIter).first,
62*e9ff7e89SOliver-Rainer Wittmann                                                                RTL_TEXTENCODING_UTF8 );
63*e9ff7e89SOliver-Rainer Wittmann         const rtl::OString aValue = rtl::OUStringToOString( (*aHeaderIter).second,
64*e9ff7e89SOliver-Rainer Wittmann                                                             RTL_TEXTENCODING_UTF8 );
65*e9ff7e89SOliver-Rainer Wittmann 
66*e9ff7e89SOliver-Rainer Wittmann         serf_bucket_headers_set( inoutSerfHeaderBucket,
67*e9ff7e89SOliver-Rainer Wittmann                                  aHeader.getStr(),
68*e9ff7e89SOliver-Rainer Wittmann                                  aValue.getStr() );
69*e9ff7e89SOliver-Rainer Wittmann 
70*e9ff7e89SOliver-Rainer Wittmann         ++aHeaderIter;
71*e9ff7e89SOliver-Rainer Wittmann     }
72*e9ff7e89SOliver-Rainer Wittmann 
73*e9ff7e89SOliver-Rainer Wittmann     serf_bucket_headers_set( inoutSerfHeaderBucket, "Accept-Encoding", "gzip");
74*e9ff7e89SOliver-Rainer Wittmann }
75*e9ff7e89SOliver-Rainer Wittmann 
7649989859SOliver-Rainer Wittmann bool SerfRequestProcessorImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
7749989859SOliver-Rainer Wittmann                                                           serf_bucket_t * inSerfResponseBucket,
7849989859SOliver-Rainer Wittmann                                                           apr_pool_t * /*inAprPool*/,
7949989859SOliver-Rainer Wittmann                                                           apr_status_t & outStatus )
8049989859SOliver-Rainer Wittmann {
8149989859SOliver-Rainer Wittmann     const char* data;
8249989859SOliver-Rainer Wittmann     apr_size_t len;
8349989859SOliver-Rainer Wittmann 
8449989859SOliver-Rainer Wittmann     while (1) {
8549989859SOliver-Rainer Wittmann         outStatus = serf_bucket_read(inSerfResponseBucket, 8096, &data, &len);
8649989859SOliver-Rainer Wittmann         if (SERF_BUCKET_READ_ERROR(outStatus))
8749989859SOliver-Rainer Wittmann         {
8849989859SOliver-Rainer Wittmann             return true;
8949989859SOliver-Rainer Wittmann         }
9049989859SOliver-Rainer Wittmann 
9149989859SOliver-Rainer Wittmann         if ( len > 0 )
9249989859SOliver-Rainer Wittmann         {
9349989859SOliver-Rainer Wittmann             processChunkOfResponseData( data, len );
9449989859SOliver-Rainer Wittmann         }
9549989859SOliver-Rainer Wittmann 
9649989859SOliver-Rainer Wittmann         /* are we done yet? */
9749989859SOliver-Rainer Wittmann         if (APR_STATUS_IS_EOF(outStatus))
9849989859SOliver-Rainer Wittmann         {
9949989859SOliver-Rainer Wittmann             handleEndOfResponseData( inSerfResponseBucket );
10049989859SOliver-Rainer Wittmann 
10149989859SOliver-Rainer Wittmann             outStatus = APR_EOF;
10249989859SOliver-Rainer Wittmann             return true;
10349989859SOliver-Rainer Wittmann         }
10449989859SOliver-Rainer Wittmann 
10549989859SOliver-Rainer Wittmann         /* have we drained the response so far? */
10649989859SOliver-Rainer Wittmann         if ( APR_STATUS_IS_EAGAIN( outStatus ) )
10749989859SOliver-Rainer Wittmann         {
10849989859SOliver-Rainer Wittmann             return false;
10949989859SOliver-Rainer Wittmann         }
11049989859SOliver-Rainer Wittmann     }
11149989859SOliver-Rainer Wittmann 
11249989859SOliver-Rainer Wittmann     /* NOTREACHED */
11349989859SOliver-Rainer Wittmann     return true;
11449989859SOliver-Rainer Wittmann }
11549989859SOliver-Rainer Wittmann 
1168590a0fdSAndre Fischer } // namespace http_dav_ucp
1178590a0fdSAndre Fischer 
118