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