X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=blobdiff_plain;f=src%2Firc.cpp;h=a29874ebfbdafd3111b3bc407013f75986ee322f;hp=4a87fb7303ee45bf082e65b51d03bced4bc3fad2;hb=1c1980bccd1bcccdb03c69ebbe03ad51e08f343a;hpb=21c897e170c14da4754fb699d701b9980f092959 diff --git a/src/irc.cpp b/src/irc.cpp index 4a87fb7..a29874e 100644 --- a/src/irc.cpp +++ b/src/irc.cpp @@ -4,12 +4,10 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "irc.h" -#include "net.h" -#include "strlcpy.h" #include "base58.h" +#include "net.h" using namespace std; -using namespace boost; int nGotIRCAddresses = 0; @@ -22,7 +20,7 @@ void ThreadIRCSeed2(void* parg); struct ircaddr { struct in_addr ip; - short port; + unsigned short port; }; #pragma pack(pop) @@ -77,7 +75,7 @@ static bool Send(SOCKET hSocket, const char* pszSend) bool RecvLineIRC(SOCKET hSocket, string& strLine) { - while (true) + for ( ; ; ) { bool fRet = RecvLine(hSocket, strLine); if (fRet) @@ -100,7 +98,7 @@ bool RecvLineIRC(SOCKET hSocket, string& strLine) int RecvUntil(SOCKET hSocket, const char* psz1, const char* psz2=NULL, const char* psz3=NULL, const char* psz4=NULL) { - while (true) + for ( ; ; ) { string strLine; strLine.reserve(10000); @@ -135,7 +133,7 @@ bool Wait(int nSeconds) bool RecvCodeLine(SOCKET hSocket, const char* psz1, string& strRet) { strRet.clear(); - while (true) + for ( ; ; ) { string strLine; if (!RecvLineIRC(hSocket, strLine)) @@ -189,7 +187,9 @@ bool GetIPFromIRC(SOCKET hSocket, string strMyName, CNetAddr& ipRet) void ThreadIRCSeed(void* parg) { // Make this thread recognisable as the IRC seeding thread - RenameThread("bitcoin-ircseed"); + RenameThread("novacoin-ircseed"); + + printf("ThreadIRCSeed started\n"); try { @@ -217,16 +217,18 @@ void ThreadIRCSeed2(void* parg) if (!GetBoolArg("-irc", true)) return; - printf("ThreadIRCSeed started\n"); + printf("ThreadIRCSeed trying to connect...\n"); + int nErrorWait = 10; int nRetryWait = 10; int nNameRetry = 0; while (!fShutdown) { - CService addrConnect("92.243.23.21", 6667); // irc.lfnet.org + const uint16_t nIrcPort = 6667; + CService addrConnect("92.243.23.21", nIrcPort); // irc.lfnet.org - CService addrIRC("irc.lfnet.org", 6667, true); + CService addrIRC("irc.lfnet.org", nIrcPort, true); if (addrIRC.IsValid()) addrConnect = addrIRC; @@ -243,8 +245,7 @@ void ThreadIRCSeed2(void* parg) if (!RecvUntil(hSocket, "Found your hostname", "using your IP address instead", "Couldn't look up your hostname", "ignoring hostname")) { - closesocket(hSocket); - hSocket = INVALID_SOCKET; + CloseSocket(hSocket); nErrorWait = nErrorWait * 11 / 10; if (Wait(nErrorWait += 60)) continue; @@ -259,8 +260,8 @@ void ThreadIRCSeed2(void* parg) // or if it keeps failing because the nick is already in use. if (!fNoListen && GetLocal(addrLocal, &addrIPv4) && nNameRetry<3) strMyName = EncodeAddress(GetLocalAddress(&addrConnect)); - if (strMyName == "") - strMyName = strprintf("x%"PRI64u"", GetRand(1000000000)); + if (strMyName.empty()) + strMyName = strprintf("x%" PRIu64 "", GetRand(1000000000)); Send(hSocket, strprintf("NICK %s\r", strMyName.c_str()).c_str()); Send(hSocket, strprintf("USER %s 8 * : %s\r", strMyName.c_str(), strMyName.c_str()).c_str()); @@ -268,8 +269,7 @@ void ThreadIRCSeed2(void* parg) int nRet = RecvUntil(hSocket, " 004 ", " 433 "); if (nRet != 1) { - closesocket(hSocket); - hSocket = INVALID_SOCKET; + CloseSocket(hSocket); if (nRet == 2) { printf("IRC name already in use\n"); @@ -314,7 +314,7 @@ void ThreadIRCSeed2(void* parg) Send(hSocket, strprintf("WHO #novacoin%02d\r", channel_number).c_str()); } - int64 nStart = GetTime(); + int64_t nStart = GetTime(); string strLine; strLine.reserve(10000); while (!fShutdown && RecvLineIRC(hSocket, strLine)) @@ -327,30 +327,27 @@ void ThreadIRCSeed2(void* parg) if (vWords.size() < 2) continue; - char pszName[10000]; - pszName[0] = '\0'; + std::string strName; if (vWords[1] == "352" && vWords.size() >= 8) { // index 7 is limited to 16 characters // could get full length name at index 10, but would be different from join messages - strlcpy(pszName, vWords[7].c_str(), sizeof(pszName)); + strName = vWords[7]; printf("IRC got who\n"); } if (vWords[1] == "JOIN" && vWords[0].size() > 1) { // :username!username@50000007.F000000B.90000002.IP JOIN :#channelname - strlcpy(pszName, vWords[0].c_str() + 1, sizeof(pszName)); - if (strchr(pszName, '!')) - *strchr(pszName, '!') = '\0'; + strName = vWords[0].substr(1, vWords[0].find('!', 1) - 1); printf("IRC got join\n"); } - if (pszName[0] == 'u') + if (strName.compare(0,1, "u") == 0) { CAddress addr; - if (DecodeAddress(pszName, addr)) + if (DecodeAddress(strName, addr)) { addr.nTime = GetAdjustedTime(); if (addrman.Add(addr, addrConnect, 51 * 60)) @@ -363,8 +360,7 @@ void ThreadIRCSeed2(void* parg) } } } - closesocket(hSocket); - hSocket = INVALID_SOCKET; + CloseSocket(hSocket); if (GetTime() - nStart > 20 * 60) {