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