3 /// Blackberry database record classes. Help translate data
4 /// from data packets to useful structurs, and back.
8 Copyright (C) 2005, 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_H__
24 #define __BARRY_RECORD_H__
31 // forward declarations
37 // NOTE: All classes here must be container-safe! Perhaps add sorting
38 // operators in the future.
52 typedef std::vector
<Command
> CommandArrayType
;
54 CommandArrayType Commands
;
57 const unsigned char* ParseField(const unsigned char *begin
,
58 const unsigned char *end
);
63 void Parse(const Data
&data
, int offset
);
66 // returns 0 if unable to find command name, which is safe, since
67 // 0 is a special command that shouldn't be in the table anyway
68 unsigned int GetCommand(const std::string
&name
) const;
70 void Dump(std::ostream
&os
) const;
73 inline std::ostream
& operator<< (std::ostream
&os
, const CommandTable
&command
) {
80 class DatabaseDatabase
86 unsigned int RecordCount
;
90 typedef std::vector
<Database
> DatabaseArrayType
;
92 DatabaseArrayType Databases
;
95 template <class RecordType
, class FieldType
>
96 void ParseRec(const RecordType
&rec
, const unsigned char *end
);
98 template <class FieldType
>
99 const unsigned char* ParseField(const unsigned char *begin
,
100 const unsigned char *end
);
106 void Parse(const Data
&data
);
109 // FIXME - returns 0 on error here, but that's a valid DBNumber
110 unsigned int GetDBNumber(const std::string
&name
) const;
112 void Dump(std::ostream
&os
) const;
115 inline std::ostream
& operator<<(std::ostream
&os
, const DatabaseDatabase
&dbdb
) {
127 std::ostream
& operator<< (std::ostream
&os
, const std::vector
<UnknownField
> &unknowns
);
130 /// \addtogroup RecordParserClasses
131 /// Parser and data storage classes. These classes take a
132 /// Database Database record and convert them into C++ objects.
133 /// Each of these classes are safe to be used in standard
134 /// containers, and are meant to be used in conjunction with the
135 /// RecordParser<> template when calling Controller::LoadDatabase().
141 // private contact management data
145 // contact specific data
158 DefaultCommunicationsMethod
,
170 std::vector
<uint64_t> GroupLinks
;
171 std::vector
<UnknownField
> Unknowns
;
176 const unsigned char* ParseField(const unsigned char *begin
,
177 const unsigned char *end
);
183 uint64_t GetID() const { return m_recordId
; }
184 std::string
GetPostalAddress() const;
186 void Parse(const Data
&data
, unsigned int operation
);
187 void Clear(); // erase everything
189 void Dump(std::ostream
&os
) const;
190 void DumpLdif(std::ostream
&os
, const std::string
&baseDN
) const;
192 // protocol record sizes
193 static size_t GetOldProtocolRecordSize();
194 static size_t GetProtocolRecordSize();
197 inline std::ostream
& operator<< (std::ostream
&os
, const Contact
&contact
) {
217 std::vector
<UnknownField
> Unknowns
;
223 const unsigned char* ParseField(const unsigned char *begin
,
224 const unsigned char *end
);
225 void Parse(const Data
&data
, unsigned int operation
);
228 void Dump(std::ostream
&os
) const;
230 // protocol record sizes
231 static size_t GetOldProtocolRecordSize();
232 static size_t GetProtocolRecordSize();
235 inline std::ostream
& operator<<(std::ostream
&os
, const Message
&msg
) {
240 std::ostream
& operator<<(std::ostream
&os
, const Message::Address
&msga
);
251 std::string Location
;
252 time_t NotificationTime
;
255 std::vector
<UnknownField
> Unknowns
;
261 const unsigned char* ParseField(const unsigned char *begin
,
262 const unsigned char *end
);
263 void Parse(const Data
&data
, unsigned int operation
);
266 void Dump(std::ostream
&os
) const;
268 // protocol record sizes
269 static size_t GetOldProtocolRecordSize();
270 static size_t GetProtocolRecordSize();
273 inline std::ostream
& operator<<(std::ostream
&os
, const Calendar
&msg
) {