Add --nostatslog option
[novacoin-seeder.git] / protocol.h
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2011 The Bitcoin developers
3 // Distributed under the MIT/X11 software license, see the accompanying
4 // file license.txt or http://www.opensource.org/licenses/mit-license.php.
5
6 #ifndef __cplusplus
7 # error This header can only be compiled as C++.
8 #endif
9
10 #ifndef __INCLUDED_PROTOCOL_H__
11 #define __INCLUDED_PROTOCOL_H__
12
13 #include "netbase.h"
14 #include "serialize.h"
15 #include <string>
16 #include "uint256.h"
17
18 extern unsigned short nP2Port;
19
20 extern bool fTestNet;
21 static inline unsigned short GetDefaultPort(const bool testnet = fTestNet)
22 {
23     return testnet ? 17777 : 7777;
24 }
25
26 //
27 // Message header
28 //  (4) message start
29 //  (12) command
30 //  (4) size
31 //  (4) checksum
32
33 extern unsigned char pchMessageStart[4];
34
35 class CMessageHeader
36 {
37     public:
38         CMessageHeader();
39         CMessageHeader(const char* pszCommand, unsigned int nMessageSizeIn);
40
41         std::string GetCommand() const;
42         bool IsValid() const;
43
44         IMPLEMENT_SERIALIZE
45             (
46              READWRITE(FLATDATA(pchMessageStart));
47              READWRITE(FLATDATA(pchCommand));
48              READWRITE(nMessageSize);
49              READWRITE(nChecksum);
50             )
51
52     // TODO: make private (improves encapsulation)
53     public:
54         enum { COMMAND_SIZE=12 };
55         char pchMessageStart[sizeof(::pchMessageStart)];
56         char pchCommand[COMMAND_SIZE];
57         unsigned int nMessageSize;
58         unsigned int nChecksum;
59 };
60
61 enum
62 {
63     NODE_NETWORK = (1 << 0),
64 };
65
66 class CAddress : public CService
67 {
68     public:
69         CAddress();
70         CAddress(CService ipIn, uint64 nServicesIn=NODE_NETWORK);
71
72         void Init();
73
74         IMPLEMENT_SERIALIZE
75             (
76              CAddress* pthis = const_cast<CAddress*>(this);
77              CService* pip = (CService*)pthis;
78              if (fRead)
79                  pthis->Init();
80              if (nType & SER_DISK)
81              READWRITE(nVersion);
82              if ((nType & SER_DISK) || (nVersion >= 31402 && !(nType & SER_GETHASH)))
83              READWRITE(nTime);
84              READWRITE(nServices);
85              READWRITE(*pip);
86             )
87
88         void print() const;
89
90     // TODO: make private (improves encapsulation)
91     public:
92         uint64 nServices;
93
94         // disk and network only
95         unsigned int nTime;
96 };
97
98 class CInv
99 {
100     public:
101         CInv();
102         CInv(int typeIn, const uint256& hashIn);
103         CInv(const std::string& strType, const uint256& hashIn);
104
105         IMPLEMENT_SERIALIZE
106         (
107             READWRITE(type);
108             READWRITE(hash);
109         )
110
111         friend bool operator<(const CInv& a, const CInv& b);
112
113         bool IsKnownType() const;
114         const char* GetCommand() const;
115         std::string ToString() const;
116         void print() const;
117
118     // TODO: make private (improves encapsulation)
119     public:
120         int type;
121         uint256 hash;
122 };
123
124 #endif // __INCLUDED_PROTOCOL_H__