Lines Matching refs:irc

48 static void irc_buddy_status(char *name, struct irc_buddy *ib, struct irc_conn *irc);
49 static void irc_connected(struct irc_conn *irc, const char *nick);
51 static void irc_msg_handle_privmsg(struct irc_conn *irc, const char *name,
56 static void irc_sasl_finish(struct irc_conn *irc);
91 static void irc_connected(struct irc_conn *irc, const char *nick) in irc_connected() argument
98 if ((gc = purple_account_get_connection(irc->account)) == NULL in irc_connected()
107 status = purple_account_get_active_status(irc->account); in irc_connected()
110 prpl_info->set_status(irc->account, status); in irc_connected()
121 g_hash_table_replace(irc->buddies, ib->name, ib); in irc_connected()
124 irc_blist_timeout(irc); in irc_connected()
125 if (!irc->timer) in irc_connected()
126 irc->timer = purple_timeout_add_seconds(45, (GSourceFunc)irc_blist_timeout, (gpointer)irc); in irc_connected()
130 void irc_msg_default(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_default() argument
172 irc->account); in irc_msg_default()
207 void irc_msg_features(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_features() argument
217 irc->mode_chars = g_strdup(val + 1); in irc_msg_features()
224 void irc_msg_luser(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_luser() argument
229 irc_connected(irc, args[0]); in irc_msg_luser()
236 void irc_msg_away(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_away() argument
241 if (irc->whois.nick && !purple_utf8_strcasecmp(irc->whois.nick, args[1])) { in irc_msg_away()
243 irc_msg_whois(irc, name, from, args); in irc_msg_away()
247 gc = purple_account_get_connection(irc->account); in irc_msg_away()
255 void irc_msg_badmode(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_badmode() argument
257 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_badmode()
264 void irc_msg_ban(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_ban() argument
269 args[1], irc->account); in irc_msg_ban()
304 void irc_msg_banned(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_banned() argument
306 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_banned()
316 void irc_msg_banfull(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_banfull() argument
321 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account); in irc_msg_banfull()
334 void irc_msg_chanmode(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_chanmode() argument
339 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account); in irc_msg_chanmode()
352 void irc_msg_whois(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_whois() argument
354 if (!irc->whois.nick) { in irc_msg_whois()
360 if (purple_utf8_strcasecmp(irc->whois.nick, args[1])) { in irc_msg_whois()
362 , args[1], irc->whois.nick); in irc_msg_whois()
367 irc->whois.away = g_strdup(args[2]); in irc_msg_whois()
369 irc->whois.ident = g_strdup(args[2]); in irc_msg_whois()
370 irc->whois.host = g_strdup(args[3]); in irc_msg_whois()
371 irc->whois.real = g_strdup(args[5]); in irc_msg_whois()
373 irc->whois.server = g_strdup(args[2]); in irc_msg_whois()
374 irc->whois.serverinfo = g_strdup(args[3]); in irc_msg_whois()
376 irc->whois.ircop = 1; in irc_msg_whois()
378 irc->whois.idle = atoi(args[2]); in irc_msg_whois()
380 irc->whois.signon = (time_t)atoi(args[3]); in irc_msg_whois()
382 if (irc->whois.channels == NULL) { in irc_msg_whois()
383 irc->whois.channels = g_string_new(args[2]); in irc_msg_whois()
385 irc->whois.channels = g_string_append(irc->whois.channels, args[2]); in irc_msg_whois()
388 irc->whois.identified = 1; in irc_msg_whois()
393 irc->whois.login = g_strdup(args[2]); in irc_msg_whois()
397 void irc_msg_endwhois(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_endwhois() argument
403 if (!irc->whois.nick) { in irc_msg_endwhois()
408 if (purple_utf8_strcasecmp(irc->whois.nick, args[1])) { in irc_msg_endwhois()
410 , args[1], irc->whois.nick); in irc_msg_endwhois()
418 (irc->whois.ircop ? _(" <i>(ircop)</i>") : ""), in irc_msg_endwhois()
419 (irc->whois.identified ? _(" <i>(identified)</i>") : "")); in irc_msg_endwhois()
424 if (irc->whois.away) { in irc_msg_endwhois()
425 tmp = g_markup_escape_text(irc->whois.away, strlen(irc->whois.away)); in irc_msg_endwhois()
426 g_free(irc->whois.away); in irc_msg_endwhois()
430 if (irc->whois.real) { in irc_msg_endwhois()
431 purple_notify_user_info_add_pair_plaintext(user_info, _("Real name"), irc->whois.real); in irc_msg_endwhois()
432 g_free(irc->whois.real); in irc_msg_endwhois()
434 if (irc->whois.login) { in irc_msg_endwhois()
435 purple_notify_user_info_add_pair_plaintext(user_info, _("Login name"), irc->whois.login); in irc_msg_endwhois()
436 g_free(irc->whois.login); in irc_msg_endwhois()
438 if (irc->whois.ident) { in irc_msg_endwhois()
439 purple_notify_user_info_add_pair_plaintext(user_info, _("Ident name"), irc->whois.ident); in irc_msg_endwhois()
440 g_free(irc->whois.ident); in irc_msg_endwhois()
442 if (irc->whois.host) { in irc_msg_endwhois()
443 purple_notify_user_info_add_pair_plaintext(user_info, _("Host name"), irc->whois.host); in irc_msg_endwhois()
444 g_free(irc->whois.host); in irc_msg_endwhois()
446 if (irc->whois.server) { in irc_msg_endwhois()
447 tmp = g_strdup_printf("%s (%s)", irc->whois.server, irc->whois.serverinfo); in irc_msg_endwhois()
450 g_free(irc->whois.server); in irc_msg_endwhois()
451 g_free(irc->whois.serverinfo); in irc_msg_endwhois()
453 if (irc->whois.channels) { in irc_msg_endwhois()
454 purple_notify_user_info_add_pair(user_info, _("Currently on"), irc->whois.channels->str); in irc_msg_endwhois()
455 g_string_free(irc->whois.channels, TRUE); in irc_msg_endwhois()
457 if (irc->whois.idle) { in irc_msg_endwhois()
458 gchar *timex = purple_str_seconds_to_string(irc->whois.idle); in irc_msg_endwhois()
462 _("Online since"), purple_date_format_full(localtime(&irc->whois.signon))); in irc_msg_endwhois()
464 if (purple_strequal(irc->whois.nick, "Paco-Paco")) { in irc_msg_endwhois()
469 gc = purple_account_get_connection(irc->account); in irc_msg_endwhois()
471 purple_notify_userinfo(gc, irc->whois.nick, user_info, NULL, NULL); in irc_msg_endwhois()
474 g_free(irc->whois.nick); in irc_msg_endwhois()
475 memset(&irc->whois, 0, sizeof(irc->whois)); in irc_msg_endwhois()
478 void irc_msg_who(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_who() argument
490 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account); in irc_msg_who()
544 void irc_msg_list(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_list() argument
546 if (!irc->roomlist) in irc_msg_list()
550 purple_roomlist_set_in_progress(irc->roomlist, TRUE); in irc_msg_list()
555 purple_roomlist_set_in_progress(irc->roomlist, FALSE); in irc_msg_list()
556 purple_roomlist_unref(irc->roomlist); in irc_msg_list()
557 irc->roomlist = NULL; in irc_msg_list()
565 if (!purple_roomlist_get_in_progress(irc->roomlist)) { in irc_msg_list()
567 purple_roomlist_set_in_progress(irc->roomlist, TRUE); in irc_msg_list()
571 purple_roomlist_room_add_field(irc->roomlist, room, args[1]); in irc_msg_list()
572 purple_roomlist_room_add_field(irc->roomlist, room, GINT_TO_POINTER(strtol(args[2], NULL, 10))); in irc_msg_list()
574 purple_roomlist_room_add_field(irc->roomlist, room, topic); in irc_msg_list()
576 purple_roomlist_room_add(irc->roomlist, room); in irc_msg_list()
580 void irc_msg_topic(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_topic() argument
593 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, chan, irc->account); in irc_msg_topic()
633 void irc_msg_topicinfo(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_topicinfo() argument
640 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account); in irc_msg_topicinfo()
662 void irc_msg_unknown(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_unknown() argument
664 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_unknown()
674 void irc_msg_names(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_names() argument
680 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, args[1], irc->account); in irc_msg_names()
683 g_string_free(irc->names, TRUE); in irc_msg_names()
684 irc->names = NULL; in irc_msg_names()
688 names = cur = g_string_free(irc->names, FALSE); in irc_msg_names()
689 irc->names = NULL; in irc_msg_names()
715 } else if(irc->mode_chars in irc_msg_names()
716 && strchr(irc->mode_chars, *cur)) { in irc_msg_names()
746 if (!irc->names) in irc_msg_names()
747 irc->names = g_string_new(""); in irc_msg_names()
749 if (irc->names->len && irc->names->str[irc->names->len - 1] != ' ') in irc_msg_names()
750 irc->names = g_string_append_c(irc->names, ' '); in irc_msg_names()
751 irc->names = g_string_append(irc->names, args[3]); in irc_msg_names()
755 void irc_msg_motd(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_motd() argument
760 if (irc->motd) { in irc_msg_motd()
761 g_string_free(irc->motd, TRUE); in irc_msg_motd()
762 irc->motd = NULL; in irc_msg_motd()
764 irc->motd = g_string_new(""); in irc_msg_motd()
769 irc_connected(irc, args[0]); in irc_msg_motd()
775 if (irc->motd) { in irc_msg_motd()
776 g_string_free(irc->motd, TRUE); in irc_msg_motd()
777 irc->motd = NULL; in irc_msg_motd()
780 irc_connected(irc, args[0]); in irc_msg_motd()
784 if (!irc->motd) { in irc_msg_motd()
793 g_string_append_printf(irc->motd, "%s<br>", escaped); in irc_msg_motd()
797 void irc_msg_time(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_time() argument
799 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_time()
808 void irc_msg_nochan(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_nochan() argument
810 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_nochan()
817 void irc_msg_nonick(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_nonick() argument
822 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, args[1], irc->account); in irc_msg_nonick()
831 if ((gc = purple_account_get_connection(irc->account)) == NULL) in irc_msg_nonick()
836 if (irc->whois.nick && !purple_utf8_strcasecmp(irc->whois.nick, args[1])) { in irc_msg_nonick()
837 g_free(irc->whois.nick); in irc_msg_nonick()
838 irc->whois.nick = NULL; in irc_msg_nonick()
842 void irc_msg_nosend(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_nosend() argument
847 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account); in irc_msg_nosend()
851 if ((gc = purple_account_get_connection(irc->account)) == NULL) in irc_msg_nosend()
857 void irc_msg_notinchan(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_notinchan() argument
859 …ation *convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account); in irc_msg_notinchan()
869 void irc_msg_notop(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_notop() argument
873 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account); in irc_msg_notop()
880 void irc_msg_invite(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_invite() argument
882 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_invite()
897 void irc_msg_inviteonly(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_inviteonly() argument
899 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_inviteonly()
909 void irc_msg_ison(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_ison() argument
917 if ((ib = g_hash_table_lookup(irc->buddies, (gconstpointer)nicks[i])) == NULL) { in irc_msg_ison()
924 if (irc->ison_outstanding) in irc_msg_ison()
925 irc_buddy_query(irc); in irc_msg_ison()
927 if (!irc->ison_outstanding) in irc_msg_ison()
928 g_hash_table_foreach(irc->buddies, (GHFunc)irc_buddy_status, (gpointer)irc); in irc_msg_ison()
931 static void irc_buddy_status(char *name, struct irc_buddy *ib, struct irc_conn *irc) in irc_buddy_status() argument
933 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_buddy_status()
934 PurpleBuddy *buddy = purple_find_buddy(irc->account, name); in irc_buddy_status()
940 purple_prpl_got_user_status(irc->account, name, "offline", NULL); in irc_buddy_status()
943 purple_prpl_got_user_status(irc->account, name, "available", NULL); in irc_buddy_status()
948 void irc_msg_join(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_join() argument
950 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_join()
969 irc->account); in irc_msg_join()
979 buf = irc_format(irc, "vc", "WHO", args[0]); in irc_msg_join()
980 irc_send(irc, buf); in irc_msg_join()
990 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[0], irc->account); in irc_msg_join()
1008 if ((ib = g_hash_table_lookup(irc->buddies, nick)) != NULL) { in irc_msg_join()
1010 irc_buddy_status(nick, ib, irc); in irc_msg_join()
1017 void irc_msg_kick(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_kick() argument
1019 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_kick()
1020 …ation *convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[0], irc->account); in irc_msg_kick()
1048 void irc_msg_mode(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_mode() argument
1055 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[0], irc->account); in irc_msg_mode()
1090 else if(irc->mode_chars in irc_msg_mode()
1091 && strchr(irc->mode_chars, '~') && (*mcur == 'q')) in irc_msg_mode()
1113 void irc_msg_nick(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_nick() argument
1115 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_nick()
1120 irc->nickused = FALSE; in irc_msg_nick()
1141 irc->account); in irc_msg_nick()
1148 void irc_msg_badnick(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_badnick() argument
1150 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_badnick()
1163 void irc_msg_nickused(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_nickused() argument
1166 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_nickused()
1173 irc->reqnick); in irc_msg_nickused()
1177 g_free(irc->reqnick); in irc_msg_nickused()
1178 irc->reqnick = NULL; in irc_msg_nickused()
1182 if (strlen(args[1]) < strlen(irc->reqnick) || irc->nickused) in irc_msg_nickused()
1192 g_free(irc->reqnick); in irc_msg_nickused()
1193 irc->reqnick = newnick; in irc_msg_nickused()
1194 irc->nickused = TRUE; in irc_msg_nickused()
1197 purple_account_get_connection(irc->account), newnick); in irc_msg_nickused()
1199 buf = irc_format(irc, "vn", "NICK", newnick); in irc_msg_nickused()
1200 irc_send(irc, buf); in irc_msg_nickused()
1204 void irc_msg_notice(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_notice() argument
1206 irc_msg_handle_privmsg(irc, name, from, args[0], args[1], TRUE); in irc_msg_notice()
1209 void irc_msg_nochangenick(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_nochangenick() argument
1211 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_nochangenick()
1218 void irc_msg_part(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_part() argument
1220 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_part()
1230 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, channel, irc->account); in irc_msg_part()
1254 void irc_msg_ping(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_ping() argument
1258 buf = irc_format(irc, "v:", "PONG", args[0]); in irc_msg_ping()
1259 irc_send(irc, buf); in irc_msg_ping()
1263 void irc_msg_pong(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_pong() argument
1283 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, parts[0], irc->account); in irc_msg_pong()
1291 gc = purple_account_get_connection(irc->account); in irc_msg_pong()
1301 void irc_msg_privmsg(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_privmsg() argument
1303 irc_msg_handle_privmsg(irc, name, from, args[0], args[1], FALSE); in irc_msg_privmsg()
1306 static void irc_msg_handle_privmsg(struct irc_conn *irc, const char *name, const char *from, const … in irc_msg_handle_privmsg() argument
1308 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_handle_privmsg()
1318 tmp = irc_parse_ctcp(irc, nick, to, rawmsg, notice); in irc_msg_handle_privmsg()
1339 …e_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, irc_nick_skip_mode(irc, to), irc->account); in irc_msg_handle_privmsg()
1350 void irc_msg_regonly(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_regonly() argument
1352 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_regonly()
1358 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account); in irc_msg_regonly()
1372 void irc_msg_quit(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_quit() argument
1374 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_quit()
1385 if ((ib = g_hash_table_lookup(irc->buddies, data[0])) != NULL) { in irc_msg_quit()
1387 irc_buddy_status(data[0], ib, irc); in irc_msg_quit()
1394 void irc_msg_unavailable(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_unavailable() argument
1396 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_unavailable()
1401 void irc_msg_wallops(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_wallops() argument
1403 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_wallops()
1419 struct irc_conn *irc = ctx; in irc_sasl_cb_secret() local
1424 pw = purple_account_get_password(irc->account); in irc_sasl_cb_secret()
1455 struct irc_conn *irc = ctx; in irc_sasl_cb_simple() local
1456 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_sasl_cb_simple()
1473 irc_auth_start_cyrus(struct irc_conn *irc) in irc_auth_start_cyrus() argument
1478 PurpleAccount *account = irc->account; in irc_auth_start_cyrus()
1488 if (!irc->gsc) { in irc_auth_start_cyrus()
1510 ret = sasl_client_new("irc", irc->server, NULL, NULL, irc->sasl_cb, 0, &irc->sasl_conn); in irc_auth_start_cyrus()
1515 sasl_errdetail(irc->sasl_conn)); in irc_auth_start_cyrus()
1522 sasl_setprop(irc->sasl_conn, SASL_AUTH_EXTERNAL, irc->account->username); in irc_auth_start_cyrus()
1523 sasl_setprop(irc->sasl_conn, SASL_SEC_PROPS, &secprops); in irc_auth_start_cyrus()
1525 …ret = sasl_client_start(irc->sasl_conn, irc->sasl_mechs->str, NULL, NULL, NULL, &irc->current_mech… in irc_auth_start_cyrus()
1530 irc->mech_works = FALSE; in irc_auth_start_cyrus()
1537 irc_sasl_finish(irc); in irc_auth_start_cyrus()
1541 tmp = g_strdup_printf(_("SASL authentication failed: %s"), sasl_errdetail(irc->sasl_conn)); in irc_auth_start_cyrus()
1546 irc_sasl_finish(irc); in irc_auth_start_cyrus()
1549 purple_debug_error("irc", "sasl_client_start failed: %s\n", sasl_errdetail(irc->sasl_conn)); in irc_auth_start_cyrus()
1551 if (irc->current_mech && *irc->current_mech) { in irc_auth_start_cyrus()
1553 if ((pos = strstr(irc->sasl_mechs->str, irc->current_mech))) { in irc_auth_start_cyrus()
1554 size_t index = pos - irc->sasl_mechs->str; in irc_auth_start_cyrus()
1555 g_string_erase(irc->sasl_mechs, index, strlen(irc->current_mech)); in irc_auth_start_cyrus()
1558 if ((irc->sasl_mechs->str)[index] == ' ') { in irc_auth_start_cyrus()
1559 g_string_erase(irc->sasl_mechs, index, 1); in irc_auth_start_cyrus()
1565 irc_sasl_finish(irc); in irc_auth_start_cyrus()
1569 purple_debug_info("irc", "Using SASL: %s\n", irc->current_mech); in irc_auth_start_cyrus()
1571 buf = irc_format(irc, "vv", "AUTHENTICATE", irc->current_mech); in irc_auth_start_cyrus()
1572 irc_send(irc, buf); in irc_auth_start_cyrus()
1578 irc_msg_cap(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_cap() argument
1582 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_cap()
1594 irc_sasl_finish(irc); in irc_msg_cap()
1605 irc->sasl_cb = g_new0(sasl_callback_t, 5); in irc_msg_cap()
1607 irc->sasl_cb[id].id = SASL_CB_AUTHNAME; in irc_msg_cap()
1608 irc->sasl_cb[id].proc = irc_sasl_cb_simple; in irc_msg_cap()
1609 irc->sasl_cb[id].context = (void *)irc; in irc_msg_cap()
1612 irc->sasl_cb[id].id = SASL_CB_USER; in irc_msg_cap()
1613 irc->sasl_cb[id].proc = irc_sasl_cb_simple; in irc_msg_cap()
1614 irc->sasl_cb[id].context = (void *)irc; in irc_msg_cap()
1617 irc->sasl_cb[id].id = SASL_CB_PASS; in irc_msg_cap()
1618 irc->sasl_cb[id].proc = irc_sasl_cb_secret; in irc_msg_cap()
1619 irc->sasl_cb[id].context = (void *)irc; in irc_msg_cap()
1622 irc->sasl_cb[id].id = SASL_CB_LOG; in irc_msg_cap()
1623 irc->sasl_cb[id].proc = irc_sasl_cb_log; in irc_msg_cap()
1624 irc->sasl_cb[id].context = (void *)irc; in irc_msg_cap()
1627 irc->sasl_cb[id].id = SASL_CB_LIST_END; in irc_msg_cap()
1630 ret = sasl_client_new("irc", irc->server, NULL, NULL, irc->sasl_cb, 0, &irc->sasl_conn); in irc_msg_cap()
1632 sasl_listmech(irc->sasl_conn, NULL, "", " ", "", &mech_list, NULL, NULL); in irc_msg_cap()
1640 sasl_errdetail(irc->sasl_conn)); in irc_msg_cap()
1648 irc->sasl_mechs = g_string_new(mech_list); in irc_msg_cap()
1650 if ((pos = strstr(irc->sasl_mechs->str, "EXTERNAL"))) { in irc_msg_cap()
1651 index = pos - irc->sasl_mechs->str; in irc_msg_cap()
1652 g_string_erase(irc->sasl_mechs, index, strlen("EXTERNAL")); in irc_msg_cap()
1654 if ((irc->sasl_mechs->str)[index] == ' ') { in irc_msg_cap()
1655 g_string_erase(irc->sasl_mechs, index, 1); in irc_msg_cap()
1659 irc_auth_start_cyrus(irc); in irc_msg_cap()
1663 irc_msg_auth(struct irc_conn *irc, char *arg) in irc_msg_auth() argument
1665 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_auth()
1673 irc->mech_works = TRUE; in irc_msg_auth()
1681 ret = sasl_client_step(irc->sasl_conn, serverin, serverinlen, in irc_msg_auth()
1687 sasl_errdetail(irc->sasl_conn)); in irc_msg_auth()
1692 irc_sasl_finish(irc); in irc_msg_auth()
1702 buf = irc_format(irc, "vv", "AUTHENTICATE", authinfo); in irc_msg_auth()
1703 irc_send(irc, buf); in irc_msg_auth()
1710 irc_msg_authenticate(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_authenticate() argument
1712 irc_msg_auth(irc, args[0]); in irc_msg_authenticate()
1716 irc_msg_authok(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_authok() argument
1720 sasl_dispose(&irc->sasl_conn); in irc_msg_authok()
1721 irc->sasl_conn = NULL; in irc_msg_authok()
1725 buf = irc_format(irc, "vv", "CAP", "END"); in irc_msg_authok()
1726 irc_send(irc, buf); in irc_msg_authok()
1731 irc_msg_authtryagain(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_authtryagain() argument
1733 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_authtryagain()
1741 if (irc->mech_works) { in irc_msg_authtryagain()
1745 irc_sasl_finish(irc); in irc_msg_authtryagain()
1750 if (irc->current_mech) { in irc_msg_authtryagain()
1752 if ((pos = strstr(irc->sasl_mechs->str, irc->current_mech))) { in irc_msg_authtryagain()
1753 size_t index = pos - irc->sasl_mechs->str; in irc_msg_authtryagain()
1754 g_string_erase(irc->sasl_mechs, index, strlen(irc->current_mech)); in irc_msg_authtryagain()
1757 if ((irc->sasl_mechs->str)[index] == ' ') { in irc_msg_authtryagain()
1758 g_string_erase(irc->sasl_mechs, index, 1); in irc_msg_authtryagain()
1762 if (*irc->sasl_mechs->str) { in irc_msg_authtryagain()
1763 sasl_dispose(&irc->sasl_conn); in irc_msg_authtryagain()
1765 purple_debug_info("irc", "Now trying with %s\n", irc->sasl_mechs->str); in irc_msg_authtryagain()
1766 irc_auth_start_cyrus(irc); in irc_msg_authtryagain()
1772 irc_sasl_finish(irc); in irc_msg_authtryagain()
1777 irc_msg_authfail(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_authfail() argument
1779 PurpleConnection *gc = purple_account_get_connection(irc->account); in irc_msg_authfail()
1782 if (irc->sasl_conn) { in irc_msg_authfail()
1783 purple_debug_info("irc", "SASL authentication failed: %s", sasl_errdetail(irc->sasl_conn)); in irc_msg_authfail()
1789 irc_sasl_finish(irc); in irc_msg_authfail()
1793 irc_sasl_finish(struct irc_conn *irc) in irc_sasl_finish() argument
1797 sasl_dispose(&irc->sasl_conn); in irc_sasl_finish()
1798 irc->sasl_conn = NULL; in irc_sasl_finish()
1800 g_free(irc->sasl_cb); in irc_sasl_finish()
1801 irc->sasl_cb = NULL; in irc_sasl_finish()
1804 buf = irc_format(irc, "vv", "CAP", "END"); in irc_sasl_finish()
1805 irc_send(irc, buf); in irc_sasl_finish()
1810 void irc_msg_ignore(struct irc_conn *irc, const char *name, const char *from, char **args) in irc_msg_ignore() argument