reSIProcate
SIP stack, Dialog Usage Manager and related libraries
Loading...
Searching...
No Matches
InMemorySyncPubDb.hxx
Go to the documentation of this file.
1#if !defined(RESIP_INMEMORYSYNCPUBDB_HXX)
2#define RESIP_INMEMORYSYNCPUBDB_HXX
3
4#include <list>
5
7#include "rutil/Mutex.hxx"
8#include "rutil/Lock.hxx"
9
10namespace resip
11{
12
13class SecurityAttributes;
14
16{
17public:
18 typedef enum
19 {
24 virtual ~InMemorySyncPubDbHandler() = default;
25 HandlerMode getMode() const noexcept { return mMode; }
26 virtual void onDocumentModified(bool sync, const Data& eventType, const Data& documentKey, const Data& eTag, uint64_t expirationTime, uint64_t lastUpdated, const Contents* contents, const SecurityAttributes* securityAttributes) = 0;
27 virtual void onDocumentRemoved(bool sync, const Data& eventType, const Data& documentKey, const Data& eTag, uint64_t lastUpdated) = 0;
28 virtual void onInitialSyncDocument(unsigned int connectionId, const Data& eventType, const Data& documentKey, const Data& eTag, uint64_t expirationTime, uint64_t lastUpdated, const Contents* contents, const SecurityAttributes* securityAttributes) {}
29protected:
31};
32
43{
44public:
45
46 explicit InMemorySyncPubDb(bool syncEnabled = false);
47 virtual ~InMemorySyncPubDb() = default;
48
49 virtual void addHandler(InMemorySyncPubDbHandler* handler);
50 virtual void removeHandler(InMemorySyncPubDbHandler* handler);
51 virtual void initialSync(unsigned int connectionId);
52
53 // PublicationPersistenceManager Methods
54 virtual void addUpdateDocument(const PubDocument& document);
55 virtual bool removeDocument(const Data& eventType, const Data& documentKey, const Data& eTag, uint64_t lastUpdated, bool syncPublication = false);
56 virtual bool getMergedETags(const Data& eventType, const Data& documentKey, ETagMerger& merger, Contents* destination);
57 virtual bool documentExists(const Data& eventType, const Data& documentKey, const Data& eTag);
58 virtual bool checkExpired(const Data& eventType, const Data& documentKey, const Data& eTag, uint64_t lastUpdated);
59 virtual void lockDocuments();
60 virtual KeyToETagMap& getDocuments(); // Ensure you lock before calling this and unlock when done
61 virtual void unlockDocuments();
62
63protected:
64
65 void invokeOnDocumentModified(bool sync, const Data& eventType, const Data& documentKey, const Data& eTag, uint64_t expirationTime, uint64_t lastUpdated, const Contents* contents, const SecurityAttributes* securityAttributes);
66 void invokeOnDocumentRemoved(bool sync, const Data& eventType, const Data& documentKey, const Data& eTag, uint64_t lastUpdated);
67 void invokeOnInitialSyncDocument(unsigned int connectionId, const Data& eventType, const Data& documentKey, const Data& eTag, uint64_t expirationTime, uint64_t lastUpdated, const Contents* contents, const SecurityAttributes* securityAttributes);
68 bool shouldEraseDocument(PubDocument& document, uint64_t now);
70 typedef std::list<InMemorySyncPubDbHandler*> HandlerList;
71 HandlerList mHandlers; // use list over set to preserve add order
73
76};
77
78}
79
80#endif
81
82/* ====================================================================
83*
84* Copyright (c) 2015 SIP Spectrum, Inc. All rights reserved.
85*
86* Redistribution and use in source and binary forms, with or without
87* modification, are permitted provided that the following conditions
88* are met:
89*
90* 1. Redistributions of source code must retain the above copyright
91* notice, this list of conditions and the following disclaimer.
92*
93* 2. Redistributions in binary form must reproduce the above copyright
94* notice, this list of conditions and the following disclaimer in
95* the documentation and/or other materials provided with the
96* distribution.
97*
98* 3. Neither the name of the author(s) nor the names of any contributors
99* may be used to endorse or promote products derived from this software
100* without specific prior written permission.
101*
102* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTORS "AS IS" AND
103* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
104* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
105* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTORS BE LIABLE
106* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
107* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
108* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
109* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
110* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
111* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
112* SUCH DAMAGE.
113*
114* ====================================================================
115*
116*/
117/*
118* vi: set shiftwidth=3 expandtab:
119*/
Base class for all SIP body types.
Definition Contents.hxx:51
An alternative to std::string, encapsulates an arbitrary buffer of bytes.
Definition Data.hxx:90
virtual void onInitialSyncDocument(unsigned int connectionId, const Data &eventType, const Data &documentKey, const Data &eTag, uint64_t expirationTime, uint64_t lastUpdated, const Contents *contents, const SecurityAttributes *securityAttributes)
virtual ~InMemorySyncPubDbHandler()=default
InMemorySyncPubDbHandler(HandlerMode mode=SyncServer)
virtual void onDocumentRemoved(bool sync, const Data &eventType, const Data &documentKey, const Data &eTag, uint64_t lastUpdated)=0
virtual void onDocumentModified(bool sync, const Data &eventType, const Data &documentKey, const Data &eTag, uint64_t expirationTime, uint64_t lastUpdated, const Contents *contents, const SecurityAttributes *securityAttributes)=0
HandlerMode getMode() const noexcept
Implementation of a persistence manager.
virtual KeyToETagMap & getDocuments()
bool shouldEraseDocument(PubDocument &document, uint64_t now)
void invokeOnDocumentRemoved(bool sync, const Data &eventType, const Data &documentKey, const Data &eTag, uint64_t lastUpdated)
void invokeOnInitialSyncDocument(unsigned int connectionId, const Data &eventType, const Data &documentKey, const Data &eTag, uint64_t expirationTime, uint64_t lastUpdated, const Contents *contents, const SecurityAttributes *securityAttributes)
virtual ~InMemorySyncPubDb()=default
virtual bool checkExpired(const Data &eventType, const Data &documentKey, const Data &eTag, uint64_t lastUpdated)
virtual bool documentExists(const Data &eventType, const Data &documentKey, const Data &eTag)
virtual void addUpdateDocument(const PubDocument &document)
virtual void initialSync(unsigned int connectionId)
void invokeOnDocumentModified(bool sync, const Data &eventType, const Data &documentKey, const Data &eTag, uint64_t expirationTime, uint64_t lastUpdated, const Contents *contents, const SecurityAttributes *securityAttributes)
virtual void addHandler(InMemorySyncPubDbHandler *handler)
virtual bool removeDocument(const Data &eventType, const Data &documentKey, const Data &eTag, uint64_t lastUpdated, bool syncPublication=false)
std::list< InMemorySyncPubDbHandler * > HandlerList
virtual void removeHandler(InMemorySyncPubDbHandler *handler)
virtual bool getMergedETags(const Data &eventType, const Data &documentKey, ETagMerger &merger, Contents *destination)
Abstract interface of a datastore of all publication documents processed by DUM.
std::map< resip::Data, ETagToDocumentMap > KeyToETagMap
dcm! – add UnusedChecking(_enum) below;
std::mutex Mutex
A semaphore that can be locked by only one thread at a time.
Definition Mutex.hxx:37
unsigned long long uint64_t
Definition Stun.hxx:39