#define WIN32_LEAN_AND_MEAN #include #include #include #include #include //-- 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; }