aboutsummaryrefslogtreecommitdiff
path: root/src/irc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/irc.cpp')
-rw-r--r--src/irc.cpp93
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++;
}