X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=blobdiff_plain;f=src%2Fprotocol.h;h=fcc8c9e06f650a97c6305e2d06597e401aafddbf;hp=009f67dfa148ca912234fbfc7c9752201be1b113;hb=27ce22da0815f4c1fa0e949cc4740e3f4dd1ea9c;hpb=33e28c9948336784324cf5c7248ce608b93dbfde diff --git a/src/protocol.h b/src/protocol.h index 009f67d..fcc8c9e 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -1,7 +1,7 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef __cplusplus # error This header can only be compiled as C++. @@ -11,23 +11,26 @@ #define __INCLUDED_PROTOCOL_H__ #include "serialize.h" +#include "netbase.h" #include +#include +#include "uint256.h" extern bool fTestNet; -static inline unsigned short GetDefaultPort(const bool testnet = fTestNet) +inline unsigned short GetDefaultPort() { - return testnet ? 18333 : 8333; + return static_cast(fTestNet ? 17777 : 7777); } -// -// Message header -// (4) message start -// (12) command -// (4) size -// (4) checksum extern unsigned char pchMessageStart[4]; +/** Message header. + * (4) message start. + * (12) command. + * (4) size. + * (4) checksum. + */ class CMessageHeader { public: @@ -42,82 +45,89 @@ class CMessageHeader READWRITE(FLATDATA(pchMessageStart)); READWRITE(FLATDATA(pchCommand)); READWRITE(nMessageSize); - if (nVersion >= 209) READWRITE(nChecksum); ) // TODO: make private (improves encapsulation) public: - enum { COMMAND_SIZE=12 }; - char pchMessageStart[sizeof(::pchMessageStart)]; + enum { + MESSAGE_START_SIZE=sizeof(::pchMessageStart), + COMMAND_SIZE=12, + MESSAGE_SIZE_SIZE=sizeof(int), + CHECKSUM_SIZE=sizeof(int), + + MESSAGE_SIZE_OFFSET=MESSAGE_START_SIZE+COMMAND_SIZE, + CHECKSUM_OFFSET=MESSAGE_SIZE_OFFSET+MESSAGE_SIZE_SIZE + }; + char pchMessageStart[MESSAGE_START_SIZE]; char pchCommand[COMMAND_SIZE]; unsigned int nMessageSize; unsigned int nChecksum; }; +/** nServices flags */ enum { - NODE_NETWORK = (1 << 0), + NODE_NETWORK = (1 << 0) }; -class CAddress +/** A CService with information about it as peer */ +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); - - void Init(); + explicit CAddress(CService ipIn, uint64_t nServicesIn=NODE_NETWORK); IMPLEMENT_SERIALIZE ( + CAddress* pthis = const_cast(this); + CService* pip = (CService*)pthis; if (fRead) - const_cast(this)->Init(); + pthis->Init(); if (nType & SER_DISK) - READWRITE(nVersion); - if ((nType & SER_DISK) || (nVersion >= 31402 && !(nType & SER_GETHASH))) - READWRITE(nTime); + READWRITE(nVersion); + if ((nType & SER_DISK) || + (nVersion >= CADDR_TIME_VERSION && !(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 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; + uint64_t nServices; // disk and network only unsigned int nTime; // memory only - unsigned int nLastTry; + int64_t nLastTry; +}; + +/** inv message data */ +class CInv +{ + public: + CInv(); + CInv(int typeIn, const uint256& hashIn); + CInv(const std::string& strType, const uint256& hashIn); + + IMPLEMENT_SERIALIZE + ( + READWRITE(type); + READWRITE(hash); + ) + + friend bool operator<(const CInv& a, const CInv& b); + + bool IsKnownType() const; + const char* GetCommand() const; + std::string ToString() const; + + // TODO: make private (improves encapsulation) + public: + int type; + uint256 hash; }; #endif // __INCLUDED_PROTOCOL_H__