aboutsummaryrefslogtreecommitdiff
path: root/src/protocol.h
diff options
context:
space:
mode:
authorGiel van Schijndel <me@mortis.eu>2011-08-11 18:40:12 +0200
committerGiel van Schijndel <me@mortis.eu>2011-08-19 07:24:38 +0200
commit33e28c9948336784324cf5c7248ce608b93dbfde (patch)
tree180fc08aaa1594097d835c7874f478a1d6c4e02d /src/protocol.h
parent507fd9d15baac950df494742d67bcbafdaa4752c (diff)
downloadbitcoin-33e28c9948336784324cf5c7248ce608b93dbfde.tar.xz
Move CAddress to protocol.[ch]pp
This commit does *not* and should not modify *any* code, it only moves it from net.h and splits it across protocol.cpp and protocol.hpp. Signed-off-by: Giel van Schijndel <me@mortis.eu>
Diffstat (limited to 'src/protocol.h')
-rw-r--r--src/protocol.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/protocol.h b/src/protocol.h
index b5baeb2a68..009f67dfa1 100644
--- a/src/protocol.h
+++ b/src/protocol.h
@@ -13,6 +13,12 @@
#include "serialize.h"
#include <string>
+extern bool fTestNet;
+static inline unsigned short GetDefaultPort(const bool testnet = fTestNet)
+{
+ return testnet ? 18333 : 8333;
+}
+
//
// Message header
// (4) message start
@@ -49,4 +55,69 @@ class CMessageHeader
unsigned int nChecksum;
};
+enum
+{
+ NODE_NETWORK = (1 << 0),
+};
+
+class CAddress
+{
+ public:
+ CAddress();
+ CAddress(unsigned int ipIn, unsigned short portIn=0, uint64 nServicesIn=NODE_NETWORK);
+ explicit CAddress(const struct sockaddr_in& sockaddr, uint64 nServicesIn=NODE_NETWORK);
+ explicit CAddress(const char* pszIn, int portIn, bool fNameLookup = false, uint64 nServicesIn=NODE_NETWORK);
+ explicit CAddress(const char* pszIn, bool fNameLookup = false, uint64 nServicesIn=NODE_NETWORK);
+ explicit CAddress(std::string strIn, int portIn, bool fNameLookup = false, uint64 nServicesIn=NODE_NETWORK);
+ explicit CAddress(std::string strIn, bool fNameLookup = false, uint64 nServicesIn=NODE_NETWORK);
+
+ void Init();
+
+ IMPLEMENT_SERIALIZE
+ (
+ if (fRead)
+ const_cast<CAddress*>(this)->Init();
+ if (nType & SER_DISK)
+ READWRITE(nVersion);
+ if ((nType & SER_DISK) || (nVersion >= 31402 && !(nType & SER_GETHASH)))
+ READWRITE(nTime);
+ READWRITE(nServices);
+ READWRITE(FLATDATA(pchReserved)); // for IPv6
+ READWRITE(ip);
+ READWRITE(port);
+ )
+
+ friend bool operator==(const CAddress& a, const CAddress& b);
+ friend bool operator!=(const CAddress& a, const CAddress& b);
+ friend bool operator<(const CAddress& a, const CAddress& b);
+
+ std::vector<unsigned char> GetKey() const;
+ struct sockaddr_in GetSockAddr() const;
+ bool IsIPv4() const;
+ bool IsRFC1918() const;
+ bool IsRFC3927() const;
+ bool IsLocal() const;
+ bool IsRoutable() const;
+ bool IsValid() const;
+ unsigned char GetByte(int n) const;
+ std::string ToStringIPPort() const;
+ std::string ToStringIP() const;
+ std::string ToStringPort() const;
+ std::string ToString() const;
+ void print() const;
+
+ // TODO: make private (improves encapsulation)
+ public:
+ uint64 nServices;
+ unsigned char pchReserved[12];
+ unsigned int ip;
+ unsigned short port;
+
+ // disk and network only
+ unsigned int nTime;
+
+ // memory only
+ unsigned int nLastTry;
+};
+
#endif // __INCLUDED_PROTOCOL_H__