// 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;
struct ircaddr
{
struct in_addr ip;
- short port;
+ unsigned short port;
};
#pragma pack(pop)
bool RecvLineIRC(SOCKET hSocket, string& strLine)
{
- while (true)
+ for ( ; ; )
{
bool fRet = RecvLine(hSocket, strLine);
if (fRet)
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);
bool RecvCodeLine(SOCKET hSocket, const char* psz1, string& strRet)
{
strRet.clear();
- while (true)
+ for ( ; ; )
{
string strLine;
if (!RecvLineIRC(hSocket, strLine))
// Make this thread recognisable as the IRC seeding thread
RenameThread("novacoin-ircseed");
+ printf("ThreadIRCSeed started\n");
+
try
{
ThreadIRCSeed2(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;
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;
// 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());
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");
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))
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))
}
}
}
- closesocket(hSocket);
- hSocket = INVALID_SOCKET;
+ CloseSocket(hSocket);
if (GetTime() - nStart > 20 * 60)
{