xref: /AOO41X/main/ucb/source/ucp/webdav/SerfMoveReqProcImpl.cxx (revision 8590a0fdd306f78ee72b863c64cbcf09c28509eb)
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 <SerfMoveReqProcImpl.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 SerfMoveReqProcImpl::SerfMoveReqProcImpl( const char* inSourcePath,
33*8590a0fdSAndre Fischer                                           const char* inDestinationPath,
34*8590a0fdSAndre Fischer                                           const bool inOverwrite )
35*8590a0fdSAndre Fischer     : SerfRequestProcessorImpl( inSourcePath )
36*8590a0fdSAndre Fischer     , mDestPathStr( inDestinationPath )
37*8590a0fdSAndre Fischer     , mbOverwrite( inOverwrite )
38*8590a0fdSAndre Fischer {
39*8590a0fdSAndre Fischer }
40*8590a0fdSAndre Fischer 
41*8590a0fdSAndre Fischer SerfMoveReqProcImpl::~SerfMoveReqProcImpl()
42*8590a0fdSAndre Fischer {
43*8590a0fdSAndre Fischer }
44*8590a0fdSAndre Fischer 
45*8590a0fdSAndre Fischer serf_bucket_t * SerfMoveReqProcImpl::createSerfRequestBucket( serf_request_t * inSerfRequest )
46*8590a0fdSAndre Fischer {
47*8590a0fdSAndre Fischer     serf_bucket_alloc_t* pSerfBucketAlloc = serf_request_get_alloc( inSerfRequest );
48*8590a0fdSAndre Fischer 
49*8590a0fdSAndre Fischer     // create serf request
50*8590a0fdSAndre Fischer     serf_bucket_t *req_bkt = serf_request_bucket_request_create( inSerfRequest,
51*8590a0fdSAndre Fischer                                                                  "MOVE",
52*8590a0fdSAndre Fischer                                                                  getPathStr(),
53*8590a0fdSAndre Fischer                                                                  0,
54*8590a0fdSAndre Fischer                                                                  serf_request_get_alloc( inSerfRequest ) );
55*8590a0fdSAndre Fischer 
56*8590a0fdSAndre Fischer     // TODO - correct headers
57*8590a0fdSAndre Fischer     // set request header fields
58*8590a0fdSAndre Fischer     serf_bucket_t* hdrs_bkt = serf_bucket_request_get_headers( req_bkt );
59*8590a0fdSAndre Fischer     serf_bucket_headers_setn( hdrs_bkt, "User-Agent", "www.openoffice.org/ucb/" );
60*8590a0fdSAndre Fischer     serf_bucket_headers_setn( hdrs_bkt, "Accept-Encoding", "gzip");
61*8590a0fdSAndre Fischer 
62*8590a0fdSAndre Fischer     // MOVE specific header fields
63*8590a0fdSAndre Fischer     serf_bucket_headers_setn( hdrs_bkt, "Destination", mDestPathStr );
64*8590a0fdSAndre Fischer     if ( mbOverwrite )
65*8590a0fdSAndre Fischer     {
66*8590a0fdSAndre Fischer         serf_bucket_headers_setn( hdrs_bkt, "Overwrite", "T" );
67*8590a0fdSAndre Fischer     }
68*8590a0fdSAndre Fischer     else
69*8590a0fdSAndre Fischer     {
70*8590a0fdSAndre Fischer         serf_bucket_headers_setn( hdrs_bkt, "Overwrite", "F" );
71*8590a0fdSAndre Fischer     }
72*8590a0fdSAndre Fischer 
73*8590a0fdSAndre Fischer     return req_bkt;
74*8590a0fdSAndre Fischer }
75*8590a0fdSAndre Fischer 
76*8590a0fdSAndre Fischer 
77*8590a0fdSAndre Fischer bool SerfMoveReqProcImpl::processSerfResponseBucket( serf_request_t * /*inSerfRequest*/,
78*8590a0fdSAndre Fischer                                                        serf_bucket_t * inSerfResponseBucket,
79*8590a0fdSAndre Fischer                                                        apr_pool_t * /*inAprPool*/,
80*8590a0fdSAndre Fischer                                                        apr_status_t & outStatus )
81*8590a0fdSAndre Fischer {
82*8590a0fdSAndre Fischer     const char* data;
83*8590a0fdSAndre Fischer     apr_size_t len;
84*8590a0fdSAndre Fischer 
85*8590a0fdSAndre Fischer     while (1) {
86*8590a0fdSAndre Fischer         outStatus = serf_bucket_read(inSerfResponseBucket, 8096, &data, &len);
87*8590a0fdSAndre Fischer         if (SERF_BUCKET_READ_ERROR(outStatus))
88*8590a0fdSAndre Fischer         {
89*8590a0fdSAndre Fischer             return true;
90*8590a0fdSAndre Fischer         }
91*8590a0fdSAndre Fischer 
92*8590a0fdSAndre Fischer         /* are we done yet? */
93*8590a0fdSAndre Fischer         if (APR_STATUS_IS_EOF(outStatus))
94*8590a0fdSAndre Fischer         {
95*8590a0fdSAndre Fischer             outStatus = APR_EOF;
96*8590a0fdSAndre Fischer             return true;
97*8590a0fdSAndre Fischer         }
98*8590a0fdSAndre Fischer 
99*8590a0fdSAndre Fischer         /* have we drained the response so far? */
100*8590a0fdSAndre Fischer         if ( APR_STATUS_IS_EAGAIN( outStatus ) )
101*8590a0fdSAndre Fischer         {
102*8590a0fdSAndre Fischer             return false;
103*8590a0fdSAndre Fischer         }
104*8590a0fdSAndre Fischer     }
105*8590a0fdSAndre Fischer 
106*8590a0fdSAndre Fischer     /* NOTREACHED */
107*8590a0fdSAndre Fischer     return true;
108*8590a0fdSAndre Fischer }
109*8590a0fdSAndre Fischer 
110*8590a0fdSAndre Fischer } // namespace http_dav_ucp
111