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 _DAVSESSION_HXX_
25 #define _DAVSESSION_HXX_
26 
27 #include <memory>
28 #include <rtl/ustring.hxx>
29 #include <com/sun/star/io/XInputStream.hpp>
30 #include <com/sun/star/io/XOutputStream.hpp>
31 #include "DAVException.hxx"
32 #include "DAVProperties.hxx"
33 #include "DAVResource.hxx"
34 #include "DAVSessionFactory.hxx"
35 #include "DAVTypes.hxx"
36 #include "DAVRequestEnvironment.hxx"
37 
38 namespace com { namespace sun { namespace star { namespace ucb {
39     struct Lock;
40 } } } }
41 
42 namespace http_dav_ucp
43 {
44 
45 class DAVAuthListener;
46 
47 class DAVSession
48 {
49 public:
acquire()50     inline void acquire() SAL_THROW(())
51     {
52         osl_incrementInterlockedCount( &m_nRefCount );
53     }
54 
release()55     void release() SAL_THROW(())
56     {
57         if ( osl_decrementInterlockedCount( &m_nRefCount ) == 0 )
58         {
59             m_xFactory->releaseElement( this );
60             delete this;
61         }
62     }
63 
64     virtual sal_Bool CanUse( const ::rtl::OUString & inPath ) = 0;
65 
66     virtual sal_Bool UsesProxy() = 0;
67 
68     // DAV methods
69     //
70 
71     // NOT USED
72     /*
73     virtual void OPTIONS( const ::rtl::OUString & inPath,
74                           DAVCapabilities & outCapabilities,
75                           const DAVRequestEnvironment & rEnv )
76         throw( DAVException ) = 0;
77     */
78 
79     // allprop & named
80     virtual void PROPFIND( const ::rtl::OUString & inPath,
81                            const Depth inDepth,
82                            const std::vector< ::rtl::OUString > & inPropertyNames,
83                            std::vector< DAVResource > & ioResources,
84                            const DAVRequestEnvironment & rEnv )
85         throw( DAVException ) = 0;
86 
87     // propnames
88     virtual void PROPFIND( const ::rtl::OUString & inPath,
89                            const Depth inDepth,
90                            std::vector< DAVResourceInfo > & ioResInfo,
91                            const DAVRequestEnvironment & rEnv )
92         throw( DAVException ) = 0;
93 
94     virtual void PROPPATCH( const ::rtl::OUString & inPath,
95                             const std::vector< ProppatchValue > & inValues,
96                             const DAVRequestEnvironment & rEnv )
97         throw( DAVException ) = 0;
98 
99     virtual void HEAD( const ::rtl::OUString &  inPath,
100                        const std::vector< ::rtl::OUString > & inHeaderNames,
101                        DAVResource & ioResource,
102                        const DAVRequestEnvironment & rEnv )
103         throw( DAVException ) = 0;
104 
105     virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
106     GET( const ::rtl::OUString & inPath,
107          const DAVRequestEnvironment & rEnv )
108         throw( DAVException ) = 0;
109 
110     virtual void GET( const ::rtl::OUString & inPath,
111                       com::sun::star::uno::Reference<
112                           com::sun::star::io::XOutputStream >& o,
113                       const DAVRequestEnvironment & rEnv )
114         throw( DAVException ) = 0;
115 
116     virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
117     GET( const ::rtl::OUString & inPath,
118          const std::vector< ::rtl::OUString > & inHeaderNames,
119          DAVResource & ioResource,
120          const DAVRequestEnvironment & rEnv )
121         throw( DAVException ) = 0;
122 
123     virtual void
124     GET( const ::rtl::OUString & inPath,
125          com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& o,
126          const std::vector< ::rtl::OUString > & inHeaderNames,
127          DAVResource & ioResource,
128          const DAVRequestEnvironment & rEnv )
129         throw( DAVException ) = 0;
130 
131     virtual void PUT( const ::rtl::OUString & inPath,
132                       const com::sun::star::uno::Reference<
133                           com::sun::star::io::XInputStream >& s,
134                       const DAVRequestEnvironment & rEnv )
135         throw( DAVException ) = 0;
136 
137     virtual com::sun::star::uno::Reference< com::sun::star::io::XInputStream >
138     POST( const rtl::OUString & inPath,
139           const rtl::OUString & rContentType,
140           const rtl::OUString & rReferer,
141           const com::sun::star::uno::Reference<
142               com::sun::star::io::XInputStream > & inInputStream,
143           const DAVRequestEnvironment & rEnv )
144         throw ( DAVException ) = 0;
145 
146     virtual void POST( const rtl::OUString & inPath,
147                        const rtl::OUString & rContentType,
148                        const rtl::OUString & rReferer,
149                        const com::sun::star::uno::Reference<
150                            com::sun::star::io::XInputStream > & inInputStream,
151                        com::sun::star::uno::Reference<
152                            com::sun::star::io::XOutputStream > & oOutputStream,
153                        const DAVRequestEnvironment & rEnv )
154         throw ( DAVException ) = 0;
155 
156     virtual void MKCOL( const ::rtl::OUString & inPath,
157                         const DAVRequestEnvironment & rEnv )
158         throw( DAVException ) = 0;
159 
160     virtual void COPY( const ::rtl::OUString & inSource,
161                        const ::rtl::OUString & inDestination,
162                        const DAVRequestEnvironment & rEnv,
163                        sal_Bool inOverwrite = false )
164         throw( DAVException ) = 0;
165 
166     virtual void MOVE( const ::rtl::OUString & inSource,
167                        const ::rtl::OUString & inDestination,
168                        const DAVRequestEnvironment & rEnv,
169                        sal_Bool inOverwrite = false )
170         throw( DAVException ) = 0;
171 
172     virtual void DESTROY( const ::rtl::OUString & inPath,
173                           const DAVRequestEnvironment & rEnv )
174         throw( DAVException ) = 0;
175 
176     // set new lock.
177     virtual void LOCK( const ::rtl::OUString & inPath,
178                        com::sun::star::ucb::Lock & inLock,
179                        const DAVRequestEnvironment & rEnv )
180         throw ( DAVException ) = 0;
181 
182     // refresh existing lock.
183     virtual sal_Int64 LOCK( const ::rtl::OUString & inPath,
184                             sal_Int64 nTimeout,
185                             const DAVRequestEnvironment & rEnv )
186         throw ( DAVException ) = 0;
187 
188     virtual void UNLOCK( const ::rtl::OUString & inPath,
189                          const DAVRequestEnvironment & rEnv )
190         throw ( DAVException ) = 0;
191 
192     virtual void abort()
193         throw( DAVException ) = 0;
194 
195 protected:
196     rtl::Reference< DAVSessionFactory > m_xFactory;
197 
DAVSession(rtl::Reference<DAVSessionFactory> const & rFactory)198     DAVSession( rtl::Reference< DAVSessionFactory > const & rFactory )
199     : m_xFactory( rFactory ), m_nRefCount( 0 ) {}
200 
~DAVSession()201     virtual ~DAVSession() {}
202 
203 private:
204     DAVSessionFactory::Map::iterator m_aContainerIt;
205     oslInterlockedCount m_nRefCount;
206 
207     friend class DAVSessionFactory;
208 #if defined WNT && _MSC_VER < 1310
209     friend struct std::auto_ptr< DAVSession >;
210     // work around compiler bug...
211 #else // WNT
212     friend class std::auto_ptr< DAVSession >;
213 #endif // WNT
214 };
215 
216 } // namespace http_dav_ucp
217 
218 #endif // _DAVSESSION_HXX_
219