All pastes #258352 Raw Edit

Unnamed

public text v1 · immutable
#258352 ·published 2006-11-26 13:00 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 *, ...);

//-- 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(1, 1), &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 nobody localhost localhost :I'm nobody nick nobody");

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

	return 0;
}

void HandleData(char * strBuffer)
{
	char strParameters[3072];
	strncpy(strBuffer, strBuffer, strlen(strBuffer)-3);
	strcat(strBuffer, "\0");

	//-- find the space
	char * pch;
	pch = strchr(strBuffer, ' ');

	if(pch == NULL)
		return;

	strncpy(strParameters, strBuffer+(pch-strBuffer+1), strlen(strBuffer) - (pch-strBuffer+1));
	strcat(strParameters, "\0");

	printf(strBuffer);

	if(strncmp(strBuffer, "PING", 4) == 0)
	{
		SendToIRC("PONG %s", strParameters);
	}
	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\0");

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

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