#include "macros.h" #include "net.h" #include "common.h" #include "con/console.h" #include "ui_common.h" #include #define STDIN 0 #define DATAGRAM_SIZE 512 #define QUIT_STRING "quit" #define QUIT_MESSAGE "さよなら!" #define NICK_STRING "nick" #define NICK_MESSAGE "nick set to" #define NICK_SYNTAX "/nick new_nickname" #define SET_STRING "set" #define SET_IP_STRING "ip" #define SET_IP_MESSAGE "(re)start send/listen sockets to use new IP" #define SET_PORT_STRING "port" #define START_STRING "start" #define START_SYNTAX "/start listen|send" #define START_LISTEN "listen" #define START_LISTEN_MESSAGE "--starting listen--" #define START_SEND "send" #define START_SEND_MESSAGE "--starting send--" #define STOP_STRING "stop" #define STOP_LISTEN "listen" #define STOP_LISTEN_MESSAGE "--stopping listen--" #define STOP_SEND "send" #define STOP_SEND_MESSAGE "--stopping send--" #define RESTART_STRING "restart" #define RESTART_MESSAGE "--restarting sockets--" #define HELP_STRING "help" #define UNKNOWN_CMD_MESSAGE "unknown command" int main() { char data_buffer[2047]; FD_ZERO(&master_fds); FD_ZERO(&read_fds); getInterfaces(); initNetwork(); addCommand(QUIT_COMMAND, quitProgram); addCommand(HELP_COMMAND, showHelp); addCommand(SET_COMMAND, setConfig); addCommand(LIST_COMMAND, showVariables); addCommand(RESTART_COMMAND, restartSockets); addCommand(START_COMMAND, startSockets); addCommand(STOP_COMMAND, stopSockets); addCommand("open", sendOpen); addHelp(SET_COMMAND, SET_HELP); addSyntax(SET_COMMAND, SET_SYNTAX); addHelp(LIST_COMMAND, LIST_HELP); addHelp(START_COMMAND, START_HELP); addSyntax(START_COMMAND, START_SYNTAX); addHelp(STOP_COMMAND, STOP_HELP); addSyntax(STOP_COMMAND, STOP_SYNTAX); addHelp(RESTART_COMMAND, RESTART_HELP); addSyntax(RESTART_COMMAND, RESTART_SYNTAX); addHelp(QUIT_COMMAND, QUIT_HELP); addHelp(HELP_COMMAND, HELP_HELP); addSyntax(HELP_COMMAND, HELP_SYNTAX); if (initInterface() == 0) { is_running = 1; } else { printf("error, couldn't start interface...\n"); } while(is_running) { read_fds = master_fds; if (select(max_fd+1, &read_fds, NULL, NULL, NULL) == -1) { perror("select"); return -1; } for (i = 0; i <= max_fd; i++) { if (FD_ISSET(i, &read_fds)) { if (i == interface_fd) { handleInterface(); } else if (i == listen_socket) { if (recv(listen_socket, data_buffer, DATAGRAM_SIZE, 0) < 0) { perror("couldn't read() listen_socket"); } else { handleInput(data_buffer); } } } } } closeInterface(); stopSockets(NULL); freeInterfaces(); freeHelp(); freeSyntax(); freeConfig(); setAttribute(GREEN); printf("%s\n", QUIT_MESSAGE); clearAttributes(); return 0; }