Set fourth file version digit to signify rebuild.
[shibboleth/cpp-xmltooling.git] / xmltooling / util / ReplayCache.h
1 /**
2  * Licensed to the University Corporation for Advanced Internet
3  * Development, Inc. (UCAID) under one or more contributor license
4  * agreements. See the NOTICE file distributed with this work for
5  * additional information regarding copyright ownership.
6  *
7  * UCAID licenses this file to you under the Apache License,
8  * Version 2.0 (the "License"); you may not use this file except
9  * in compliance with the License. You may obtain a copy of the
10  * License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17  * either express or implied. See the License for the specific
18  * language governing permissions and limitations under the License.
19  */
20
21 /**
22  * @file xmltooling/util/ReplayCache.h
23  * 
24  * Helper class on top of StorageService for detecting message replay.
25  */
26
27 #if !defined(__xmltooling_replay_h__) && !defined(XMLTOOLING_LITE)
28 #define __xmltooling_replay_h__
29
30 #include <xmltooling/base.h>
31 #include <xmltooling/util/StorageService.h>
32
33 namespace xmltooling {
34
35     class XMLTOOL_API StorageService;
36
37     /**
38      * Helper class on top of StorageService for detecting message replay.
39      */
40     class XMLTOOL_API ReplayCache
41     {
42     MAKE_NONCOPYABLE(ReplayCache);
43     public:
44         
45         /**
46          * Creates a replay cache on top of a particular StorageService.
47          *
48          * The lifetime of the StorageService <strong>MUST</strong> be longer than
49          * the lifetime of the ReplayCache.
50          * 
51          * @param storage       pointer to a StorageService, or nullptr to keep cache in memory
52          */
53         ReplayCache(StorageService* storage=nullptr);
54
55         virtual ~ReplayCache();
56         
57         /**
58          * Returns true iff the check value is not found in the cache, and stores it.
59          * 
60          * @param context   a context label to subdivide the cache
61          * @param s         value to check
62          * @param expires   time for disposal of value from cache
63          */
64         virtual bool check(const char* context, const char* s, time_t expires);
65     
66         /**
67          * Returns true iff the check value is not found in the cache, and stores it.
68          * 
69          * @param context   a context label to subdivide the cache
70          * @param s         value to check
71          * @param expires   time for disposal of value from cache
72          */
73         bool check(const char* context, const XMLCh* s, time_t expires);
74         
75     private:
76         bool m_owned;
77         StorageService* m_storage;
78         const StorageService::Capabilities& m_storageCaps;
79     };
80 };
81
82 #endif /* __xmltooling_replay_h__ */