#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define NB_MAX 10 #define ___NICK "ddero" #define _EOF "\r\n" typedef struct { char *host; int port; } t_servinfo; char * format_send(char *msg) { char *tosend; /*unsigned int i; */ tosend = malloc((strlen(msg) + 2) * sizeof(char)); if (tosend == NULL) { fprintf(stderr, "Memory fault\n"); exit(-2); } strcpy(tosend, msg); strcat(tosend, _EOF); /* for (i = 0 ; i < strlen(msg) + 2 ; i++) { fprintf (stderr, "[%d] %X %c\n", i, tosend[i], tosend[i]); } */ return (tosend); } unsigned short sendmsg_len(char *msg) { return (strlen(msg) + 2); } void sendtoserv(int fd, char *msg) { printf("send: %s\n", msg); if ((send(fd, format_send(msg), sendmsg_len(msg), 0)) == -1) { perror("send"); exit(-3); } } /*char* dir_from_path (char* path) { char* dir; unsigned int i; for ( i = strlen (path) -1 ; i != 0 ; i-- ) { if ( path[i] == '/') break; } dir = strndup (path, i); dir [i] = '\0'; printf ("dir: %s\n", dir); return (dir); }*/ void loadconfig(t_servinfo * s_info) { if (ecore_config_init("ebic") != ECORE_CONFIG_ERR_SUCC) { printf("Cannot init Ecore_Config"); exit(-1); } ecore_config_string_default("/config/server/host", "beber.melee"); ecore_config_int_default("/config/server/port", 6667); ecore_config_load(); s_info->host = ecore_config_string_get("/config/server/host"); s_info->port = ecore_config_int_get("/config/server/port"); ecore_config_shutdown(); ecore_config_save(); printf("sinfo->host : %s\n", s_info->host); printf("sinfo->port : %d\n", s_info->port); } int get_max(int *tab) { int i, max; max = -1; for (i = 0; tab[i]; i++) { if (tab[i] > max) max = tab[i]; } return (max); } int main(int argc, char **argv) { int sock; struct sockaddr_in dest_host; struct hostent *hostent; struct timeval wait_time; int count; int std; char buff[NB_MAX]; char *tmp; int r_sel; fd_set fds_r; fd_set fds_w; int i = 0; t_servinfo serveur; loadconfig(&serveur); if (argc < 3) { fprintf(stderr, "Loading from conf ...\n"); } else { printf("connecting to %s:%s\n", argv[1], argv[2]); } /* serveur.host = argv[1]; serveur.port = atoi (argv[2]); */ printf("host: %s\n", serveur.host); printf("port: %d\n", serveur.port); printf("gethostbyname (%s)\n", serveur.host); if ((hostent = gethostbyname(serveur.host)) == NULL) { fprintf(stderr, "%s could not be found\n", serveur.host); exit(-1); } memset(&dest_host, 0, sizeof(struct sockaddr_in)); dest_host.sin_family = AF_INET; dest_host.sin_addr.s_addr = ((struct in_addr *)hostent->h_addr)->s_addr; dest_host.sin_port = htons((short)serveur.port); printf("socket\n"); if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(-1); } printf("connect\n"); if ((connect(sock, (struct sockaddr *)&dest_host, sizeof(dest_host))) == -1) { perror("connect"); exit(-1); } std = open("/dev/input", O_RDONLY); perror("open"); printf("%d\n", std); FD_ZERO(&fds_r); FD_ZERO(&fds_w); FD_SET(std, &fds_r); FD_SET(sock, &fds_r); FD_SET(std, &fds_w); FD_SET(sock, &fds_w); // wait_time.tv_sec = 1000000 / 1000000;*/ /* Nb sec */ // wait_time.tv_usec = 1000000 % 1000000; /* Nb µsec */ do { memset(buff, 0, NB_MAX - 1); r_sel = select(FD_SETSIZE, &fds_r, &fds_w, NULL, 0); if (FD_ISSET(std, &fds_r)) printf("fds_r: clavier\n"); if (FD_ISSET(sock, &fds_r)) printf("fds_r: reseau\n"); if (FD_ISSET(std, &fds_w)) printf("fds_w: clavier\n"); if (FD_ISSET(sock, &fds_w)) printf("fds_w: reseau\n"); count = recv(sock, buff, NB_MAX - 1, 0); printf("%d: %s", i, buff); if (i == 1) sendtoserv(sock, "NICK " ___NICK); if (i == 2) sendtoserv(sock, "USER beber beber guybrush.melee :Ronnie Reagan"); if (i == 3) sendtoserv(sock, "OPER beber beber"); if (i == 3) sendtoserv(sock, "JOIN #opers"); if (i > 45) { tmp = malloc(sizeof(char) * (strlen(buff) + strlen("PRIVMSG #opers :"))); sprintf(tmp, "%s %s", "PRIVMSG #opers :", buff); sendtoserv(sock, tmp); free(tmp); } //sleep (1); i++; } while (count != 0); close(sock); return (0); }