aboutsummaryrefslogtreecommitdiff
path: root/src/irc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/irc.cpp')
-rw-r--r--src/irc.cpp25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/irc.cpp b/src/irc.cpp
index 6991e6ee7e..e8471a6630 100644
--- a/src/irc.cpp
+++ b/src/irc.cpp
@@ -5,9 +5,10 @@
#include "irc.h"
#include "net.h"
-#include "strlcpy.h"
#include "base58.h"
+#include <boost/algorithm/string/predicate.hpp> // for startswith() and endswith()
+
using namespace std;
using namespace boost;
@@ -188,11 +189,11 @@ bool GetIPFromIRC(SOCKET hSocket, string strMyName, CNetAddr& ipRet)
void ThreadIRCSeed(void* parg)
{
- IMPLEMENT_RANDOMIZE_STACK(ThreadIRCSeed(parg));
-
// Make this thread recognisable as the IRC seeding thread
RenameThread("bitcoin-ircseed");
+ printf("ThreadIRCSeed started\n");
+
try
{
ThreadIRCSeed2(parg);
@@ -219,7 +220,8 @@ void ThreadIRCSeed2(void* parg)
if (!GetBoolArg("-irc", false))
return;
- printf("ThreadIRCSeed started\n");
+ printf("ThreadIRCSeed trying to connect...\n");
+
int nErrorWait = 10;
int nRetryWait = 10;
int nNameRetry = 0;
@@ -262,7 +264,7 @@ void ThreadIRCSeed2(void* parg)
if (!fNoListen && GetLocal(addrLocal, &addrIPv4) && nNameRetry<3)
strMyName = EncodeAddress(GetLocalAddress(&addrConnect));
if (strMyName == "")
- strMyName = strprintf("x%u", GetRand(1000000000));
+ strMyName = strprintf("x%"PRI64u"", 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());
@@ -326,30 +328,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].c_str();
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 (boost::algorithm::starts_with(strName, "u"))
{
CAddress addr;
- if (DecodeAddress(pszName, addr))
+ if (DecodeAddress(strName, addr))
{
addr.nTime = GetAdjustedTime();
if (addrman.Add(addr, addrConnect, 51 * 60))