diff options
Diffstat (limited to 'src/irc.cpp')
-rw-r--r-- | src/irc.cpp | 93 |
1 files changed, 23 insertions, 70 deletions
diff --git a/src/irc.cpp b/src/irc.cpp index cb9c0b7ab8..c1308e51b4 100644 --- a/src/irc.cpp +++ b/src/irc.cpp @@ -22,22 +22,25 @@ void ThreadIRCSeed2(void* parg); #pragma pack(push, 1) struct ircaddr { - int ip; + struct in_addr ip; short port; }; #pragma pack(pop) -string EncodeAddress(const CAddress& addr) +string EncodeAddress(const CService& addr) { struct ircaddr tmp; - tmp.ip = addr.ip; - tmp.port = addr.port; + if (addr.GetInAddr(&tmp.ip)) + { + tmp.port = htons(addr.GetPort()); - vector<unsigned char> vch(UBEGIN(tmp), UEND(tmp)); - return string("u") + EncodeBase58Check(vch); + vector<unsigned char> vch(UBEGIN(tmp), UEND(tmp)); + return string("u") + EncodeBase58Check(vch); + } + return ""; } -bool DecodeAddress(string str, CAddress& addr) +bool DecodeAddress(string str, CService& addr) { vector<unsigned char> vch; if (!DecodeBase58Check(str.substr(1), vch)) @@ -48,7 +51,7 @@ bool DecodeAddress(string str, CAddress& addr) return false; memcpy(&tmp, &vch[0], sizeof(tmp)); - addr = CAddress(tmp.ip, ntohs(tmp.port), NODE_NETWORK); + addr = CService(tmp.ip, ntohs(tmp.port)); return true; } @@ -73,57 +76,6 @@ static bool Send(SOCKET hSocket, const char* pszSend) return true; } -bool RecvLine(SOCKET hSocket, string& strLine) -{ - strLine = ""; - loop - { - char c; - int nBytes = recv(hSocket, &c, 1, 0); - if (nBytes > 0) - { - if (c == '\n') - continue; - if (c == '\r') - return true; - strLine += c; - if (strLine.size() >= 9000) - return true; - } - else if (nBytes <= 0) - { - if (fShutdown) - return false; - if (nBytes < 0) - { - int nErr = WSAGetLastError(); - if (nErr == WSAEMSGSIZE) - continue; - if (nErr == WSAEWOULDBLOCK || nErr == WSAEINTR || nErr == WSAEINPROGRESS) - { - Sleep(10); - continue; - } - } - if (!strLine.empty()) - return true; - if (nBytes == 0) - { - // socket closed - printf("socket closed\n"); - return false; - } - else - { - // socket error - int nErr = WSAGetLastError(); - printf("recv failed: %d\n", nErr); - return false; - } - } - } -} - bool RecvLineIRC(SOCKET hSocket, string& strLine) { loop @@ -204,7 +156,7 @@ bool RecvCodeLine(SOCKET hSocket, const char* psz1, string& strRet) } } -bool GetIPFromIRC(SOCKET hSocket, string strMyName, unsigned int& ipRet) +bool GetIPFromIRC(SOCKET hSocket, string strMyName, CNetAddr& ipRet) { Send(hSocket, strprintf("USERHOST %s\r", strMyName.c_str()).c_str()); @@ -227,10 +179,10 @@ bool GetIPFromIRC(SOCKET hSocket, string strMyName, unsigned int& ipRet) printf("GetIPFromIRC() got userhost %s\n", strHost.c_str()); if (fUseProxy) return false; - CAddress addr(strHost, 0, true); + CNetAddr addr(strHost, true); if (!addr.IsValid()) return false; - ipRet = addr.ip; + ipRet = addr; return true; } @@ -258,8 +210,9 @@ void ThreadIRCSeed2(void* parg) if (mapArgs.count("-connect") || fNoListen) return; - if (GetBoolArg("-noirc")) + if (!GetBoolArg("-irc", false)) return; + printf("ThreadIRCSeed started\n"); int nErrorWait = 10; int nRetryWait = 10; @@ -267,9 +220,9 @@ void ThreadIRCSeed2(void* parg) while (!fShutdown) { - CAddress addrConnect("92.243.23.21", 6667); // irc.lfnet.org + CService addrConnect("92.243.23.21", 6667); // irc.lfnet.org - CAddress addrIRC("irc.lfnet.org", 6667, true); + CService addrIRC("irc.lfnet.org", 6667, true); if (addrIRC.IsValid()) addrConnect = addrIRC; @@ -325,15 +278,15 @@ void ThreadIRCSeed2(void* parg) Sleep(500); // Get our external IP from the IRC server and re-nick before joining the channel - CAddress addrFromIRC; - if (GetIPFromIRC(hSocket, strMyName, addrFromIRC.ip)) + CNetAddr addrFromIRC; + if (GetIPFromIRC(hSocket, strMyName, addrFromIRC)) { - printf("GetIPFromIRC() returned %s\n", addrFromIRC.ToStringIP().c_str()); + printf("GetIPFromIRC() returned %s\n", addrFromIRC.ToString().c_str()); if (!fUseProxy && addrFromIRC.IsRoutable()) { // IRC lets you to re-nick fGotExternalIP = true; - addrLocalHost.ip = addrFromIRC.ip; + addrLocalHost.SetIP(addrFromIRC); strMyName = EncodeAddress(addrLocalHost); Send(hSocket, strprintf("NICK %s\r", strMyName.c_str()).c_str()); } @@ -388,7 +341,7 @@ void ThreadIRCSeed2(void* parg) if (DecodeAddress(pszName, addr)) { addr.nTime = GetAdjustedTime(); - if (AddAddress(addr, 51 * 60)) + if (addrman.Add(addr, addrConnect, 51 * 60)) printf("IRC got new address: %s\n", addr.ToString().c_str()); nGotIRCAddresses++; } |