All pastes #259247 Raw Edit

Anonymous

public text v1 · immutable
#259247 ·published 2006-11-27 07:52 UTC
rendered paste body
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

//-- Prototypes:
void HandleData(char *);
void SendToIRC(char *, ...);
int StrPos(char *, char);
void SubStr(char *, int, int, char *);

//-- Globals:
SOCKET theSocket;

int main(void)
{
	WSADATA wsaData;
	SOCKADDR_IN serverInfo;
	LPHOSTENT hostEntry;
	unsigned short iPort;
	char * strServer;
	char strSRBuffer[3072];

	strServer = "irc.freenode.net";
	iPort = 6667;

     	WSAStartup(MAKEWORD(2, 2), &wsaData);
   
	theSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
                      
	if(theSocket == INVALID_SOCKET)
	{
      	WSACleanup();
		return 1;
	}
   
	hostEntry = gethostbyname(strServer);   
	serverInfo.sin_family = AF_INET;
	serverInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);
	serverInfo.sin_port = htons(iPort);

	printf("%d -> main() -> Connecting...\n", time(0));                  
	if(connect(theSocket, (LPSOCKADDR)&serverInfo, sizeof(struct sockaddr)) == SOCKET_ERROR)
	{
		WSACleanup();
		return 1;
	}
	printf("%d -> main() -> Connected...\n", time(0));     

	printf("Connected to server %s:%d\n", strServer, iPort);
	//SendToIRC("USER SBot767 codedemons.net codedemons.net :NoName");
	//SendToIRC("NICK SBot767 codedemons.net");

	int bytesRecv = 0;
	while(bytesRecv != SOCKET_ERROR) 
	{
		memset(strSRBuffer, 0, sizeof(strSRBuffer));
		bytesRecv = recv(theSocket, strSRBuffer, sizeof(strSRBuffer), 0);
		HandleData(strSRBuffer);
	}
      
	closesocket(theSocket);
	WSACleanup();

	return 0;
}

void HandleData(char * strBuffer)
{
	char strCommand[16];
	char strParameters[2555];
	char strSource[255];

	memset(strCommand, 0, sizeof(strCommand));
	memset(strParameters, 0, sizeof(strParameters));

	int iPos = StrPos(strBuffer, ' ');
	SubStr(strBuffer, iPos, strlen(strBuffer)-2, strParameters);	// strip newlines from the end of the parameters
	SubStr(strBuffer, 0, iPos-1, strCommand);

	printf("%d -> HandleData() -> strBuffer = %s\n", time(0), strBuffer);
//	printf("%d -> HandleData() -> strCommand = %s\n", time(0), strCommand);
//	printf("%d -> HandleData() -> strParameters = %s\n", time(0), strParameters);

	if(strcmp(strCommand, "PING") == 0)
	{
		SubStr(strParameters, 1, strlen(strParameters), strSource);
		SendToIRC("PONG %s", strSource);
	}

	return;
}

void SendToIRC(char * strMessage, ...)
{
	char strSendBuffer[3072];
	memset(strSendBuffer, 0, sizeof(strSendBuffer));

	va_list va;
	va_start(va, strMessage);
	vsprintf(strSendBuffer, strMessage, va);
	va_end(va);

	strcat(strSendBuffer, "\r\n");

	printf("%d -> SendToIRC() -> strSendBuffer = %s\n", time(0), strSendBuffer);


	send(theSocket, strSendBuffer, strlen(strSendBuffer), 0);
	return;
}

int StrPos(char * strString, char cChr)
{
	char * pch;
	pch = strchr(strString, ' ');

	if(pch == NULL)
		return -1;

	return (pch-strString+1);
}

void SubStr(char * strString, int iPos, int iLength, char * strReturn)
{
	memset(strReturn, 0, strlen(strReturn));

	if(iPos == -1)
		return;

	strncpy(strReturn, strString+(iPos), iLength - iPos);
	strcat(strReturn, "\0");
	return;
}

============================
OUTPUT
============================
1164616905 -> main() -> Connecting...
1164616905 -> main() -> Connected...
Connected to server irc.freenode.net:6667
1164616905 -> HandleData() -> strBuffer = NOTICE AUTH :*** Looking up your hostn
ame...

1164616906 -> HandleData() -> strBuffer = NOTICE AUTH :*** Checking ident

1164616908 -> HandleData() -> strBuffer = NOTICE AUTH :*** Couldn't look up your
 hostname

1164616936 -> HandleData() -> strBuffer = NOTICE AUTH :*** No identd (auth) resp
onse

1164616937 -> HandleData() -> strBuffer = PING :orwell.freenode.net
ERROR :Closing Link: 127.0.0.1 (Connection Timed Out)

1164616937 -> SendToIRC() -> strSendBuffer = PONG orwell.freenode.net
ERROR :Closing Link: 127.0.0.1 (Connection Timed Out)Ç´&#8597;

*** Process returned 128 ***
Press any key to continue...