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