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