From: Peter L. <bl...@us...> - 2005-08-18 22:39:00
|
Update of /cvsroot/gaim-vv/gaim/src/protocols/irc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19861/src/protocols/irc Modified Files: cmds.c irc.c irc.h msgs.c parse.c Log Message: Man, what a fuckup Index: cmds.c =================================================================== RCS file: /cvsroot/gaim-vv/gaim/src/protocols/irc/cmds.c,v retrieving revision 1.1.1.6 retrieving revision 1.4 diff -u -d -p -r1.1.1.6 -r1.4 --- cmds.c 18 Aug 2005 02:46:58 -0000 1.1.1.6 +++ cmds.c 18 Aug 2005 22:38:20 -0000 1.4 @@ -34,7 +34,7 @@ static void irc_do_mode(struct irc_conn int irc_cmd_default(struct irc_conn *irc, const char *cmd, const char *target, const char **args) { - GaimConversation *convo = gaim_find_conversation_with_account(GAIM_CONV_ANY, target, irc->account); + GaimConversation *convo = gaim_find_conversation_with_account(target, irc->account); char *buf; if (!convo) @@ -110,7 +110,7 @@ int irc_cmd_ctcp_action(struct irc_conn g_free(newargs[1]); g_free(newargs); - convo = gaim_find_conversation_with_account(GAIM_CONV_ANY, target, irc->account); + convo = gaim_find_conversation_with_account(target, irc->account); if (convo) { escaped = g_markup_escape_text(args[0], -1); action = g_strdup_printf("/me %s", escaped); @@ -169,8 +169,8 @@ int irc_cmd_kick(struct irc_conn *irc, c if (!args || !args[0]) return 0; - convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, target, irc->account); - if (!convo) + convo = gaim_find_conversation_with_account(target, irc->account); + if (!convo || gaim_conversation_get_type(convo) != GAIM_CONV_CHAT) return 0; if (args[1]) @@ -367,6 +367,7 @@ int irc_cmd_quit(struct irc_conn *irc, c if (!irc->quitting) { buf = irc_format(irc, "v:", "QUIT", (args && args[0]) ? args[0] : gaim_prefs_get_string("/plugins/prpl/irc/quitmsg")); irc_send(irc, buf); +printf("%s\n", buf); g_free(buf); irc->quitting = TRUE; @@ -449,8 +450,8 @@ int irc_cmd_topic(struct irc_conn *irc, if (!args) return 0; - convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, target, irc->account); - if (!convo) + convo = gaim_find_conversation_with_account(target, irc->account); + if (!convo || gaim_conversation_get_type(convo) != GAIM_CONV_CHAT) return 0; if (!args[0]) { @@ -458,7 +459,7 @@ int irc_cmd_topic(struct irc_conn *irc, if (topic) { char *tmp, *tmp2; - tmp = g_markup_escape_text(topic, -1); + tmp = gaim_escape_html(topic); tmp2 = gaim_markup_linkify(tmp); buf = g_strdup_printf(_("current topic is: %s"), tmp2); g_free(tmp); Index: irc.c =================================================================== RCS file: /cvsroot/gaim-vv/gaim/src/protocols/irc/irc.c,v retrieving revision 1.1.1.6 retrieving revision 1.4 diff -u -d -p -r1.1.1.6 -r1.4 --- irc.c 18 Aug 2005 02:46:46 -0000 1.1.1.6 +++ irc.c 18 Aug 2005 22:38:20 -0000 1.4 @@ -40,21 +40,18 @@ static void irc_buddy_append(char *name, struct irc_buddy *ib, GString *string); static const char *irc_blist_icon(GaimAccount *a, GaimBuddy *b); -static void irc_blist_emblems(GaimBuddy *b, const char **se, const char **sw, const char **nw, const char **ne); -static GList *irc_status_types(GaimAccount *account); +static void irc_blist_emblems(GaimBuddy *b, char **se, char **sw, char **nw, char **ne); +static GList *irc_away_states(GaimConnection *gc); static GList *irc_actions(GaimPlugin *plugin, gpointer context); /* static GList *irc_chat_info(GaimConnection *gc); */ -static void irc_login(GaimAccount *account, GaimStatus *status); -static void irc_login_cb_ssl(gpointer data, GaimSslConnection *gsc, GaimInputCondition cond); +static void irc_login(GaimAccount *account); static void irc_login_cb(gpointer data, gint source, GaimInputCondition cond); -static void irc_ssl_connect_failure(GaimSslConnection *gsc, GaimSslErrorType error, gpointer data); static void irc_close(GaimConnection *gc); static int irc_im_send(GaimConnection *gc, const char *who, const char *what, GaimConvImFlags flags); static int irc_chat_send(GaimConnection *gc, int id, const char *what); static void irc_ping_server(GaimConnection *gc); static void irc_chat_join (GaimConnection *gc, GHashTable *data); static void irc_input_cb(gpointer data, gint source, GaimInputCondition cond); -static void irc_input_cb_ssl(gpointer data, GaimSslConnection *gsc, GaimInputCondition cond); static guint irc_nick_hash(const char *nick); static gboolean irc_nick_equal(const char *nick1, const char *nick2); @@ -88,20 +85,13 @@ int irc_send(struct irc_conn *irc, const { int ret; - if (irc->gsc) { - ret = gaim_ssl_write(irc->gsc, buf, strlen(buf)); - } else { - if (irc->fd < 0) - return -1; - ret = write(irc->fd, buf, strlen(buf)); - } + if (irc->fd < 0) + return -1; - /* gaim_debug(GAIM_DEBUG_MISC, "irc", "sent%s: %s", - irc->gsc ? " (ssl)" : "", buf); */ - if (ret < 0) { + /* gaim_debug(GAIM_DEBUG_MISC, "irc", "sent: %s", buf); */ + if ((ret = write(irc->fd, buf, strlen(buf))) < 0) gaim_connection_error(gaim_account_get_connection(irc->account), _("Server has disconnected")); - } return ret; } @@ -150,38 +140,15 @@ static const char *irc_blist_icon(GaimAc return "irc"; } -static void irc_blist_emblems(GaimBuddy *b, const char **se, const char **sw, const char **nw, const char **ne) +static void irc_blist_emblems(GaimBuddy *b, char **se, char **sw, char **nw, char **ne) { - GaimPresence *presence = gaim_buddy_get_presence(b); - - if (gaim_presence_is_online(presence) == FALSE) { + if (b->present == GAIM_BUDDY_OFFLINE) *se = "offline"; - } } -static GList *irc_status_types(GaimAccount *account) +static GList *irc_away_states(GaimConnection *gc) { - GaimStatusType *type; - GList *types = NULL; - - type = gaim_status_type_new(GAIM_STATUS_OFFLINE, "offline", - _("Offline"), FALSE); - types = g_list_append(types, type); - - type = gaim_status_type_new(GAIM_STATUS_ONLINE, "online", - _("Online"), FALSE); - types = g_list_append(types, type); - - type = gaim_status_type_new(GAIM_STATUS_AVAILABLE, "available", - _("Available"), TRUE); - types = g_list_append(types, type); - - type = gaim_status_type_new_with_attrs( - GAIM_STATUS_AWAY, "away", _("Away"), TRUE, TRUE, FALSE, - "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), NULL); - types = g_list_append(types, type); - - return types; + return g_list_append(NULL, (gpointer)GAIM_AWAY_CUSTOM); } static GList *irc_actions(GaimPlugin *plugin, gpointer context) @@ -195,6 +162,16 @@ static GList *irc_actions(GaimPlugin *pl return list; } +#if 0 +static GList *irc_blist_node_menu(GaimBlistNode *node) +{ + GList *m = NULL; + GaimBlistNodeAction *act; + + return m; +} +#endif + static GList *irc_chat_join_info(GaimConnection *gc) { GList *m = NULL; @@ -203,7 +180,6 @@ static GList *irc_chat_join_info(GaimCon pce = g_new0(struct proto_chat_entry, 1); pce->label = _("_Channel:"); pce->identifier = "channel"; - pce->required = TRUE; m = g_list_append(m, pce); pce = g_new0(struct proto_chat_entry, 1); @@ -227,7 +203,7 @@ GHashTable *irc_chat_info_defaults(GaimC return defaults; } -static void irc_login(GaimAccount *account, GaimStatus *status) +static void irc_login(GaimAccount *account) { GaimConnection *gc; struct irc_conn *irc; @@ -252,7 +228,7 @@ static void irc_login(GaimAccount *accou irc->server = g_strdup(userparts[1]); g_strfreev(userparts); - irc->buddies = g_hash_table_new_full((GHashFunc)irc_nick_hash, (GEqualFunc)irc_nick_equal, + irc->buddies = g_hash_table_new_full((GHashFunc)irc_nick_hash, (GEqualFunc)irc_nick_equal, NULL, (GDestroyNotify)irc_buddy_free); irc->cmds = g_hash_table_new(g_str_hash, g_str_equal); irc_cmd_table_build(irc); @@ -261,42 +237,43 @@ static void irc_login(GaimAccount *accou gaim_connection_update_progress(gc, _("Connecting"), 1, 2); - if (gaim_account_get_bool(account, "ssl", FALSE)) { - if (gaim_ssl_is_supported()) { - irc->gsc = gaim_ssl_connect(account, irc->server, - gaim_account_get_int(account, "port", IRC_DEFAULT_SSL_PORT), - irc_login_cb_ssl, irc_ssl_connect_failure, gc); - } else { - gaim_connection_error(gc, _("SSL support unavailable")); - } - } - - if (!irc->gsc) { - - err = gaim_proxy_connect(account, irc->server, + err = gaim_proxy_connect(account, irc->server, gaim_account_get_int(account, "port", IRC_DEFAULT_PORT), irc_login_cb, gc); - if (err || !gaim_account_get_connection(account)) { - gaim_connection_error(gc, _("Couldn't create socket")); - return; - } + if (err || !account->gc) { + gaim_connection_error(gc, _("Couldn't create socket")); + return; } } -static gboolean do_login(GaimConnection *gc) { - char *buf; +static void irc_login_cb(gpointer data, gint source, GaimInputCondition cond) +{ + GaimConnection *gc = data; + struct irc_conn *irc = gc->proto_data; char hostname[256]; + char *buf; const char *username, *realname; - struct irc_conn *irc = gc->proto_data; - const char *pass = gaim_connection_get_password(gc); + GList *connections = gaim_connections_get_all(); - if (pass && *pass) { - buf = irc_format(irc, "vv", "PASS", pass); + if (source < 0) { + gaim_connection_error(gc, _("Couldn't connect to host")); + return; + } + + if (!g_list_find(connections, gc)) { + close(source); + return; + } + + irc->fd = source; + + if (gc->account->password && *gc->account->password) { + buf = irc_format(irc, "vv", "PASS", gc->account->password); if (irc_send(irc, buf) < 0) { gaim_connection_error(gc, "Error sending password"); g_free(buf); - return FALSE; + return; } g_free(buf); } @@ -310,78 +287,18 @@ static gboolean do_login(GaimConnection if (irc_send(irc, buf) < 0) { gaim_connection_error(gc, "Error registering with server"); g_free(buf); - return FALSE; + return; } g_free(buf); buf = irc_format(irc, "vn", "NICK", gaim_connection_get_display_name(gc)); if (irc_send(irc, buf) < 0) { gaim_connection_error(gc, "Error sending nickname"); g_free(buf); - return FALSE; - } - g_free(buf); - - return TRUE; -} - -static void irc_login_cb_ssl(gpointer data, GaimSslConnection *gsc, - GaimInputCondition cond) -{ - GaimConnection *gc = data; - struct irc_conn *irc = gc->proto_data; - - if(!g_list_find(gaim_connections_get_all(), gc)) { - gaim_ssl_close(gsc); return; } + g_free(buf); - irc->gsc = gsc; - - if (do_login(gc)) { - gaim_ssl_input_add(gsc, irc_input_cb_ssl, gc); - } -} - -static void irc_login_cb(gpointer data, gint source, GaimInputCondition cond) -{ - GaimConnection *gc = data; - struct irc_conn *irc = gc->proto_data; - GList *connections = gaim_connections_get_all(); - - if (source < 0) { - gaim_connection_error(gc, _("Couldn't connect to host")); - return; - } - - if (!g_list_find(connections, gc)) { - close(source); - return; - } - - irc->fd = source; - - if (do_login(gc)) { - gc->inpa = gaim_input_add(irc->fd, GAIM_INPUT_READ, irc_input_cb, gc); - } -} - -static void -irc_ssl_connect_failure(GaimSslConnection *gsc, GaimSslErrorType error, - gpointer data) -{ - GaimConnection *gc = data; - struct irc_conn *irc = gc->proto_data; - - switch(error) { - case GAIM_SSL_CONNECT_FAILED: - gaim_connection_error(gc, _("Connection Failed")); - break; - case GAIM_SSL_HANDSHAKE_FAILED: - gaim_connection_error(gc, _("SSL Handshake Failed")); - break; - } - - irc->gsc = NULL; + gc->inpa = gaim_input_add(irc->fd, GAIM_INPUT_READ, irc_input_cb, gc); } static void irc_close(GaimConnection *gc) @@ -397,11 +314,7 @@ static void irc_close(GaimConnection *gc gaim_input_remove(gc->inpa); g_free(irc->inbuf); - if (irc->gsc) { - gaim_ssl_close(irc->gsc); - } else if (irc->fd > 0) { - close(irc->fd); - } + close(irc->fd); if (irc->timer) gaim_timeout_remove(irc->timer); g_hash_table_destroy(irc->cmds); @@ -437,29 +350,21 @@ static void irc_get_info(GaimConnection irc_cmd_whois(irc, "whois", NULL, args); } -static void irc_set_status(GaimAccount *account, GaimStatus *status) +static void irc_set_away(GaimConnection *gc, const char *state, const char *msg) { - GaimConnection *gc = gaim_account_get_connection(account); - struct irc_conn *irc = NULL; + struct irc_conn *irc = gc->proto_data; const char *args[1]; - const char *status_id = gaim_status_get_id(status); - if (gc) - irc = gc->proto_data; - - if (!gaim_status_is_active(status)) - return; + if (gc->away) { + g_free(gc->away); + gc->away = NULL; + } - args[0] = NULL; + if (msg) + gc->away = g_strdup(msg); - if (strcmp(status_id, "offline") && !gc) { - gaim_account_connect(account); - } else if (!strcmp(status_id, "offline") && gc) { - gaim_account_disconnect(account); - } else if (!strcmp(status_id, "away")) { - args[0] = gaim_status_get_attr_string(status, "message"); - irc_cmd_away(irc, "away", NULL, args); - } + args[0] = msg; + irc_cmd_away(irc, "away", NULL, args); } static void irc_add_buddy(GaimConnection *gc, GaimBuddy *buddy, GaimGroup *group) @@ -482,9 +387,25 @@ static void irc_remove_buddy(GaimConnect g_hash_table_remove(irc->buddies, buddy->name); } -static void read_input(struct irc_conn *irc, int len) +static void irc_input_cb(gpointer data, gint source, GaimInputCondition cond) { + GaimConnection *gc = data; + struct irc_conn *irc = gc->proto_data; char *cur, *end; + int len; + + if (irc->inbuflen < irc->inbufused + IRC_INITIAL_BUFSIZE) { + irc->inbuflen += IRC_INITIAL_BUFSIZE; + irc->inbuf = g_realloc(irc->inbuf, irc->inbuflen); + } + + if ((len = read(irc->fd, irc->inbuf + irc->inbufused, IRC_INITIAL_BUFSIZE - 1)) < 0) { + gaim_connection_error(gc, _("Read error")); + return; + } else if (len == 0) { + gaim_connection_error(gc, _("Server has disconnected")); + return; + } irc->inbufused += len; irc->inbuf[irc->inbufused] = '\0'; @@ -505,57 +426,6 @@ static void read_input(struct irc_conn * } } -static void irc_input_cb_ssl(gpointer data, GaimSslConnection *gsc, - GaimInputCondition cond) -{ - - GaimConnection *gc = data; - struct irc_conn *irc = gc->proto_data; - int len; - - if(!g_list_find(gaim_connections_get_all(), gc)) { - gaim_ssl_close(gsc); - return; - } - - if (irc->inbuflen < irc->inbufused + IRC_INITIAL_BUFSIZE) { - irc->inbuflen += IRC_INITIAL_BUFSIZE; - irc->inbuf = g_realloc(irc->inbuf, irc->inbuflen); - } - - if ((len = gaim_ssl_read(gsc, irc->inbuf + irc->inbufused, IRC_INITIAL_BUFSIZE - 1)) < 0) { - gaim_connection_error(gc, _("Read error")); - return; - } else if (len == 0) { - gaim_connection_error(gc, _("Server has disconnected")); - return; - } - - read_input(irc, len); -} - -static void irc_input_cb(gpointer data, gint source, GaimInputCondition cond) -{ - GaimConnection *gc = data; - struct irc_conn *irc = gc->proto_data; - int len; - - if (irc->inbuflen < irc->inbufused + IRC_INITIAL_BUFSIZE) { - irc->inbuflen += IRC_INITIAL_BUFSIZE; - irc->inbuf = g_realloc(irc->inbuf, irc->inbuflen); - } - - if ((len = read(irc->fd, irc->inbuf + irc->inbufused, IRC_INITIAL_BUFSIZE - 1)) < 0) { - gaim_connection_error(gc, _("Read error")); - return; - } else if (len == 0) { - gaim_connection_error(gc, _("Server has disconnected")); - return; - } - - read_input(irc, len); -} - static void irc_chat_join (GaimConnection *gc, GHashTable *data) { struct irc_conn *irc = gc->proto_data; @@ -622,7 +492,7 @@ static int irc_chat_send(GaimConnection irc_cmd_privmsg(irc, "msg", NULL, args); - tmp = g_markup_escape_text(what, -1); + tmp = gaim_escape_html(what); serv_got_chat_in(gc, id, gaim_connection_get_display_name(gc), 0, tmp, time(NULL)); g_free(tmp); return 0; @@ -754,41 +624,42 @@ static GaimPluginProtocolInfo prpl_info OPT_PROTO_CHAT_TOPIC | OPT_PROTO_PASSWORD_OPTIONAL, NULL, /* user_splits */ NULL, /* protocol_options */ - NO_BUDDY_ICONS, /* icon_spec */ - irc_blist_icon, /* list_icon */ - irc_blist_emblems, /* list_emblems */ + NO_BUDDY_ICONS, /* icon_spec */ + irc_blist_icon, /* list_icon */ + irc_blist_emblems, /* list_emblems */ NULL, /* status_text */ NULL, /* tooltip_text */ - irc_status_types, /* away_states */ + irc_away_states, /* away_states */ NULL, /* blist_node_menu */ - irc_chat_join_info, /* chat_info */ + irc_chat_join_info, /* chat_info */ irc_chat_info_defaults, /* chat_info_defaults */ - irc_login, /* login */ - irc_close, /* close */ - irc_im_send, /* send_im */ + irc_login, /* login */ + irc_close, /* close */ + irc_im_send, /* send_im */ NULL, /* set_info */ NULL, /* send_typing */ - irc_get_info, /* get_info */ - irc_set_status, /* set_status */ + irc_get_info, /* get_info */ + irc_set_away, /* set_away */ NULL, /* set_idle */ NULL, /* change_passwd */ - irc_add_buddy, /* add_buddy */ + irc_add_buddy, /* add_buddy */ NULL, /* add_buddies */ - irc_remove_buddy, /* remove_buddy */ + irc_remove_buddy, /* remove_buddy */ NULL, /* remove_buddies */ NULL, /* add_permit */ NULL, /* add_deny */ NULL, /* rem_permit */ NULL, /* rem_deny */ NULL, /* set_permit_deny */ - irc_chat_join, /* join_chat */ + NULL, /* warn */ + irc_chat_join, /* join_chat */ NULL, /* reject_chat */ - irc_get_chat_name, /* get_chat_name */ - irc_chat_invite, /* chat_invite */ - irc_chat_leave, /* chat_leave */ + irc_get_chat_name, /* get_chat_name */ + irc_chat_invite, /* chat_invite */ + irc_chat_leave, /* chat_leave */ NULL, /* chat_whisper */ - irc_chat_send, /* chat_send */ - irc_ping_server, /* keepalive */ + irc_chat_send, /* chat_send */ + irc_ping_server, /* keepalive */ NULL, /* register_user */ NULL, /* get_cb_info */ NULL, /* get_cb_away */ @@ -801,7 +672,7 @@ static GaimPluginProtocolInfo prpl_info NULL, /* set_buddy_icon */ NULL, /* remove_group */ NULL, /* get_cb_real_name */ - irc_chat_set_topic, /* set_chat_topic */ + irc_chat_set_topic, /* set_chat_topic */ NULL, /* find_blist_chat */ irc_roomlist_get_list, /* roomlist_get_list */ irc_roomlist_cancel, /* roomlist_cancel */ @@ -860,9 +731,6 @@ static void _init_plugin(GaimPlugin *plu option = gaim_account_option_string_new(_("Real name"), "realname", ""); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - option = gaim_account_option_bool_new(_("Use SSL"), "ssl", FALSE); - prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - _irc_plugin = plugin; gaim_prefs_add_none("/plugins/prpl/irc"); Index: irc.h =================================================================== RCS file: /cvsroot/gaim-vv/gaim/src/protocols/irc/irc.h,v retrieving revision 1.1.1.5 retrieving revision 1.4 diff -u -d -p -r1.1.1.5 -r1.4 --- irc.h 18 Aug 2005 02:46:46 -0000 1.1.1.5 +++ irc.h 18 Aug 2005 22:38:20 -0000 1.4 @@ -26,11 +26,9 @@ #include <glib.h> #include "roomlist.h" -#include "sslconn.h" #define IRC_DEFAULT_SERVER "irc.freenode.net" #define IRC_DEFAULT_PORT 6667 -#define IRC_DEFAULT_SSL_PORT 994 #define IRC_DEFAULT_CHARSET "UTF-8" #define IRC_DEFAULT_ALIAS "gaim" @@ -73,7 +71,6 @@ struct irc_conn { time_t signon; } whois; GaimRoomlist *roomlist; - GaimSslConnection *gsc; gboolean quitting; }; @@ -135,7 +132,6 @@ void irc_msg_regonly(struct irc_conn *ir void irc_msg_quit(struct irc_conn *irc, const char *name, const char *from, char **args); void irc_msg_time(struct irc_conn *irc, const char *name, const char *from, char **args); void irc_msg_topic(struct irc_conn *irc, const char *name, const char *from, char **args); -void irc_msg_unavailable(struct irc_conn *irc, const char *name, const char *from, char **args); void irc_msg_unknown(struct irc_conn *irc, const char *name, const char *from, char **args); void irc_msg_wallops(struct irc_conn *irc, const char *name, const char *from, char **args); void irc_msg_whois(struct irc_conn *irc, const char *name, const char *from, char **args); Index: msgs.c =================================================================== RCS file: /cvsroot/gaim-vv/gaim/src/protocols/irc/msgs.c,v retrieving revision 1.1.1.5 retrieving revision 1.4 diff -u -d -p -r1.1.1.5 -r1.4 --- msgs.c 18 Aug 2005 02:46:58 -0000 1.1.1.5 +++ msgs.c 18 Aug 2005 22:38:20 -0000 1.4 @@ -98,23 +98,28 @@ void irc_msg_away(struct irc_conn *irc, void irc_msg_badmode(struct irc_conn *irc, const char *name, const char *from, char **args) { GaimConnection *gc = gaim_account_get_connection(irc->account); + char *escaped; if (!args || !args[1] || !gc) return; - gaim_notify_error(gc, NULL, _("Bad mode"), args[1]); + escaped = g_markup_escape_text(args[1], -1); + gaim_notify_error(gc, NULL, _("Bad mode"), escaped); + g_free(escaped); } void irc_msg_banned(struct irc_conn *irc, const char *name, const char *from, char **args) { GaimConnection *gc = gaim_account_get_connection(irc->account); - char *buf; + char *buf, *escaped; if (!args || !args[1] || !gc) return; - buf = g_strdup_printf(_("You are banned from %s."), args[1]); + escaped = g_markup_escape_text(args[1], -1); + buf = g_strdup_printf(_("You are banned from %s."), escaped); gaim_notify_error(gc, _("Banned"), _("Banned"), buf); + g_free(escaped); g_free(buf); } @@ -126,7 +131,7 @@ void irc_msg_banfull(struct irc_conn *ir if (!args || !args[0] || !args[1] || !args[2]) return; - convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, args[1], irc->account); + convo = gaim_find_conversation_with_account(args[1], irc->account); if (!convo) return; @@ -147,7 +152,7 @@ void irc_msg_chanmode(struct irc_conn *i if (!args || !args[1] || !args[2]) return; - convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, args[1], irc->account); + convo = gaim_find_conversation_with_account(args[1], irc->account); if (!convo) /* XXX punt on channels we are not in for now */ return; @@ -305,13 +310,13 @@ void irc_msg_topic(struct irc_conn *irc, topic = irc_mirc2txt (args[2]); } - convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, chan, irc->account); + convo = gaim_find_conversation_with_account(chan, irc->account); if (!convo) { gaim_debug(GAIM_DEBUG_ERROR, "irc", "Got a topic for %s, which doesn't exist\n", chan); } /* If this is an interactive update, print it out */ - tmp = g_markup_escape_text(topic, -1); + tmp = gaim_escape_html(topic); tmp2 = gaim_markup_linkify(tmp); g_free(tmp); if (!strcmp(name, "topic")) { @@ -334,13 +339,15 @@ void irc_msg_topic(struct irc_conn *irc, void irc_msg_unknown(struct irc_conn *irc, const char *name, const char *from, char **args) { GaimConnection *gc = gaim_account_get_connection(irc->account); - char *buf; + char *buf, *escaped; if (!args || !args[1] || !gc) return; - buf = g_strdup_printf(_("Unknown message '%s'"), args[1]); + escaped = g_markup_escape_text(args[1], -1); + buf = g_strdup_printf(_("Unknown message '%s'"), escaped); gaim_notify_error(gc, _("Unknown message"), buf, _("Gaim has sent a message the IRC server did not understand.")); + g_free(escaped); g_free(buf); } @@ -350,7 +357,7 @@ void irc_msg_names(struct irc_conn *irc, GaimConversation *convo; if (!strcmp(name, "366")) { - convo = gaim_find_conversation_with_account(GAIM_CONV_ANY, irc->nameconv ? irc->nameconv : args[1], irc->account); + convo = gaim_find_conversation_with_account(irc->nameconv ? irc->nameconv : args[1], irc->account); if (!convo) { gaim_debug(GAIM_DEBUG_ERROR, "irc", "Got a NAMES list for %s, which doesn't exist\n", args[2]); g_string_free(irc->names, TRUE); @@ -446,6 +453,7 @@ void irc_msg_endmotd(struct irc_conn *ir return; gaim_connection_set_state(gc, GAIM_CONNECTED); + serv_finish_login (gc); irc_blist_timeout(irc); if (!irc->timer) @@ -455,32 +463,39 @@ void irc_msg_endmotd(struct irc_conn *ir void irc_msg_time(struct irc_conn *irc, const char *name, const char *from, char **args) { GaimConnection *gc; + char *time; gc = gaim_account_get_connection(irc->account); if (gc == NULL || args == NULL || args[2] == NULL) return; + time = g_markup_escape_text(args[2], -1); gaim_notify_message(gc, GAIM_NOTIFY_MSG_INFO, _("Time Response"), _("The IRC server's local time is:"), - args[2], NULL, NULL); + time, NULL, NULL); + g_free(time); } void irc_msg_nochan(struct irc_conn *irc, const char *name, const char *from, char **args) { GaimConnection *gc = gaim_account_get_connection(irc->account); + char *escaped; if (gc == NULL || args == NULL || args[1] == NULL) return; - gaim_notify_error(gc, NULL, _("No such channel"), args[1]); + escaped = g_markup_escape_text(args[1], -1); + gaim_notify_error(gc, NULL, _("No such channel"), escaped); + g_free(escaped); } void irc_msg_nonick(struct irc_conn *irc, const char *name, const char *from, char **args) { GaimConnection *gc; GaimConversation *convo; + char *nick; - convo = gaim_find_conversation_with_account(GAIM_CONV_ANY, args[1], irc->account); + convo = gaim_find_conversation_with_account(args[1], irc->account); if (convo) { if (gaim_conversation_get_type(convo) == GAIM_CONV_CHAT) /* does this happen? */ gaim_conv_chat_write(GAIM_CONV_CHAT(convo), args[1], _("no such channel"), @@ -491,7 +506,9 @@ void irc_msg_nonick(struct irc_conn *irc } else { if ((gc = gaim_account_get_connection(irc->account)) == NULL) return; - gaim_notify_error(gc, NULL, _("No such nick or channel"), args[1]); + nick = g_markup_escape_text (args[1], -1); + gaim_notify_error(gc, NULL, _("No such nick or channel"), nick); + g_free (nick); } if (irc->whois.nick && !gaim_utf8_strcasecmp(irc->whois.nick, args[1])) { @@ -505,7 +522,7 @@ void irc_msg_nosend(struct irc_conn *irc GaimConnection *gc; GaimConversation *convo; - convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, args[1], irc->account); + convo = gaim_find_conversation_with_account(args[1], irc->account); if (convo) { gaim_conv_chat_write(GAIM_CONV_CHAT(convo), args[1], args[2], GAIM_MESSAGE_SYSTEM|GAIM_MESSAGE_NO_LOG, time(NULL)); } else { @@ -517,7 +534,7 @@ void irc_msg_nosend(struct irc_conn *irc void irc_msg_notinchan(struct irc_conn *irc, const char *name, const char *from, char **args) { - GaimConversation *convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, args[1], irc->account); + GaimConversation *convo = gaim_find_conversation_with_account(args[1], irc->account); gaim_debug(GAIM_DEBUG_INFO, "irc", "We're apparently not in %s, but tried to use it\n", args[1]); if (convo) { @@ -534,7 +551,7 @@ void irc_msg_notop(struct irc_conn *irc, if (!args || !args[1] || !args[2]) return; - convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, args[1], irc->account); + convo = gaim_find_conversation_with_account(args[1], irc->account); if (!convo) return; @@ -604,10 +621,12 @@ static void irc_buddy_status(char *name, return; if (ib->online && !ib->flag) { - gaim_prpl_got_user_status(irc->account, name, "offline", NULL); + serv_got_update(gc, buddy->name, FALSE, 0, 0, 0, 0); ib->online = FALSE; - } else if (!ib->online && ib->flag) { - gaim_prpl_got_user_status(irc->account, name, "online", NULL); + } + + if (!ib->online && ib->flag) { + serv_got_update(gc, buddy->name, TRUE, 0, 0, 0, 0); ib->online = TRUE; } } @@ -632,7 +651,7 @@ void irc_msg_join(struct irc_conn *irc, return; } - convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, args[0], irc->account); + convo = gaim_find_conversation_with_account(args[0], irc->account); if (convo == NULL) { gaim_debug(GAIM_DEBUG_ERROR, "irc", "JOIN for %s failed\n", args[0]); g_free(nick); @@ -654,7 +673,7 @@ void irc_msg_join(struct irc_conn *irc, void irc_msg_kick(struct irc_conn *irc, const char *name, const char *from, char **args) { GaimConnection *gc = gaim_account_get_connection(irc->account); - GaimConversation *convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, args[0], irc->account); + GaimConversation *convo = gaim_find_conversation_with_account(args[0], irc->account); char *nick = irc_mask_nick(from), *buf, *reason; if (!gc) { @@ -692,7 +711,7 @@ void irc_msg_mode(struct irc_conn *irc, if (*args[0] == '#' || *args[0] == '&') { /* Channel */ char *escaped; - convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, args[0], irc->account); + convo = gaim_find_conversation_with_account(args[0], irc->account); if (!convo) { gaim_debug(GAIM_DEBUG_ERROR, "irc", "MODE received for %s, which we are not in\n", args[0]); g_free(nick); @@ -772,8 +791,7 @@ void irc_msg_nick(struct irc_conn *irc, chats = chats->next; } - conv = gaim_find_conversation_with_account(GAIM_CONV_IM, nick, - irc->account); + conv = gaim_find_conversation_with_account(nick, irc->account); if (conv != NULL) gaim_conversation_set_name(conv, args[0]); @@ -782,8 +800,21 @@ void irc_msg_nick(struct irc_conn *irc, void irc_msg_badnick(struct irc_conn *irc, const char *name, const char *from, char **args) { - gaim_connection_error(gaim_account_get_connection(irc->account), - _("Your selected account name was rejected by the server. It probably contains invalid characters.")); + GaimConnection *gc = gaim_account_get_connection(irc->account); + char *escaped, *msg; + + if (gc && gaim_connection_get_state(gc) == GAIM_CONNECTED) { + escaped = g_markup_escape_text(args[1], -1); + msg = g_strdup_printf(_("Invalid nickname '%s'"), escaped); + gaim_notify_error(irc->account, _("Invalid nickname"), + msg, + _("Your selected account name was rejected by the server. It probably contains invalid characters.")); + g_free(escaped); + g_free(msg); + } else { + gaim_connection_error(gc, + _("Your selected account name was rejected by the server. It probably contains invalid characters.")); + } } void irc_msg_nickused(struct irc_conn *irc, const char *name, const char *from, char **args) @@ -818,11 +849,14 @@ void irc_msg_notice(struct irc_conn *irc void irc_msg_nochangenick(struct irc_conn *irc, const char *name, const char *from, char **args) { GaimConnection *gc = gaim_account_get_connection(irc->account); + char *msg; if (!args || !args[2] || !gc) return; - gaim_notify_error(gc, _("Cannot change nick"), _("Could not change nick"), args[2]); + msg = g_markup_escape_text(args[2], -1); + gaim_notify_error(gc, _("Cannot change nick"), _("Could not change nick"), msg); + g_free(msg); } void irc_msg_part(struct irc_conn *irc, const char *name, const char *from, char **args) @@ -834,7 +868,7 @@ void irc_msg_part(struct irc_conn *irc, if (!args || !args[0] || !gc) return; - convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, args[0], irc->account); + convo = gaim_find_conversation_with_account(args[0], irc->account); if (!convo) { gaim_debug(GAIM_DEBUG_INFO, "irc", "Got a PART on %s, which doesn't exist -- probably closed\n", args[0]); return; @@ -890,7 +924,7 @@ void irc_msg_pong(struct irc_conn *irc, msg = g_strdup_printf(_("PING reply -- Lag: %lu seconds"), time(NULL) - oldstamp); } - convo = gaim_find_conversation_with_account(GAIM_CONV_ANY, parts[0], irc->account); + convo = gaim_find_conversation_with_account(parts[0], irc->account); g_strfreev(parts); if (convo) { if (gaim_conversation_get_type (convo) == GAIM_CONV_CHAT) @@ -927,7 +961,7 @@ void irc_msg_privmsg(struct irc_conn *ir return; } - msg = g_markup_escape_text(tmp, -1); + msg = gaim_escape_html(tmp); g_free(tmp); tmp = irc_mirc2html(msg); @@ -944,7 +978,7 @@ void irc_msg_privmsg(struct irc_conn *ir } else if (notice) { serv_got_im(gc, nick, msg, 0, time(NULL)); } else { - convo = gaim_find_conversation_with_account(GAIM_CONV_CHAT, args[0], irc->account); + convo = gaim_find_conversation_with_account(args[0], irc->account); if (convo) serv_got_chat_in(gc, gaim_conv_chat_get_id(GAIM_CONV_CHAT(convo)), nick, 0, msg, time(NULL)); else @@ -957,14 +991,16 @@ void irc_msg_privmsg(struct irc_conn *ir void irc_msg_regonly(struct irc_conn *irc, const char *name, const char *from, char **args) { GaimConnection *gc = gaim_account_get_connection(irc->account); - char *msg; + char *msg, *reason; if (!args || !args[1] || !args[2] || !gc) return; msg = g_strdup_printf(_("Cannot join %s:"), args[1]); - gaim_notify_error(gc, _("Cannot join channel"), msg, args[2]); + reason = g_markup_escape_text(args[2], -1); + gaim_notify_error(gc, _("Cannot join channel"), msg, reason); g_free(msg); + g_free(reason); } void irc_msg_quit(struct irc_conn *irc, const char *name, const char *from, char **args) @@ -990,20 +1026,10 @@ void irc_msg_quit(struct irc_conn *irc, return; } -void irc_msg_unavailable(struct irc_conn *irc, const char *name, const char *from, char **args) -{ - GaimConnection *gc = gaim_account_get_connection(irc->account); - - if (!args || !args[1]) - return; - - gaim_notify_error(gc, NULL, _("Nick or channel is temporarily unavailable."), args[1]); -} - void irc_msg_wallops(struct irc_conn *irc, const char *name, const char *from, char **args) { GaimConnection *gc = gaim_account_get_connection(irc->account); - char *nick, *msg; + char *nick, *msg, *wallop; if (!args || !args[0] || !gc) return; @@ -1011,8 +1037,10 @@ void irc_msg_wallops(struct irc_conn *ir nick = irc_mask_nick(from); msg = g_strdup_printf (_("Wallops from %s"), nick); g_free(nick); - gaim_notify_info(gc, NULL, msg, args[0]); + wallop = g_markup_escape_text(args[0], strlen(args[0])); + gaim_notify_info(gc, NULL, msg, wallop); g_free(msg); + g_free(wallop); } void irc_msg_ignore(struct irc_conn *irc, const char *name, const char *from, char **args) Index: parse.c =================================================================== RCS file: /cvsroot/gaim-vv/gaim/src/protocols/irc/parse.c,v retrieving revision 1.1.1.6 retrieving revision 1.4 diff -u -d -p -r1.1.1.6 -r1.4 --- parse.c 18 Aug 2005 02:46:58 -0000 1.1.1.6 +++ parse.c 18 Aug 2005 22:38:20 -0000 1.4 @@ -77,9 +77,8 @@ static struct _irc_msg { { "404", "nt:", irc_msg_nosend }, /* Cannot send to chan */ { "421", "nv:", irc_msg_unknown }, /* Unknown command */ { "422", "nv:", irc_msg_endmotd }, /* No MOTD available */ - { "432", "vn:", irc_msg_badnick }, /* Erroneous nickname */ + { "432", "nn:", irc_msg_badnick }, /* Erroneous nickname */ { "433", "vn:", irc_msg_nickused }, /* Nickname already in use */ - { "437", "nc:", irc_msg_unavailable }, /* Nick/channel is unavailable */ { "438", "nn:", irc_msg_nochangenick }, /* Nick may not change */ { "442", "nc:", irc_msg_notinchan }, /* Not in channel */ { "473", "nc:", irc_msg_inviteonly }, /* Tried to join invite-only */ |