- large update to the doc/www web pages, moving some of the
[barry.git] / src / r_servicebook.h
blob251d256da4753279620c228dfaf49bd86725da53
1 ///
2 /// \file r_servicebook.h
3 /// Blackberry database record parser class for the
4 /// Service Book record.
5 ///
7 /*
8 Copyright (C) 2005-2007, Net Direct Inc. (http://www.netdirect.ca/)
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19 See the GNU General Public License in the COPYING file at the
20 root directory of this project for more details.
23 #ifndef __BARRY_RECORD_SERVICEBOOK_H__
24 #define __BARRY_RECORD_SERVICEBOOK_H__
26 #include "record.h"
27 #include <iosfwd>
28 #include <string>
29 #include <vector>
30 #include <map>
31 #include <stdint.h>
33 namespace Barry {
36 // NOTE: All classes here must be container-safe! Perhaps add sorting
37 // operators in the future.
41 /// \addtogroup RecordParserClasses
42 /// @{
44 // This is a packed field, which is a group of fields packed in
45 // variable length records inside one larger field of a normal record.
46 class ServiceBookConfig
48 public:
49 typedef std::vector<UnknownField> UnknownsType;
51 uint8_t Format;
53 UnknownsType Unknowns;
55 public:
56 const unsigned char* ParseField(const unsigned char *begin,
57 const unsigned char *end);
59 public:
60 ServiceBookConfig();
61 ~ServiceBookConfig();
63 // Parser / Builder API (see parser.h / builder.h)
64 void ParseHeader(const Data &data, size_t &offset);
65 void ParseFields(const Data &data, size_t &offset);
66 void BuildHeader(Data &data, size_t &offset) const;
67 void BuildFields(Data &data, size_t &offset) const;
69 void Clear();
71 void Dump(std::ostream &os) const;
74 inline std::ostream& operator<<(std::ostream &os, const ServiceBookConfig &msg) {
75 msg.Dump(os);
76 return os;
80 class ServiceBook
82 int NameType, DescType, UniqueIdType;
84 public:
85 typedef std::vector<UnknownField> UnknownsType;
87 uint8_t RecType;
88 uint32_t RecordId;
89 std::string Name;
90 std::string HiddenName;
91 std::string Description;
92 std::string DSID;
93 std::string BesDomain;
94 std::string UniqueId;
95 std::string ContentId;
96 ServiceBookConfig Config;
98 UnknownsType Unknowns;
100 public:
101 const unsigned char* ParseField(const unsigned char *begin,
102 const unsigned char *end);
104 public:
105 ServiceBook();
106 ~ServiceBook();
108 // Parser / Builder API (see parser.h / builder.h)
109 uint8_t GetRecType() const { return RecType; }
110 uint32_t GetUniqueId() const { return RecordId; }
111 void SetIds(uint8_t Type, uint32_t Id) { RecType = Type; RecordId = Id; }
112 void ParseHeader(const Data &data, size_t &offset);
113 void ParseFields(const Data &data, size_t &offset);
114 void BuildHeader(Data &data, size_t &offset) const;
115 void BuildFields(Data &data, size_t &offset) const;
117 void Clear();
119 void Dump(std::ostream &os) const;
121 // sorting
122 bool operator<(const ServiceBook &other) const { return RecordId < RecordId; }
124 // database name
125 static const char * GetDBName() { return "Service Book"; }
126 static uint8_t GetDefaultRecType() { return 0; }
129 inline std::ostream& operator<<(std::ostream &os, const ServiceBook &msg) {
130 msg.Dump(os);
131 return os;
134 /// @}
136 } // namespace Barry
138 #endif