diff src/protocols/irc/irc.c @ 4249:9c7fcb211886

[gaim-migrate @ 4499] If anyone is curious, the commit before this fixed a bug which didn't allow you to delete AIM or ICQ people from a deny list. They'll show up when you sign back online, and will be deleteable now. This is a patch from the good Mr. McQueen. "Twofold attack: 1) Make sure all the callback functions don't throw a mental if the gc the dialog was asking about has disappeared. Make sure the functions still free up the data structs as necessary in this case. 2) When setting up a ask dialog, plugins (including prpls) pass in their handle. The ask dialog struct gets kept in a slist. When unloading a plugin or prpl, Gaim checks the handle against the list, and sends a cancel-type message for any outstanding dialogs. Should avoid crashes from non-modal ask dialogs lying around." Yeah, so that's a nice lil' improvement. I also fixed a think where SSI "authorization denied" messages would be gibberish. That was a bug from just a few hours ago. Whoops. Also, since this is like a grown up version of show and tell, I thought this was funny: * Robot101 fixes idiocy <KingAnt> Does that mean I'm going to be nuetered? committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Wed, 08 Jan 2003 08:18:49 +0000
parents cd84b0fd63fc
children 0c68d402f59f
line wrap: on
line diff
--- a/src/protocols/irc/irc.c	Wed Jan 08 07:28:54 2003 +0000
+++ b/src/protocols/irc/irc.c	Wed Jan 08 08:18:49 2003 +0000
@@ -58,6 +58,8 @@
 #define USEROPT_PORT      1
 #define USEROPT_CHARSET   2
 
+static struct prpl *my_protocol = NULL;
+
 /* for win32 compatability */
 G_MODULE_IMPORT GSList *connections;
 
@@ -1181,12 +1183,16 @@
 
 static void 
 dcc_chat_init(struct dcc_chat *data) {
-	proxy_connect(data->ip_address, data->port, dcc_chat_callback, data);
+	if (g_slist_find(connections, data->gc)) {
+		proxy_connect(data->ip_address, data->port, dcc_chat_callback, data);
+	} else {
+		g_free(data);
+	}
 }
 
 static void 
 dcc_chat_cancel(struct dcc_chat *data){
-	if (find_dcc_chat(data->gc, data->nick)) {
+	if (g_slist_find(connections, data->gc) && find_dcc_chat(data->gc, data->nick)) {
 		dcc_chat_list = g_slist_remove(dcc_chat_list, data); 
 		gaim_input_remove (data->inpa);
 		close (data->fd);
@@ -1255,7 +1261,7 @@
 		dccchat->port=atoi(chat_args[4]);		
 		g_snprintf(dccchat->nick, sizeof(dccchat->nick), nick);	
 		g_snprintf(ask, sizeof(ask), _("%s would like to establish a DCC chat"), nick);
-		do_ask_dialog(ask, _("This requires a direct connection to be established between the two computers.  Messages sent will not pass through the IRC server"), dccchat, _("Connect"), dcc_chat_init, _("Cancel"), dcc_chat_cancel, FALSE);
+		do_ask_dialog(ask, _("This requires a direct connection to be established between the two computers.  Messages sent will not pass through the IRC server"), dccchat, _("Connect"), dcc_chat_init, _("Cancel"), dcc_chat_cancel, my_protocol->plug ? my_protocol->plug->handle : NULL, FALSE);
 	}
 
 
@@ -2658,8 +2664,6 @@
 	return m;
 }
 
-static struct prpl *my_protocol = NULL;
-
 G_MODULE_EXPORT void 
 irc_init(struct prpl *ret)
 {