Network stack refactor
[novacoin.git] / src / protocol.h
index 53d3eef..67e20d9 100644 (file)
@@ -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;