- updated r_saved_messages.cc comment to match header
[barry.git] / src / r_message.h
blob77076f280cc1b85d85deeedf21987282c845aea0
1 ///
2 /// \file r_message.h
3 /// Blackberry database record parser class for email records.
4 ///
6 /*
7 Copyright (C) 2005-2007, Net Direct Inc. (http://www.netdirect.ca/)
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU General Public License in the COPYING file at the
19 root directory of this project for more details.
22 #ifndef __BARRY_RECORD_MESSAGE_H__
23 #define __BARRY_RECORD_MESSAGE_H__
25 #include "record.h"
26 #include <iosfwd>
27 #include <string>
28 #include <vector>
29 #include <map>
30 #include <stdint.h>
32 namespace Barry {
35 // NOTE: All classes here must be container-safe! Perhaps add sorting
36 // operators in the future.
39 /// \addtogroup RecordParserClasses
40 /// @{
42 class Message
44 public:
45 Address From;
46 Address To;
47 Address Cc;
48 Address Bcc;
49 Address Sender;
50 Address ReplyTo;
51 std::string Subject;
52 std::string Body;
53 std::string Attachment;
54 std::vector<UnknownField> Unknowns;
56 public:
57 const unsigned char* ParseField(const unsigned char *begin,
58 const unsigned char *end);
60 public:
61 Message();
62 ~Message();
64 // Parser / Builder API (see parser.h / builder.h)
65 uint8_t GetRecType() const;
66 uint32_t GetUniqueId() const; // empty API, not required by protocol
67 void SetIds(uint8_t Type, uint32_t Id); // empty API, not required by protocol
68 void ParseHeader(const Data &data, size_t &offset);
69 void ParseFields(const Data &data, size_t &offset);
70 void BuildHeader(Data &data, size_t &offset) const;
71 void BuildFields(Data &data, size_t &offset) const;
73 void Clear();
75 void Dump(std::ostream &os) const;
77 // sorting
78 bool operator<(const Message &other) const { return Subject < other.Subject; }
80 // database name
81 static const char * GetDBName() { return "Messages"; }
82 static uint8_t GetDefaultRecType() { return 0; }
85 inline std::ostream& operator<<(std::ostream &os, const Message &msg) {
86 msg.Dump(os);
87 return os;
90 /// @}
92 } // namespace Barry
94 #endif