aboutsummaryrefslogtreecommitdiff
path: root/src/protocol.h
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2012-01-03 23:33:31 +0100
committerPieter Wuille <pieter.wuille@gmail.com>2012-01-06 18:55:37 +0100
commit67a42f929b1434f647c63922fd02dc2b93b28060 (patch)
tree9c4313e815bd77e817f2dc5b796347d343458d0e /src/protocol.h
parent7486c64dd8436febbe59e82dbb875e83ad6b5194 (diff)
downloadbitcoin-67a42f929b1434f647c63922fd02dc2b93b28060.tar.xz
Network stack refactor
This introduces CNetAddr and CService, respectively wrapping an (IPv6) IP address and an IP+port combination. This functionality used to be part of CAddress, which also contains network flags and connection attempt information. These extra fields are however not always necessary. These classes, along with logic for creating connections and doing name lookups, are moved to netbase.{h,cpp}, which does not depend on headers.h. Furthermore, CNetAddr is mostly IPv6-ready, though IPv6 functionality is not yet enabled for the application itself.
Diffstat (limited to 'src/protocol.h')
-rw-r--r--src/protocol.h39
1 files changed, 8 insertions, 31 deletions
diff --git a/src/protocol.h b/src/protocol.h
index 53d3eef4d5..67e20d94e1 100644
--- a/src/protocol.h
+++ b/src/protocol.h
@@ -11,6 +11,8 @@
#define __INCLUDED_PROTOCOL_H__
#include "serialize.h"
+#include "netbase.h"
+#include "util.h"
#include <string>
#include "uint256.h"
@@ -61,58 +63,33 @@ enum
NODE_NETWORK = (1 << 0),
};
-class CAddress
+class CAddress : public CService
{
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);
+ CAddress(CService ipIn, uint64 nServicesIn=NODE_NETWORK);
void Init();
IMPLEMENT_SERIALIZE
(
+ CAddress* pthis = const_cast<CAddress*>(this);
+ CService* pip = (CService*)pthis;
if (fRead)
- const_cast<CAddress*>(this)->Init();
+ pthis->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);
+ READWRITE(*pip);
)
- 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;