All pastes #259066 Raw Edit

Someone

public text v1 · immutable
#259066 ·published 2006-11-27 02:09 UTC
rendered paste body
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#include <stdlib.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);
                  
	if(connect(theSocket, (LPSOCKADDR)&serverInfo, sizeof(struct sockaddr)) == SOCKET_ERROR)
	{
		WSACleanup();
		return 1;
	}

	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, 3072, 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("strCommand -> !%s!\n", strCommand);
	printf("strParameters -> !%s!\n", strParameters);

//	printf("CMD -> %s\n", strCommand);
	if(strcmp(strCommand, "PING") == 0)
	{
		SubStr(strParameters, 1, strlen(strParameters), strSource);
		SendToIRC("PONG %s", strSource);
	}

	return;
}

void SendToIRC(char * strMessage, ...)
{
	char strBuffer[3072];
	va_list va;
	va_start(va, strMessage);
	vsprintf(strBuffer, strMessage, va);
	va_end(va);

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

	printf("t-> %s", strBuffer);

	send(theSocket, strBuffer, strlen(strBuffer), 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;
}