#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> void error_handling( char *message ); void response( char *recv ); void pong ( char *ping ); #define MAX 8192 int sockfd; int main( int argc, char *argv[] ) { const char address[64] = "irc.hanirc.org"; char nickname[64] = "Luna_bot"; char channel[64] = "#프겔"; int port = 6664; struct sockaddr_in sock; struct hostent *host_st; char rcv_data[MAX] = {0x00, }; char send[1024] = {0x00, }; char *ping; host_st = gethostbyname( address ); if( host_st == NULL) { error_handling( "gethostbyname() error" ); } sockfd = socket( AF_INET, SOCK_STREAM, 0 ); if( sockfd == -1 ) { error_handling( "socket() error" ); } memset( &sock, 0x0, sizeof(sock) ); sock.sin_family = AF_INET; sock.sin_port = htons( port ); sock.sin_addr = *((struct in_addr*)host_st->h_addr); if( connect( sockfd, (struct sockaddr *)&sock, sizeof(sock) ) == -1 ) { error_handling( "connect() error" ); } strncpy( send, "NICK Luna_bot \n", sizeof(send) - 1 ); printf( "Request : %s", send); write( sockfd, send, strlen(send) ); memset( send, 0x0, sizeof(send) ); strncpy( send, "USER iam5duck \"naver.com\" \"irc.hanric.org\" : Luna\n", sizeof(send) -1 ); printf( "Request : %s\n", send); write( sockfd, send, strlen(send) ); memset( send, 0x0, sizeof(send) ); read( sockfd, rcv_data, sizeof(rcv_data) ); response( rcv_data ); memset( rcv_data, 0x0, sizeof( rcv_data ) ); read( sockfd, rcv_data, sizeof(rcv_data) ); response( rcv_data ); memset( rcv_data, 0x0, sizeof( rcv_data ) ); strncpy( send, "NICK Luna_bot \n", sizeof(send) - 1 ); printf( "Request : %s", send); write( sockfd, send, strlen(send) ); memset( send, 0x0, sizeof(send) ); /* read( sockfd, rcv_data, sizeof(rcv_data) ); response( rcv_data ); memset( rcv_data, 0x0, sizeof( rcv_data ) ); */ read( sockfd, rcv_data, sizeof(rcv_data) ); response( rcv_data ); memset( rcv_data, 0x0, sizeof( rcv_data ) ); strncpy( send, "USERHOST LaLuna\n", sizeof(send) - 1 ); printf( "Request : %s", send); write( sockfd, send, strlen(send) ); memset( send, 0x0, sizeof(send) ); read( sockfd, rcv_data, sizeof(rcv_data) ); response( rcv_data ); memset( rcv_data, 0x0, sizeof( rcv_data ) ); read( sockfd, rcv_data, sizeof(rcv_data) ); response( rcv_data ); memset( rcv_data, 0x0, sizeof( rcv_data ) ); strncpy( send, "JOIN #프갤\n", sizeof(send) - 1 ); printf( "Request : %s", send ); write( sockfd, send, strlen(send) ); read( sockfd, rcv_data, sizeof(rcv_data) ); response( rcv_data ); memset( rcv_data, 0x0, sizeof( rcv_data ) ); read( sockfd, rcv_data, sizeof(rcv_data) ); response( rcv_data ); memset( rcv_data, 0x0, sizeof( rcv_data ) ); strncpy( send, "PRIVMSG #프갤 :HI I'am LaLuna Bot\n", sizeof(send) - 1 ); printf( "Request : %s", send ); write( sockfd, send, strlen(send) ); memset( send, 0x0, sizeof( send ) ); while( 1 ) { read( sockfd, rcv_data, sizeof(rcv_data) ); response( rcv_data ); if( strstr( rcv_data, "!out" ) ) { memset(send, 0x0, sizeof(send) ); strncpy( send, "PRIVMSG #프갤 :Luna_bot 갑니다 ㅂ2ㅂ2\n", sizeof(send) - 1 ); break; } if( strstr( rcv_data, "Luna_bot" ) ) { strncpy( send, "PRIVMSG #프갤 :I am so hot, 난 너무 예뻐요\n ", sizeof(send) -1 ); write( sockfd, send, strlen( send ) ); memset( send, 0x0, sizeof( send ) ); } memset( rcv_data, 0x0, sizeof( rcv_data ) ); } close( sockfd ); return 0; } void error_handling( char *message ) { fputs( message, stderr ); fputc( '\n', stderr ); exit( 1 ); } void response( char *recv ) { char temp[MAX]; char *parsing; char *ping; printf( "-----------------------------------------------\n"); strncpy( temp, recv, sizeof(temp) - 1); parsing = strtok( temp, "\n"); while( parsing != NULL ) { if( parsing ) printf( "Response : %s\n", parsing ); if( (strstr( parsing, "PING " )) != NULL ) { pong( parsing ); } parsing = strtok( NULL, "\n" ); } printf( "-----------------------------------------------\n"); } void pong( char *ping ) { char temp[MAX] = {0x00, }; char *parsing; strncpy( temp, ping, strlen( ping ) + 1 ); parsing = strtok( temp, "\n" ); memcpy( parsing, "PONG", 4 ); printf( "PINGPONG : %s\n", parsing ); write( sockfd, parsing, strlen( parsing ) + 1 ); }