1/*
2Copyright (C) 1999-2007 The Botan Project. All rights reserved.
3
4Redistribution and use in source and binary forms, for any use, with or without
5modification, is permitted provided that the following conditions are met:
6
71. Redistributions of source code must retain the above copyright notice, this
8list of conditions, and the following disclaimer.
9
102. Redistributions in binary form must reproduce the above copyright notice,
11this list of conditions, and the following disclaimer in the documentation
12and/or other materials provided with the distribution.
13
14THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) "AS IS" AND ANY EXPRESS OR IMPLIED
15WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
16MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
17
18IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTOR(S) BE LIABLE FOR ANY DIRECT,
19INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
20BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
22LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
23OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25*/
26// LICENSEHEADER_END
27namespace QCA { // WRAPNS_LINE
28/*************************************************
29 * Library Internal/Global State Header File *
30 * (C) 1999-2007 The Botan Project *
31 *************************************************/
32
33#ifndef BOTAN_LIB_STATE_H__
34#define BOTAN_LIB_STATE_H__
35
36#ifdef BOTAN_TOOLS_ONLY
37} // WRAPNS_LINE
38#include <botan/allocate.h>
39namespace QCA { // WRAPNS_LINE
40#else
41} // WRAPNS_LINE
42#include <botan/base.h>
43namespace QCA { // WRAPNS_LINE
44} // WRAPNS_LINE
45#include <botan/enums.h>
46namespace QCA { // WRAPNS_LINE
47} // WRAPNS_LINE
48#include <botan/ui.h>
49namespace QCA { // WRAPNS_LINE
50#endif
51} // WRAPNS_LINE
52#include <string>
53namespace QCA { // WRAPNS_LINE
54} // WRAPNS_LINE
55#include <vector>
56namespace QCA { // WRAPNS_LINE
57} // WRAPNS_LINE
58#include <map>
59namespace QCA { // WRAPNS_LINE
60
61namespace Botan {
62
63/*************************************************
64 * Global State Container Base *
65 *************************************************/
66class Library_State
67{
68public:
69#ifndef BOTAN_TOOLS_ONLY
70 class Engine_Iterator
71 {
72 public:
73 class Engine *next();
74 Engine_Iterator(const Library_State &l)
75 : lib(l)
76 {
77 n = 0;
78 }
79
80 private:
81 const Library_State &lib;
82 u32bit n;
83 };
84 friend class Engine_Iterator;
85
86 class UI
87 {
88 public:
89 virtual void pulse(Pulse_Type)
90 {
91 }
92 virtual ~UI()
93 {
94 }
95 };
96#endif
97
98 int prealloc_size;
99 Allocator *get_allocator(const std::string & = "") const;
100 void add_allocator(Allocator *);
101#ifdef BOTAN_TOOLS_ONLY
102 void set_default_allocator(const std::string &);
103#else
104 void set_default_allocator(const std::string &) const;
105#endif
106
107#ifndef BOTAN_TOOLS_ONLY
108 bool rng_is_seeded() const
109 {
110 return rng->is_seeded();
111 }
112 void randomize(byte[], u32bit);
113
114 void set_prng(RandomNumberGenerator *);
115 void add_entropy_source(EntropySource *, bool = true);
116 void add_entropy(const byte[], u32bit);
117 void add_entropy(EntropySource &, bool);
118 u32bit seed_prng(bool, u32bit);
119#endif
120
121 void load(class Modules &);
122
123#ifndef BOTAN_TOOLS_ONLY
124 void set_timer(class Timer *);
125 u64bit system_clock() const;
126
127 class Config &config() const;
128
129 void add_engine(class Engine *);
130#endif
131
132 class Mutex *get_mutex() const;
133 class Mutex *get_named_mutex(const std::string &);
134
135#ifndef BOTAN_TOOLS_ONLY
136 void set_x509_state(class X509_GlobalState *);
137 class X509_GlobalState &x509_state();
138
139 void pulse(Pulse_Type) const;
140 void set_ui(UI *);
141
142 void set_transcoder(class Charset_Transcoder *);
143 std::string transcode(const std::string, Character_Set, Character_Set) const;
144#endif
145
146 Library_State(class Mutex_Factory *);
147 ~Library_State();
148
149private:
150 Library_State(const Library_State &)
151 {
152 }
153 Library_State &operator=(const Library_State &)
154 {
155 return (*this);
156 }
157
158#ifndef BOTAN_TOOLS_ONLY
159 class Engine *get_engine_n(u32bit) const;
160#endif
161
162 class Mutex_Factory *mutex_factory;
163#ifndef BOTAN_TOOLS_ONLY
164 class Timer *timer;
165 class Config *config_obj;
166 class X509_GlobalState *x509_state_obj;
167#endif
168
169 std::map<std::string, class Mutex *> locks;
170 std::map<std::string, Allocator *> alloc_factory;
171 mutable Allocator *cached_default_allocator;
172#ifdef BOTAN_TOOLS_ONLY
173 std::string default_allocator_type;
174#endif
175
176#ifndef BOTAN_TOOLS_ONLY
177 UI *ui;
178 class Charset_Transcoder *transcoder;
179 RandomNumberGenerator *rng;
180#endif
181 std::vector<Allocator *> allocators;
182#ifndef BOTAN_TOOLS_ONLY
183 std::vector<EntropySource *> entropy_sources;
184 std::vector<class Engine *> engines;
185#endif
186};
187
188/*************************************************
189 * Global State *
190 *************************************************/
191Library_State &global_state();
192void set_global_state(Library_State *);
193Library_State *swap_global_state(Library_State *);
194
195}
196
197#endif
198} // WRAPNS_LINE
199

source code of qca/src/botantools/botan/botan/libstate.h