xref: /trunk/main/ucb/source/ucp/webdav/CurlLockStore.hxx (revision 914d351e5f5b84e4342a86d6ab8d4aca7308b9bd)
1*51ba086bSDamjan Jovanovic /**************************************************************
2*51ba086bSDamjan Jovanovic  *
3*51ba086bSDamjan Jovanovic  * Licensed to the Apache Software Foundation (ASF) under one
4*51ba086bSDamjan Jovanovic  * or more contributor license agreements.  See the NOTICE file
5*51ba086bSDamjan Jovanovic  * distributed with this work for additional information
6*51ba086bSDamjan Jovanovic  * regarding copyright ownership.  The ASF licenses this file
7*51ba086bSDamjan Jovanovic  * to you under the Apache License, Version 2.0 (the
8*51ba086bSDamjan Jovanovic  * "License"); you may not use this file except in compliance
9*51ba086bSDamjan Jovanovic  * with the License.  You may obtain a copy of the License at
10*51ba086bSDamjan Jovanovic  *
11*51ba086bSDamjan Jovanovic  *   http://www.apache.org/licenses/LICENSE-2.0
12*51ba086bSDamjan Jovanovic  *
13*51ba086bSDamjan Jovanovic  * Unless required by applicable law or agreed to in writing,
14*51ba086bSDamjan Jovanovic  * software distributed under the License is distributed on an
15*51ba086bSDamjan Jovanovic  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*51ba086bSDamjan Jovanovic  * KIND, either express or implied.  See the License for the
17*51ba086bSDamjan Jovanovic  * specific language governing permissions and limitations
18*51ba086bSDamjan Jovanovic  * under the License.
19*51ba086bSDamjan Jovanovic  *
20*51ba086bSDamjan Jovanovic  *************************************************************/
21*51ba086bSDamjan Jovanovic 
22*51ba086bSDamjan Jovanovic 
23*51ba086bSDamjan Jovanovic #ifndef INCLUDED_CURLLOCKSTORE_HXX
24*51ba086bSDamjan Jovanovic #define INCLUDED_CURLLOCKSTORE_HXX
25*51ba086bSDamjan Jovanovic 
26*51ba086bSDamjan Jovanovic #include <map>
27*51ba086bSDamjan Jovanovic #include <osl/mutex.hxx>
28*51ba086bSDamjan Jovanovic #include <rtl/ref.hxx>
29*51ba086bSDamjan Jovanovic #include "CurlTypes.hxx"
30*51ba086bSDamjan Jovanovic #include "CurlSession.hxx"
31*51ba086bSDamjan Jovanovic 
32*51ba086bSDamjan Jovanovic namespace http_dav_ucp
33*51ba086bSDamjan Jovanovic {
34*51ba086bSDamjan Jovanovic 
35*51ba086bSDamjan Jovanovic class TickerThread;
36*51ba086bSDamjan Jovanovic class CurlSession;
37*51ba086bSDamjan Jovanovic 
38*51ba086bSDamjan Jovanovic struct ltptr
39*51ba086bSDamjan Jovanovic {
operator ()http_dav_ucp::ltptr40*51ba086bSDamjan Jovanovic     bool operator()( const CurlLock * p1, const CurlLock * p2 ) const
41*51ba086bSDamjan Jovanovic     {
42*51ba086bSDamjan Jovanovic         return p1 < p2;
43*51ba086bSDamjan Jovanovic     }
44*51ba086bSDamjan Jovanovic };
45*51ba086bSDamjan Jovanovic 
46*51ba086bSDamjan Jovanovic typedef struct _LockInfo
47*51ba086bSDamjan Jovanovic {
48*51ba086bSDamjan Jovanovic     rtl::Reference< CurlSession > xSession;
49*51ba086bSDamjan Jovanovic     sal_Int32 nLastChanceToSendRefreshRequest;
50*51ba086bSDamjan Jovanovic 
_LockInfohttp_dav_ucp::_LockInfo51*51ba086bSDamjan Jovanovic     _LockInfo()
52*51ba086bSDamjan Jovanovic         : nLastChanceToSendRefreshRequest( -1 ) {}
53*51ba086bSDamjan Jovanovic 
_LockInfohttp_dav_ucp::_LockInfo54*51ba086bSDamjan Jovanovic     _LockInfo( rtl::Reference< CurlSession > const & _xSession,
55*51ba086bSDamjan Jovanovic               sal_Int32 _nLastChanceToSendRefreshRequest )
56*51ba086bSDamjan Jovanovic         : xSession( _xSession )
57*51ba086bSDamjan Jovanovic         , nLastChanceToSendRefreshRequest( _nLastChanceToSendRefreshRequest ) {}
58*51ba086bSDamjan Jovanovic 
59*51ba086bSDamjan Jovanovic } LockInfo;
60*51ba086bSDamjan Jovanovic 
61*51ba086bSDamjan Jovanovic typedef std::map< CurlLock *, LockInfo, ltptr > LockInfoMap;
62*51ba086bSDamjan Jovanovic 
63*51ba086bSDamjan Jovanovic class CurlLockStore
64*51ba086bSDamjan Jovanovic {
65*51ba086bSDamjan Jovanovic     osl::Mutex         m_aMutex;
66*51ba086bSDamjan Jovanovic     TickerThread     * m_pTickerThread;
67*51ba086bSDamjan Jovanovic     LockInfoMap        m_aLockInfoMap;
68*51ba086bSDamjan Jovanovic 
69*51ba086bSDamjan Jovanovic public:
70*51ba086bSDamjan Jovanovic     CurlLockStore();
71*51ba086bSDamjan Jovanovic     ~CurlLockStore();
72*51ba086bSDamjan Jovanovic 
73*51ba086bSDamjan Jovanovic     void registerSession( CurlSession aSession );
74*51ba086bSDamjan Jovanovic 
75*51ba086bSDamjan Jovanovic     CurlLock * findByUri( rtl::OUString const & rUri );
76*51ba086bSDamjan Jovanovic 
77*51ba086bSDamjan Jovanovic     void addLock( CurlLock * pLock,
78*51ba086bSDamjan Jovanovic                   rtl::Reference< CurlSession > const & xSession,
79*51ba086bSDamjan Jovanovic                   // time in seconds since Jan 1 1970
80*51ba086bSDamjan Jovanovic                   // -1: infinite lock, no refresh
81*51ba086bSDamjan Jovanovic                   sal_Int32 nLastChanceToSendRefreshRequest );
82*51ba086bSDamjan Jovanovic 
83*51ba086bSDamjan Jovanovic     void updateLock( CurlLock * pLock,
84*51ba086bSDamjan Jovanovic                      sal_Int32 nLastChanceToSendRefreshRequest );
85*51ba086bSDamjan Jovanovic 
86*51ba086bSDamjan Jovanovic     void removeLock( CurlLock * pLock );
87*51ba086bSDamjan Jovanovic 
88*51ba086bSDamjan Jovanovic     void refreshLocks();
89*51ba086bSDamjan Jovanovic 
90*51ba086bSDamjan Jovanovic private:
91*51ba086bSDamjan Jovanovic     void startTicker();
92*51ba086bSDamjan Jovanovic     void stopTicker();
93*51ba086bSDamjan Jovanovic };
94*51ba086bSDamjan Jovanovic 
95*51ba086bSDamjan Jovanovic } // namespace http_dav_ucp
96*51ba086bSDamjan Jovanovic 
97*51ba086bSDamjan Jovanovic #endif // INCLUDED_CURLLOCKSTORE_HXX
98