diff --git a/src/server.c b/src/server.c index 11a0cac..18f5138 100644 --- a/src/server.c +++ b/src/server.c @@ -13,21 +13,18 @@ struct _patty_ax25_server { patty_list *ifaces; - patty_dict *clients, - *client_requests; - patty_dict *socks_by_fd, *socks_pending_accept, *socks_pending_connect, *socks_established; + patty_dict *clients_by_sock; + int fd_max; - fd_set fds_watch, - fds_r, - fds_w; - - patty_list *responses_by_client; + fd_set fds_watch, /* fds to monitor with select() */ + fds_socks, /* fds belonging to socks */ + fds_clients; /* fds belonging to clients */ }; int patty_ax25_server_init(patty_ax25_server *server) { @@ -37,14 +34,6 @@ int patty_ax25_server_init(patty_ax25_server *server) { goto error_list_new_ifaces; } - if ((server->clients = patty_dict_new()) == NULL) { - goto error_dict_new_clients; - } - - if ((server->client_requests = patty_dict_new()) == NULL) { - goto error_dict_new_client_requests; - } - if ((server->socks_by_fd = patty_dict_new()) == NULL) { goto error_dict_new_socks_by_fd; } @@ -61,8 +50,15 @@ int patty_ax25_server_init(patty_ax25_server *server) { goto error_dict_new_socks_established; } + if ((server->clients_by_sock = patty_dict_new()) == NULL) { + goto error_dict_new_clients_by_sock; + } + return 0; +error_dict_new_clients_by_sock: + patty_dict_destroy(server->socks_established); + error_dict_new_socks_established: patty_dict_destroy(server->socks_pending_connect); @@ -73,12 +69,6 @@ error_dict_new_socks_pending_accept: patty_dict_destroy(server->socks_by_fd); error_dict_new_socks_by_fd: - patty_dict_destroy(server->client_requests); - -error_dict_new_client_requests: - patty_dict_destroy(server->clients); - -error_dict_new_clients: patty_list_destroy(server->ifaces); error_list_new_ifaces: @@ -92,12 +82,11 @@ static int destroy_if(patty_ax25_if *iface, void *ctx) { } void patty_ax25_server_stop(patty_ax25_server *server) { + patty_dict_destroy(server->clients_by_sock); patty_dict_destroy(server->socks_established); patty_dict_destroy(server->socks_pending_connect); patty_dict_destroy(server->socks_pending_accept); patty_dict_destroy(server->socks_by_fd); - patty_dict_destroy(server->client_requests); - patty_dict_destroy(server->clients); patty_ax25_server_each_if(server, destroy_if, NULL); patty_list_destroy(server->ifaces); @@ -729,8 +718,14 @@ static int server_connect(patty_ax25_server *server, goto error_sock_save_by_addrpair; } - response.ret = 0; - response.eno = 0; + /* + * TODO: Send SABM(E) frame; set timer, and await response from peer. + * We will need to know what client to send a response to when either the + * timeout has been exceeded or the peer has sent a UA frame to + * acknowledge and establish the connection. + */ + + return 0; error_invalid_status: error_sock_by_fd: