1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _DAVRESOURCEACCESS_HXX_
25*b1cdbd2cSJim Jagielski #define _DAVRESOURCEACCESS_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <vector>
28*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx>
29*b1cdbd2cSJim Jagielski #include <rtl/ref.hxx>
30*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XInputStream.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XOutputStream.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/Lock.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XCommandEnvironment.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/WebDAVHTTPMethod.hpp>
36*b1cdbd2cSJim Jagielski #include "DAVAuthListener.hxx"
37*b1cdbd2cSJim Jagielski #include "DAVException.hxx"
38*b1cdbd2cSJim Jagielski #include "DAVSession.hxx"
39*b1cdbd2cSJim Jagielski #include "DAVResource.hxx"
40*b1cdbd2cSJim Jagielski #include "DAVTypes.hxx"
41*b1cdbd2cSJim Jagielski #include "SerfUri.hxx"
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski namespace http_dav_ucp
44*b1cdbd2cSJim Jagielski {
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski class DAVSessionFactory;
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski class DAVResourceAccess
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski     osl::Mutex    m_aMutex;
51*b1cdbd2cSJim Jagielski     rtl::OUString m_aURL;
52*b1cdbd2cSJim Jagielski     rtl::OUString m_aPath;
53*b1cdbd2cSJim Jagielski     rtl::Reference< DAVSession > m_xSession;
54*b1cdbd2cSJim Jagielski     rtl::Reference< DAVSessionFactory > m_xSessionFactory;
55*b1cdbd2cSJim Jagielski     com::sun::star::uno::Reference<
56*b1cdbd2cSJim Jagielski         com::sun::star::lang::XMultiServiceFactory > m_xSMgr;
57*b1cdbd2cSJim Jagielski     std::vector< SerfUri > m_aRedirectURIs;
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski public:
DAVResourceAccess()60*b1cdbd2cSJim Jagielski     DAVResourceAccess() : m_xSessionFactory( 0 ) {}
61*b1cdbd2cSJim Jagielski     DAVResourceAccess( const com::sun::star::uno::Reference<
62*b1cdbd2cSJim Jagielski                            com::sun::star::lang::XMultiServiceFactory > & rSMgr,
63*b1cdbd2cSJim Jagielski                        rtl::Reference<
64*b1cdbd2cSJim Jagielski                        DAVSessionFactory > const & rSessionFactory,
65*b1cdbd2cSJim Jagielski                        const rtl::OUString & rURL );
66*b1cdbd2cSJim Jagielski     DAVResourceAccess( const DAVResourceAccess & rOther );
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski     DAVResourceAccess & operator=( const DAVResourceAccess & rOther );
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski     void setURL( const rtl::OUString & rNewURL )
71*b1cdbd2cSJim Jagielski         throw ( DAVException );
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski     void resetUri();
74*b1cdbd2cSJim Jagielski 
getURL() const75*b1cdbd2cSJim Jagielski     const rtl::OUString & getURL() const { return m_aURL; }
76*b1cdbd2cSJim Jagielski 
getSessionFactory() const77*b1cdbd2cSJim Jagielski     rtl::Reference< DAVSessionFactory > getSessionFactory() const
78*b1cdbd2cSJim Jagielski     { return m_xSessionFactory; }
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski     // DAV methods
81*b1cdbd2cSJim Jagielski     //
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski     // allprop & named
84*b1cdbd2cSJim Jagielski     void
85*b1cdbd2cSJim Jagielski     PROPFIND( const Depth nDepth,
86*b1cdbd2cSJim Jagielski               const std::vector< rtl::OUString > & rPropertyNames,
87*b1cdbd2cSJim Jagielski               std::vector< DAVResource > & rResources,
88*b1cdbd2cSJim Jagielski               const com::sun::star::uno::Reference<
89*b1cdbd2cSJim Jagielski                   com::sun::star::ucb::XCommandEnvironment > & xEnv )
90*b1cdbd2cSJim Jagielski         throw ( DAVException );
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski     // propnames
93*b1cdbd2cSJim Jagielski     void
94*b1cdbd2cSJim Jagielski     PROPFIND( const Depth nDepth,
95*b1cdbd2cSJim Jagielski               std::vector< DAVResourceInfo > & rResInfo,
96*b1cdbd2cSJim Jagielski               const com::sun::star::uno::Reference<
97*b1cdbd2cSJim Jagielski                   com::sun::star::ucb::XCommandEnvironment > & xEnv )
98*b1cdbd2cSJim Jagielski         throw ( DAVException );
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski     void
101*b1cdbd2cSJim Jagielski     PROPPATCH( const std::vector< ProppatchValue > & rValues,
102*b1cdbd2cSJim Jagielski                const com::sun::star::uno::Reference<
103*b1cdbd2cSJim Jagielski                    com::sun::star::ucb::XCommandEnvironment >& xEnv )
104*b1cdbd2cSJim Jagielski         throw ( DAVException );
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski     void
107*b1cdbd2cSJim Jagielski     HEAD( const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all'
108*b1cdbd2cSJim Jagielski           DAVResource & rResource,
109*b1cdbd2cSJim Jagielski           const com::sun::star::uno::Reference<
110*b1cdbd2cSJim Jagielski               com::sun::star::ucb::XCommandEnvironment >& xEnv )
111*b1cdbd2cSJim Jagielski         throw ( DAVException );
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski     com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
114*b1cdbd2cSJim Jagielski     GET( const com::sun::star::uno::Reference<
115*b1cdbd2cSJim Jagielski              com::sun::star::ucb::XCommandEnvironment > & xEnv )
116*b1cdbd2cSJim Jagielski         throw ( DAVException );
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski     void
119*b1cdbd2cSJim Jagielski     GET( com::sun::star::uno::Reference<
120*b1cdbd2cSJim Jagielski              com::sun::star::io::XOutputStream > & rStream,
121*b1cdbd2cSJim Jagielski          const com::sun::star::uno::Reference<
122*b1cdbd2cSJim Jagielski              com::sun::star::ucb::XCommandEnvironment > & xEnv )
123*b1cdbd2cSJim Jagielski         throw ( DAVException );
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski     com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
126*b1cdbd2cSJim Jagielski     GET( const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all'
127*b1cdbd2cSJim Jagielski          DAVResource & rResource,
128*b1cdbd2cSJim Jagielski          const com::sun::star::uno::Reference<
129*b1cdbd2cSJim Jagielski              com::sun::star::ucb::XCommandEnvironment > & xEnv )
130*b1cdbd2cSJim Jagielski         throw ( DAVException );
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski     com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
133*b1cdbd2cSJim Jagielski     GET( DAVRequestHeaders & rRequestHeaders,
134*b1cdbd2cSJim Jagielski          const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all'
135*b1cdbd2cSJim Jagielski          DAVResource & rResource,
136*b1cdbd2cSJim Jagielski          const com::sun::star::uno::Reference<
137*b1cdbd2cSJim Jagielski              com::sun::star::ucb::XCommandEnvironment > & xEnv )
138*b1cdbd2cSJim Jagielski         throw ( DAVException );
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski     void
141*b1cdbd2cSJim Jagielski     GET( com::sun::star::uno::Reference<
142*b1cdbd2cSJim Jagielski              com::sun::star::io::XOutputStream > & rStream,
143*b1cdbd2cSJim Jagielski          const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all'
144*b1cdbd2cSJim Jagielski          DAVResource & rResource,
145*b1cdbd2cSJim Jagielski          const com::sun::star::uno::Reference<
146*b1cdbd2cSJim Jagielski              com::sun::star::ucb::XCommandEnvironment > & xEnv )
147*b1cdbd2cSJim Jagielski         throw ( DAVException );
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski     void
150*b1cdbd2cSJim Jagielski     PUT( const com::sun::star::uno::Reference<
151*b1cdbd2cSJim Jagielski              com::sun::star::io::XInputStream > & rStream,
152*b1cdbd2cSJim Jagielski          const com::sun::star::uno::Reference<
153*b1cdbd2cSJim Jagielski              com::sun::star::ucb::XCommandEnvironment > & xEnv )
154*b1cdbd2cSJim Jagielski         throw ( DAVException );
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski     com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
157*b1cdbd2cSJim Jagielski     POST( const rtl::OUString & rContentType,
158*b1cdbd2cSJim Jagielski           const rtl::OUString & rReferer,
159*b1cdbd2cSJim Jagielski           const com::sun::star::uno::Reference<
160*b1cdbd2cSJim Jagielski               com::sun::star::io::XInputStream > & rInputStream,
161*b1cdbd2cSJim Jagielski           const com::sun::star::uno::Reference<
162*b1cdbd2cSJim Jagielski           com::sun::star::ucb::XCommandEnvironment >& xEnv )
163*b1cdbd2cSJim Jagielski         throw ( DAVException );
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski     void
166*b1cdbd2cSJim Jagielski     POST( const rtl::OUString & rContentType,
167*b1cdbd2cSJim Jagielski           const rtl::OUString & rReferer,
168*b1cdbd2cSJim Jagielski           const com::sun::star::uno::Reference<
169*b1cdbd2cSJim Jagielski               com::sun::star::io::XInputStream > & rInputStream,
170*b1cdbd2cSJim Jagielski           com::sun::star::uno::Reference<
171*b1cdbd2cSJim Jagielski               com::sun::star::io::XOutputStream > & rOutputStream,
172*b1cdbd2cSJim Jagielski           const com::sun::star::uno::Reference<
173*b1cdbd2cSJim Jagielski               com::sun::star::ucb::XCommandEnvironment >& xEnv )
174*b1cdbd2cSJim Jagielski         throw ( DAVException );
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski     void
177*b1cdbd2cSJim Jagielski     MKCOL( const com::sun::star::uno::Reference<
178*b1cdbd2cSJim Jagielski                com::sun::star::ucb::XCommandEnvironment > & xEnv )
179*b1cdbd2cSJim Jagielski         throw ( DAVException );
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski     void
182*b1cdbd2cSJim Jagielski     COPY( const ::rtl::OUString & rSourcePath,
183*b1cdbd2cSJim Jagielski           const ::rtl::OUString & rDestinationURI,
184*b1cdbd2cSJim Jagielski           sal_Bool bOverwrite,
185*b1cdbd2cSJim Jagielski           const com::sun::star::uno::Reference<
186*b1cdbd2cSJim Jagielski               com::sun::star::ucb::XCommandEnvironment > & xEnv )
187*b1cdbd2cSJim Jagielski         throw ( DAVException );
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski     void
190*b1cdbd2cSJim Jagielski     MOVE( const ::rtl::OUString & rSourcePath,
191*b1cdbd2cSJim Jagielski           const ::rtl::OUString & rDestinationURI,
192*b1cdbd2cSJim Jagielski           sal_Bool bOverwrite,
193*b1cdbd2cSJim Jagielski           const com::sun::star::uno::Reference<
194*b1cdbd2cSJim Jagielski               com::sun::star::ucb::XCommandEnvironment > & xEnv )
195*b1cdbd2cSJim Jagielski         throw ( DAVException );
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski     void
198*b1cdbd2cSJim Jagielski     DESTROY( const com::sun::star::uno::Reference<
199*b1cdbd2cSJim Jagielski                  com::sun::star::ucb::XCommandEnvironment > & xEnv )
200*b1cdbd2cSJim Jagielski         throw ( DAVException );
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski     // set new lock.
203*b1cdbd2cSJim Jagielski     void
204*b1cdbd2cSJim Jagielski     LOCK( com::sun::star::ucb::Lock & inLock,
205*b1cdbd2cSJim Jagielski           const com::sun::star::uno::Reference<
206*b1cdbd2cSJim Jagielski           com::sun::star::ucb::XCommandEnvironment > & xEnv )
207*b1cdbd2cSJim Jagielski         throw( DAVException );
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski #if 0 // currently not used, but please don't remove code
210*b1cdbd2cSJim Jagielski     // refresh existing lock.
211*b1cdbd2cSJim Jagielski     sal_Int64
212*b1cdbd2cSJim Jagielski     LOCK( sal_Int64 nTimeout,
213*b1cdbd2cSJim Jagielski           const com::sun::star::uno::Reference<
214*b1cdbd2cSJim Jagielski               com::sun::star::ucb::XCommandEnvironment > & xEnv )
215*b1cdbd2cSJim Jagielski         throw ( DAVException );
216*b1cdbd2cSJim Jagielski #endif
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski     void
219*b1cdbd2cSJim Jagielski     UNLOCK( const com::sun::star::uno::Reference<
220*b1cdbd2cSJim Jagielski                 com::sun::star::ucb::XCommandEnvironment > & xEnv )
221*b1cdbd2cSJim Jagielski         throw ( DAVException );
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski     void
224*b1cdbd2cSJim Jagielski     abort()
225*b1cdbd2cSJim Jagielski         throw ( DAVException );
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski     // helper
228*b1cdbd2cSJim Jagielski     static void
229*b1cdbd2cSJim Jagielski     getUserRequestHeaders(
230*b1cdbd2cSJim Jagielski         const com::sun::star::uno::Reference<
231*b1cdbd2cSJim Jagielski             com::sun::star::ucb::XCommandEnvironment > & xEnv,
232*b1cdbd2cSJim Jagielski         const rtl::OUString & rURI,
233*b1cdbd2cSJim Jagielski         com::sun::star::ucb::WebDAVHTTPMethod eMethod,
234*b1cdbd2cSJim Jagielski         DAVRequestHeaders & rRequestHeaders );
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski private:
237*b1cdbd2cSJim Jagielski     const rtl::OUString & getRequestURI() const;
238*b1cdbd2cSJim Jagielski     sal_Bool detectRedirectCycle( const rtl::OUString& rRedirectURL )
239*b1cdbd2cSJim Jagielski         throw ( DAVException );
240*b1cdbd2cSJim Jagielski     sal_Bool handleException( DAVException & e, int errorCount )
241*b1cdbd2cSJim Jagielski         throw ( DAVException );
242*b1cdbd2cSJim Jagielski     void initialize()
243*b1cdbd2cSJim Jagielski         throw ( DAVException );
244*b1cdbd2cSJim Jagielski };
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski } // namespace http_dav_ucp
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski #endif // _DAVRESOURCEACCESS_HXX_
249