X-Git-Url: http://git.pk910.de/?p=TransparentIRC.git;a=blobdiff_plain;f=src%2FUserClient.c;fp=src%2FUserClient.c;h=fccf56b1b563bff933b8ecc875a254df53302096;hp=c0d3af58daa4cf33e4cfaaebd0a8aee2325ce635;hb=1f2baa2e7b90ea83c5a0c93598e22e5063fc6d95;hpb=0e2ac9360b71a7d054d7e945be575c0d21fa880c diff --git a/src/UserClient.c b/src/UserClient.c index c0d3af5..fccf56b 100644 --- a/src/UserClient.c +++ b/src/UserClient.c @@ -14,8 +14,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "UserClient.c" +#include "UserClient.h" #include "IOHandler.h" +#include "ServerSocket.h" static void userclient_callback(struct IOEvent *event); @@ -30,14 +31,16 @@ void userclient_accepted(struct ServerSocket *server, int sockfd) { iohandler_update(iofd); client = malloc(sizeof(*client)); client->iofd = iofd; + iofd->data = client; client->server = server; server->clientcount++; //add UserClient to the list - sock->prev = NULL; - sock->next = serversockets; - serversockets->prev = sock; - serversockets = sock; + client->prev = NULL; + client->next = userclients; + if(userclients) + userclients->prev = client; + userclients = client; //let's say hello to the client iohandler_printf(iofd, "NOTICE AUTH :*** TransparentIRC " TRANSIRC_VERSION " (use /quote transirc for more information)"); @@ -58,6 +61,7 @@ void userclient_close(struct UserClient *client) { void userclient_close_server(struct ServerSocket *server, int keep_clients) { struct UserClient *client, *next_client; for(client = userclients; client; client = next_client) { + next_client = client->next; if(client->server == server) { if(keep_clients) client->server = NULL; @@ -67,14 +71,20 @@ void userclient_close_server(struct ServerSocket *server, int keep_clients) { } } +static void userclient_recv(struct UserClient *client, char *line) { + iohandler_printf(client->iofd, "reply: %s", line); +} + static void userclient_callback(struct IOEvent *event) { + struct UserClient *client = event->iofd->data; switch(event->type) { case IOEVENT_RECV: - char *line = event->data.recv_str; - iohandler_printf(event->iofd, "reply: %s", line); + userclient_recv(client, event->data.recv_str); break; case IOEVENT_CLOSED: - userclient_close(event->iofd); + userclient_close(client); + break; + default: break; } }