Move CAddress to protocol.[ch]pp
[novacoin.git] / src / protocol.h
index b5baeb2..009f67d 100644 (file)
 #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__