1*8590a0fdSAndre Fischer /**************************************************************
2*8590a0fdSAndre Fischer  *
3*8590a0fdSAndre Fischer  * Licensed to the Apache Software Foundation (ASF) under one
4*8590a0fdSAndre Fischer  * or more contributor license agreements.  See the NOTICE file
5*8590a0fdSAndre Fischer  * distributed with this work for additional information
6*8590a0fdSAndre Fischer  * regarding copyright ownership.  The ASF licenses this file
7*8590a0fdSAndre Fischer  * to you under the Apache License, Version 2.0 (the
8*8590a0fdSAndre Fischer  * "License"); you may not use this file except in compliance
9*8590a0fdSAndre Fischer  * with the License.  You may obtain a copy of the License at
10*8590a0fdSAndre Fischer  *
11*8590a0fdSAndre Fischer  *   http://www.apache.org/licenses/LICENSE-2.0
12*8590a0fdSAndre Fischer  *
13*8590a0fdSAndre Fischer  * Unless required by applicable law or agreed to in writing,
14*8590a0fdSAndre Fischer  * software distributed under the License is distributed on an
15*8590a0fdSAndre Fischer  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*8590a0fdSAndre Fischer  * KIND, either express or implied.  See the License for the
17*8590a0fdSAndre Fischer  * specific language governing permissions and limitations
18*8590a0fdSAndre Fischer  * under the License.
19*8590a0fdSAndre Fischer  *
20*8590a0fdSAndre Fischer  *************************************************************/
21*8590a0fdSAndre Fischer 
22*8590a0fdSAndre Fischer // MARKER(update_precomp.py): autogen include statement, do not remove
23*8590a0fdSAndre Fischer #include "precompiled_ucb.hxx"
24*8590a0fdSAndre Fischer 
25*8590a0fdSAndre Fischer #include <SerfMkColReqProcImpl.hxx>
26*8590a0fdSAndre Fischer 
27*8590a0fdSAndre Fischer #include <serf.h>
28*8590a0fdSAndre Fischer 
29*8590a0fdSAndre Fischer namespace http_dav_ucp
30*8590a0fdSAndre Fischer {
31*8590a0fdSAndre Fischer 
32*8590a0fdSAndre Fischer SerfMkColReqProcImpl::SerfMkColReqProcImpl( const char* inPath )
33*8590a0fdSAndre Fischer     : SerfRequestProcessorImpl( inPath )
34*8590a0fdSAndre Fischer {
35*8590a0fdSAndre Fischer }
36*8590a0fdSAndre Fischer 
37*8590a0fdSAndre Fischer SerfMkColReqProcImpl::~SerfMkColReqProcImpl()
38*8590a0fdSAndre Fischer {
39*8590a0fdSAndre Fischer }
40*8590a0fdSAndre Fischer 
41*8590a0fdSAndre Fischer serf_bucket_t * SerfMkColReqProcImpl::createSerfRequestBucket( serf_request_t * inSerfRequest )
42*8590a0fdSAndre Fischer {
43*8590a0fdSAndre Fischer     serf_bucket_alloc_t* pSerfBucketAlloc = serf_request_get_alloc( inSerfRequest );
44*8590a0fdSAndre Fischer 
45*8590a0fdSAndre Fischer     // create serf request
46*8590a0fdSAndre Fischer     serf_bucket_t *req_bkt = serf_request_bucket_request_create( inSerfRequest,
47*8590a0fdSAndre Fischer                                                                  "MKCOL",
48*8590a0fdSAndre Fischer                                                                  getPathStr(),
49*8590a0fdSAndre Fischer                                                                  0,
50*8590a0fdSAndre Fischer                                                                  serf_request_get_alloc( inSerfRequest ) );
51*8590a0fdSAndre Fischer 
52*8590a0fdSAndre Fischer     // TODO - correct headers
53*8590a0fdSAndre Fischer     // set request header fields
54*8590a0fdSAndre Fischer     serf_bucket_t* hdrs_bkt = serf_bucket_request_get_headers( req_bkt );
55*8590a0fdSAndre Fischer     serf_bucket_headers_setn( hdrs_bkt, "User-Agent", "www.openoffice.org/ucb/" );
56*8590a0fdSAndre Fischer     serf_bucket_headers_setn( hdrs_bkt, "Accept-Encoding", "gzip");
57*8590a0fdSAndre Fischer 
58*8590a0fdSAndre Fischer     return req_bkt;
59*8590a0fdSAndre Fischer }
60*8590a0fdSAndre Fischer 
61*8590a0fdSAndre Fischer 
62*8590a0fdSAndre Fischer bool SerfMkColReqProcImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
63*8590a0fdSAndre Fischer                                                        serf_bucket_t * inSerfResponseBucket,
64*8590a0fdSAndre Fischer                                                        apr_pool_t * /*inAprPool*/,
65*8590a0fdSAndre Fischer                                                        apr_status_t & outStatus )
66*8590a0fdSAndre Fischer {
67*8590a0fdSAndre Fischer     const char* data;
68*8590a0fdSAndre Fischer     apr_size_t len;
69*8590a0fdSAndre Fischer 
70*8590a0fdSAndre Fischer     while (1) {
71*8590a0fdSAndre Fischer         outStatus = serf_bucket_read(inSerfResponseBucket, 8096, &data, &len);
72*8590a0fdSAndre Fischer         if (SERF_BUCKET_READ_ERROR(outStatus))
73*8590a0fdSAndre Fischer         {
74*8590a0fdSAndre Fischer             return true;
75*8590a0fdSAndre Fischer         }
76*8590a0fdSAndre Fischer 
77*8590a0fdSAndre Fischer         /* are we done yet? */
78*8590a0fdSAndre Fischer         if (APR_STATUS_IS_EOF(outStatus))
79*8590a0fdSAndre Fischer         {
80*8590a0fdSAndre Fischer             outStatus = APR_EOF;
81*8590a0fdSAndre Fischer             return true;
82*8590a0fdSAndre Fischer         }
83*8590a0fdSAndre Fischer 
84*8590a0fdSAndre Fischer         /* have we drained the response so far? */
85*8590a0fdSAndre Fischer         if ( APR_STATUS_IS_EAGAIN( outStatus ) )
86*8590a0fdSAndre Fischer         {
87*8590a0fdSAndre Fischer             return false;
88*8590a0fdSAndre Fischer         }
89*8590a0fdSAndre Fischer     }
90*8590a0fdSAndre Fischer 
91*8590a0fdSAndre Fischer     /* NOTREACHED */
92*8590a0fdSAndre Fischer     return true;
93*8590a0fdSAndre Fischer }
94*8590a0fdSAndre Fischer 
95*8590a0fdSAndre Fischer } // namespace http_dav_ucp
96