122 lines
3.0 KiB
C
122 lines
3.0 KiB
C
#include "macros.h"
|
|
#include "net.h"
|
|
#include "users.h"
|
|
#include "common.h"
|
|
#include "con/console.h"
|
|
#include "ui_common.h"
|
|
|
|
#include <string.h>
|
|
|
|
#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);
|
|
|
|
addCommand(WHO_COMMAND, showUsers);
|
|
addHelp(WHO_COMMAND, WHO_HELP);
|
|
addSyntax(WHO_COMMAND, WHO_SYNTAX);
|
|
|
|
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 (recvfrom(listen_socket, data_buffer, DATAGRAM_SIZE, 0, (struct sockaddr *) &from_address, &from_address_length) < 0) {
|
|
perror("couldn't recvfrom() listen_socket");
|
|
} else {
|
|
handleNetInput(data_buffer);
|
|
messageOpen(current_message);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
closeInterface();
|
|
stopSockets(NULL);
|
|
freeMessage(¤t_message);
|
|
freeInterfaces();
|
|
freeUserList(&user_list);
|
|
freeHelp();
|
|
freeSyntax();
|
|
freeConfig();
|
|
setAttribute(GREEN);
|
|
printf("%s\n", QUIT_MESSAGE);
|
|
clearAttributes();
|
|
return 0;
|
|
}
|