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