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