00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _KEYDB_H_
00021 #define _KEYDB_H_
00022
00023 #ifdef BSP_ENABLED
00024
00025 #include <list>
00026 #include <string>
00027 #include <oasys/compat/inttypes.h>
00028 #include <oasys/util/Singleton.h>
00029 #include <oasys/util/StringBuffer.h>
00030
00031 namespace dtn {
00032
00033 class KeyDB : public oasys::Singleton<KeyDB, false> {
00034 public:
00035
00039 class Entry;
00040
00044 KeyDB();
00045
00049 ~KeyDB();
00050
00054 static void init();
00055
00064 static void set_key(Entry& entry);
00065
00072 static const Entry* find_key(const char* host, u_int16_t cs_num);
00073
00077 static void del_key(const char* host, u_int16_t cs_num);
00078
00082 static void flush_keys();
00083
00087 static void dump(oasys::StringBuffer* buf);
00088
00092 static void dump_header(oasys::StringBuffer* buf);
00093
00098 static bool validate_cs_num(u_int16_t cs_num);
00099
00105 static bool validate_key_len(u_int16_t cs_num, size_t* key_len);
00106
00107 private:
00108
00109 typedef std::list<Entry> EntryList;
00110
00111 EntryList keys_;
00112
00113 };
00114
00115 class KeyDB::Entry {
00116
00117 public:
00118
00127 Entry(const char* host, u_int16_t cs_num, const u_char* key,
00128 size_t key_len);
00129
00133 Entry();
00134
00138 Entry(const Entry& other);
00139
00143 ~Entry();
00144
00148 void operator=(const Entry& other);
00149
00154 bool match(const Entry& other) const;
00155
00160 bool match(const char* host, u_int16_t cs_num) const;
00161
00166 bool match_wildcard(const char* host, u_int16_t cs_num) const;
00167
00169 const std::string& host() const { return host_; }
00170 u_int16_t cs_num() const { return cs_num_; }
00171 const u_char* key() const { return key_; }
00172 size_t key_len() const { return key_len_; }
00174
00178 void dump(oasys::StringBuffer* buf) const;
00179
00183 static void dump_header(oasys::StringBuffer* buf);
00184
00185 private:
00186 std::string host_;
00187 u_int16_t cs_num_;
00188 u_char* key_;
00189 size_t key_len_;
00190 };
00191
00192 }
00193
00194 #endif
00195
00196 #endif