X-Git-Url: http://git.pk910.de/?p=TransparentIRC.git;a=blobdiff_plain;f=src%2FUserSession.c;fp=src%2FUserSession.c;h=8b90299df4dcf40fac073954edff9fd9db1240e9;hp=136b7674b2d3d0be9ad8c9eea7d890c40c07920d;hb=8889b0aee1dc430e735e2a0df462fd0aeee63847;hpb=4fdc419424dd18df5807ed4218a84fa38e1dd6f6 diff --git a/src/UserSession.c b/src/UserSession.c index 136b767..8b90299 100644 --- a/src/UserSession.c +++ b/src/UserSession.c @@ -19,6 +19,7 @@ #include "UserClient.h" #include "ConfigParser.h" #include "tools.h" +#include "IRCClient.h" static struct UserSession *usersessions = NULL; @@ -39,10 +40,11 @@ static struct UserSession *usersession_add(char *username, char *password, char return session; } -/* static void usersession_close(struct UserSession *session) { if(session->client) userclient_close(session->client); + if(session->irc) + ircclient_close(session->irc); if(session->prev) session->prev->next = session->next; @@ -53,24 +55,32 @@ static void usersession_close(struct UserSession *session) { free(session->username); free(session->password); free(session->nick); + if(session->realname) + free(session->realname); free(session); } -*/ -/* ****************** SESSION FUNCTIONS ****************** */ +/* ****************** EXTERNAL EVENTS ****************** */ -static void usersession_initialize_session(struct UserSession *session) { - +void usersession_error(struct UserSession *session, char *error) { + if(session->client) { + iohandler_printf(session->client->iofd, ":*TransparentIRC!TransIRC@TransparentIRC.system.notification NOTICE %s :[TransparentIRC] ERROR: %s", session->nick, error); + } + usersession_close(session); } -/* ****************** EXTERNAL EVENTS ****************** */ - void usersession_client_close(struct UserSession *session) { session->client = NULL; session->idle_since = time(0); } +void usersession_client_raw(struct UserSession *session, char *raw) { + if(session->client) { + iohandler_printf(session->client->iofd, "%s", raw); + } +} + void usersession_client_notification(struct UserSession *session, char *notification) { if(session->client) { iohandler_printf(session->client->iofd, ":*TransparentIRC!TransIRC@TransparentIRC.system.notification NOTICE %s :[TransparentIRC] %s", session->nick, notification); @@ -152,8 +162,10 @@ static void usersession_login_accept(struct UserLogin *login) { userclient_login_failed(login, "Could not create Session."); return; } + active_session->client = login->client; + active_session->realname = strdup(login->realname); + ircclient_initialize(active_session, login); userclient_login_successful(login, active_session, 0); - usersession_initialize_session(active_session); } } @@ -196,6 +208,18 @@ static void usersession_login_callback(struct IOEvent *event) { if(argc < 2) return; if(!stricmp(argv[0], "CLASS")) { login->session_class = strdup(argv[1]); + } else if(!stricmp(argv[0], "SERVER")) { + login->server_address = strdup(argv[1]); + if(argc > 2) { + login->server_override_port = 1; + if(argv[2][0] == '+') { + argv[2]++; + login->server_ssl = 1; + } + login->server_port = atoi(argv[2]); + } + } else if(!stricmp(argv[0], "BIND")) { + login->bind_address = strdup(argv[1]); } }