+ if(!stricmplen(line, "TRANSIRC ", 9)) {
+ /*
+ char *argv[MAXNUMPARAMS];
+ int argc = parse_line(line, argv, 1);
+ */
+
+ } else if(!(client->flags & USERCLIENT_LOGGED_IN)) {
+ struct UserLogin *login = client->user;
+ char *argv[MAXNUMPARAMS];
+ int argc = parse_line(line, argv, 1);
+ if(argc < 3) return;
+ if(!stricmp(argv[1], "PASS")) {
+ char *delimiter = strchr(argv[2], ':');
+ if(login->password)
+ free(login->password);
+ if(delimiter) {
+ *delimiter = '\0';
+ delimiter++;
+ if(login->username)
+ free(login->username);
+ login->username = strdup(argv[2]);
+ login->password = strdup(delimiter);
+ } else
+ login->password = strdup(argv[2]);
+ } else if(!stricmp(argv[1], "USER") && argc >= 6) {
+ if(!login->username)
+ login->username = strdup(argv[2]);
+ login->realname = strdup(argv[5]);
+ } else if(!stricmp(argv[1], "NICK")) {
+ if(login->nick)
+ free(login->nick);
+ login->nick = strdup(argv[2]);
+ if(!login->password) {
+ iohandler_printf(client->iofd, "NOTICE AUTH :*** [TransparentIRC] You need to send your LOC data. Try /quote PASS <username>:<password>");
+ }
+ }
+ if(login->username && login->password && login->nick && login->realname && !(client->flags & USERCLIENT_LOGIN_PROCESSING)) {
+ //try to login
+ iohandler_printf(client->iofd, "NOTICE AUTH :*** [TransparentIRC] Checking login...");
+ usersession_login(login);
+ }
+ } else {
+ struct UserSession *session = client->user;
+ if(!stricmplen(line, "QUIT", 4))
+ return;
+
+ if(session->irc)
+ ircclient_send(session->irc, line);
+ }
+}
+
+void userclient_login_failed(struct UserLogin *login, char *reason) {
+ iohandler_printf(login->client->iofd, "NOTICE AUTH :*** [TransparentIRC] Login rejected");
+ userclient_close(login->client);
+}
+
+void userclient_login_successful(struct UserLogin *login, struct UserSession *session, int recover) {
+ struct UserClient *client = login->client;
+ iohandler_printf(client->iofd, "NOTICE AUTH :*** [TransparentIRC] Login accepted.");
+ if(login->username)
+ free(login->username);
+ if(login->password)
+ free(login->password);
+ if(login->nick)
+ free(login->nick);
+ free(login);
+ client->user = session;
+ client->flags |= USERCLIENT_LOGGED_IN;
+ if(recover) {
+ iohandler_printf(client->iofd, "NOTICE AUTH :*** [TransparentIRC] Recovering previous link (Nick: %s).", session->nick);
+ ircclient_recover_session(session);
+ }