LibreOffice Module ucb (master)  1
NeonLockStore.hxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*************************************************************************
3  *
4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5  *
6  * Copyright 2000, 2010 Oracle and/or its affiliates.
7  *
8  * OpenOffice.org - a multi-platform office productivity suite
9  *
10  * This file is part of OpenOffice.org.
11  *
12  * OpenOffice.org is free software: you can redistribute it and/or modify
13  * it under the terms of the GNU Lesser General Public License version 3
14  * only, as published by the Free Software Foundation.
15  *
16  * OpenOffice.org is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Lesser General Public License version 3 for more details
20  * (a copy is included in the LICENSE file that accompanied this code).
21  *
22  * You should have received a copy of the GNU Lesser General Public License
23  * version 3 along with OpenOffice.org. If not, see
24  * <http://www.openoffice.org/license.html>
25  * for a copy of the LGPLv3 License.
26  *
27  ************************************************************************/
28 #ifndef INCLUDED_UCB_SOURCE_UCP_WEBDAV_NEON_NEONLOCKSTORE_HXX
29 #define INCLUDED_UCB_SOURCE_UCP_WEBDAV_NEON_NEONLOCKSTORE_HXX
30 
31 #include <config_lgpl.h>
32 #include <map>
33 #include <string_view>
34 
35 #include <ne_locks.h>
36 
37 #include <osl/mutex.hxx>
38 #include <rtl/ref.hxx>
39 #include "NeonTypes.hxx"
40 
41 namespace webdav_ucp
42 {
43 
44 class TickerThread;
45 class NeonSession;
46 
47 struct LockInfo
48 {
51 
53  : nLastChanceToSendRefreshRequest( -1 ) {}
54 
56  sal_Int32 _nLastChanceToSendRefreshRequest )
57  : xSession( _xSession ),
58  nLastChanceToSendRefreshRequest( _nLastChanceToSendRefreshRequest ) {}
59 
60 };
61 
62 typedef std::map< NeonLock *, LockInfo > LockInfoMap;
63 
65 {
66  osl::Mutex m_aMutex;
67  ne_lock_store * m_pNeonLockStore;
69  LockInfoMap m_aLockInfoMap;
70  std::vector<NeonLock*> m_aRemoveDeferred;
71 
72 public:
73  NeonLockStore();
75 
76  void registerSession( HttpSession * pHttpSession );
77 
78  NeonLock * findByUri( std::u16string_view rUri );
79 
80  void addLock( NeonLock * pLock,
81  rtl::Reference< NeonSession > const & xSession,
82  // time in seconds since Jan 1 1970
83  // -1: infinite lock, no refresh
84  sal_Int32 nLastChanceToSendRefreshRequest );
85 
86  void removeLock( NeonLock * pLock );
87  void removeLockDeferred(NeonLock* pLock);
88 
89  void refreshLocks();
90 
91 private:
92  void startTicker();
93  void stopTicker(osl::ClearableMutexGuard & rGuard);
94 };
95 
96 } // namespace webdav_ucp
97 
98 #endif // INCLUDED_UCB_SOURCE_UCP_WEBDAV_NEON_NEONLOCKSTORE_HXX
99 
100 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
NeonLock * findByUri(std::u16string_view rUri)
void registerSession(HttpSession *pHttpSession)
rtl::Reference< NeonSession > xSession
void removeLockDeferred(NeonLock *pLock)
ne_session HttpSession
Definition: NeonTypes.hxx:47
std::map< NeonLock *, LockInfo > LockInfoMap
ne_lock_store * m_pNeonLockStore
struct ne_lock NeonLock
Definition: NeonTypes.hxx:53
sal_Int32 nLastChanceToSendRefreshRequest
void stopTicker(osl::ClearableMutexGuard &rGuard)
LockInfo(rtl::Reference< NeonSession > const &_xSession, sal_Int32 _nLastChanceToSendRefreshRequest)
rtl::Reference< TickerThread > m_pTickerThread
void addLock(NeonLock *pLock, rtl::Reference< NeonSession > const &xSession, sal_Int32 nLastChanceToSendRefreshRequest)
void removeLock(NeonLock *pLock)
std::vector< NeonLock * > m_aRemoveDeferred