xref: /trunk/main/ucb/source/ucp/webdav/DAVResourceAccess.hxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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 
23 
24 #ifndef _DAVRESOURCEACCESS_HXX_
25 #define _DAVRESOURCEACCESS_HXX_
26 
27 #include <vector>
28 #include <rtl/ustring.hxx>
29 #include <rtl/ref.hxx>
30 #include <osl/mutex.hxx>
31 #include <com/sun/star/io/XInputStream.hpp>
32 #include <com/sun/star/io/XOutputStream.hpp>
33 #include <com/sun/star/ucb/Lock.hpp>
34 #include <com/sun/star/ucb/XCommandEnvironment.hpp>
35 #include <com/sun/star/ucb/WebDAVHTTPMethod.hpp>
36 #include "DAVAuthListener.hxx"
37 #include "DAVException.hxx"
38 #include "DAVSession.hxx"
39 #include "DAVResource.hxx"
40 #include "DAVTypes.hxx"
41 #include "CurlUri.hxx"
42 
43 namespace http_dav_ucp
44 {
45 
46 class DAVSessionFactory;
47 
48 class DAVResourceAccess
49 {
50     osl::Mutex    m_aMutex;
51     rtl::OUString m_aURL;
52     rtl::OUString m_aPath;
53     rtl::Reference< DAVSession > m_xSession;
54     rtl::Reference< DAVSessionFactory > m_xSessionFactory;
55     com::sun::star::uno::Reference<
56         com::sun::star::lang::XMultiServiceFactory > m_xSMgr;
57     std::vector< CurlUri > m_aRedirectURIs;
58 
59 public:
DAVResourceAccess()60     DAVResourceAccess() : m_xSessionFactory( 0 ) {}
61     DAVResourceAccess( const com::sun::star::uno::Reference<
62                            com::sun::star::lang::XMultiServiceFactory > & rSMgr,
63                        rtl::Reference<
64                        DAVSessionFactory > const & rSessionFactory,
65                        const rtl::OUString & rURL );
66     DAVResourceAccess( const DAVResourceAccess & rOther );
67 
68     DAVResourceAccess & operator=( const DAVResourceAccess & rOther );
69 
70     void setURL( const rtl::OUString & rNewURL );
71 
72     void resetUri();
73 
getURL() const74     const rtl::OUString & getURL() const { return m_aURL; }
75 
getSessionFactory() const76     rtl::Reference< DAVSessionFactory > getSessionFactory() const
77     { return m_xSessionFactory; }
78 
79     // DAV methods
80     //
81 
82     // allprop & named
83     void
84     PROPFIND( const Depth nDepth,
85               const std::vector< rtl::OUString > & rPropertyNames,
86               std::vector< DAVResource > & rResources,
87               const com::sun::star::uno::Reference<
88                   com::sun::star::ucb::XCommandEnvironment > & xEnv );
89 
90     // propnames
91     void
92     PROPFIND( const Depth nDepth,
93               std::vector< DAVResourceInfo > & rResInfo,
94               const com::sun::star::uno::Reference<
95                   com::sun::star::ucb::XCommandEnvironment > & xEnv );
96 
97     void
98     PROPPATCH( const std::vector< ProppatchValue > & rValues,
99                const com::sun::star::uno::Reference<
100                    com::sun::star::ucb::XCommandEnvironment >& xEnv );
101 
102     void
103     HEAD( const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all'
104           DAVResource & rResource,
105           const com::sun::star::uno::Reference<
106               com::sun::star::ucb::XCommandEnvironment >& xEnv );
107 
108     com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
109     GET( const com::sun::star::uno::Reference<
110              com::sun::star::ucb::XCommandEnvironment > & xEnv );
111 
112     void
113     GET( com::sun::star::uno::Reference<
114              com::sun::star::io::XOutputStream > & rStream,
115          const com::sun::star::uno::Reference<
116              com::sun::star::ucb::XCommandEnvironment > & xEnv );
117 
118     com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
119     GET( const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all'
120          DAVResource & rResource,
121          const com::sun::star::uno::Reference<
122              com::sun::star::ucb::XCommandEnvironment > & xEnv );
123 
124     com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
125     GET( DAVRequestHeaders & rRequestHeaders,
126          const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all'
127          DAVResource & rResource,
128          const com::sun::star::uno::Reference<
129              com::sun::star::ucb::XCommandEnvironment > & xEnv );
130 
131     void
132     GET( com::sun::star::uno::Reference<
133              com::sun::star::io::XOutputStream > & rStream,
134          const std::vector< rtl::OUString > & rHeaderNames, // empty == 'all'
135          DAVResource & rResource,
136          const com::sun::star::uno::Reference<
137              com::sun::star::ucb::XCommandEnvironment > & xEnv );
138 
139     void
140     PUT( const com::sun::star::uno::Reference<
141              com::sun::star::io::XInputStream > & rStream,
142          const com::sun::star::uno::Reference<
143              com::sun::star::ucb::XCommandEnvironment > & xEnv );
144 
145     com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
146     POST( const rtl::OUString & rContentType,
147           const rtl::OUString & rReferer,
148           const com::sun::star::uno::Reference<
149               com::sun::star::io::XInputStream > & rInputStream,
150           const com::sun::star::uno::Reference<
151           com::sun::star::ucb::XCommandEnvironment >& xEnv );
152 
153     void
154     POST( const rtl::OUString & rContentType,
155           const rtl::OUString & rReferer,
156           const com::sun::star::uno::Reference<
157               com::sun::star::io::XInputStream > & rInputStream,
158           com::sun::star::uno::Reference<
159               com::sun::star::io::XOutputStream > & rOutputStream,
160           const com::sun::star::uno::Reference<
161               com::sun::star::ucb::XCommandEnvironment >& xEnv );
162 
163     void
164     MKCOL( const com::sun::star::uno::Reference<
165                com::sun::star::ucb::XCommandEnvironment > & xEnv );
166 
167     void
168     COPY( const ::rtl::OUString & rSourcePath,
169           const ::rtl::OUString & rDestinationURI,
170           sal_Bool bOverwrite,
171           const com::sun::star::uno::Reference<
172               com::sun::star::ucb::XCommandEnvironment > & xEnv );
173 
174     void
175     MOVE( const ::rtl::OUString & rSourcePath,
176           const ::rtl::OUString & rDestinationURI,
177           sal_Bool bOverwrite,
178           const com::sun::star::uno::Reference<
179               com::sun::star::ucb::XCommandEnvironment > & xEnv );
180 
181     void
182     DESTROY( const com::sun::star::uno::Reference<
183                  com::sun::star::ucb::XCommandEnvironment > & xEnv );
184 
185     // set new lock.
186     void
187     LOCK( com::sun::star::ucb::Lock & inLock,
188           const com::sun::star::uno::Reference<
189           com::sun::star::ucb::XCommandEnvironment > & xEnv );
190 
191 #if 0 // currently not used, but please don't remove code
192     // refresh existing lock.
193     sal_Int64
194     LOCK( sal_Int64 nTimeout,
195           const com::sun::star::uno::Reference<
196               com::sun::star::ucb::XCommandEnvironment > & xEnv );
197 #endif
198 
199     void
200     UNLOCK( const com::sun::star::uno::Reference<
201                 com::sun::star::ucb::XCommandEnvironment > & xEnv );
202 
203     void
204     abort();
205 
206     // helper
207     static void
208     getUserRequestHeaders(
209         const com::sun::star::uno::Reference<
210             com::sun::star::ucb::XCommandEnvironment > & xEnv,
211         const rtl::OUString & rURI,
212         com::sun::star::ucb::WebDAVHTTPMethod eMethod,
213         DAVRequestHeaders & rRequestHeaders );
214 
215 private:
216     const rtl::OUString & getRequestURI() const;
217     sal_Bool detectRedirectCycle( const rtl::OUString& rRedirectURL );
218     sal_Bool handleException( DAVException & e, int errorCount );
219     void initialize();
220 };
221 
222 } // namespace http_dav_ucp
223 
224 #endif // _DAVRESOURCEACCESS_HXX_
225