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;
}