diff src/protocols/msn/msn.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 cc79431a11a7
line wrap: on
line diff
--- a/src/protocols/msn/msn.c	Wed Jan 08 07:28:54 2003 +0000
+++ b/src/protocols/msn/msn.c	Wed Jan 08 08:18:49 2003 +0000
@@ -27,6 +27,8 @@
 #include "pixmaps/protocols/msn/msn_away.xpm"
 #include "pixmaps/protocols/msn/msn_occ.xpm"
 
+static struct prpl *my_protocol = NULL;
+
 /* for win32 compatability */
 G_MODULE_IMPORT GSList *connections;
 
@@ -1066,19 +1068,22 @@
 
 static void msn_accept_add(struct msn_add_permit *map)
 {
-	struct msn_data *md = map->gc->proto_data;
-	char buf[MSN_BUF_LEN];
-	
-	g_snprintf(buf, sizeof(buf), "ADD %d AL %s %s\r\n", ++md->trId, map->user, url_encode(map->friend));
-	
-	if (msn_write(md->fd, buf, strlen(buf)) < 0) {
-		hide_login_progress(map->gc, _("Write error"));
-		signoff(map->gc);
-		return;
+	if(g_slist_find(connections, map->gc)) {
+		struct msn_data *md = map->gc->proto_data;
+		char buf[MSN_BUF_LEN];
+
+		g_snprintf(buf, sizeof(buf), "ADD %d AL %s %s\r\n", ++md->trId, map->user, url_encode(map->friend));
+
+		if (msn_write(md->fd, buf, strlen(buf)) < 0) {
+			hide_login_progress(map->gc, _("Write error"));
+			signoff(map->gc);
+			return;
+		}
+		map->gc->permit = g_slist_append(map->gc->permit, map->user);
+		build_allow_list(); /* er. right. we'll need to have a thing for this in CUI too */
+		show_got_added(map->gc, NULL, map->user, map->friend, NULL);
 	}
-	map->gc->permit = g_slist_append(map->gc->permit, map->user);
-	build_allow_list(); /* er. right. we'll need to have a thing for this in CUI too */
-	show_got_added(map->gc, NULL, map->user, map->friend, NULL);
+
 	g_free(map->user);
 	g_free(map->friend);
 	g_free(map);
@@ -1086,19 +1091,20 @@
 
 static void msn_cancel_add(struct msn_add_permit *map)
 {
-	struct msn_data *md = map->gc->proto_data;
-	char buf[MSN_BUF_LEN];
-
-	g_snprintf(buf, sizeof(buf), "ADD %d BL %s %s\r\n", ++md->trId, map->user, url_encode(map->friend));
-	if (msn_write(md->fd, buf, strlen(buf)) < 0) {
-		hide_login_progress(map->gc, _("Write error"));
-		signoff(map->gc);
-		return;
+	if(g_slist_find(connections, map->gc)) {
+		struct msn_data *md = map->gc->proto_data;
+		char buf[MSN_BUF_LEN];
+
+		g_snprintf(buf, sizeof(buf), "ADD %d BL %s %s\r\n", ++md->trId, map->user, url_encode(map->friend));
+		if (msn_write(md->fd, buf, strlen(buf)) < 0) {
+			hide_login_progress(map->gc, _("Write error"));
+			signoff(map->gc);
+			return;
+		}
+		map->gc->deny = g_slist_append(map->gc->deny, map->user);
+		build_block_list();
 	}
-	map->gc->deny = g_slist_append(map->gc->deny, map->user);
-	build_block_list();
-	
-	
+
 	g_free(map->user);
 	g_free(map->friend);
 	g_free(map);
@@ -1143,7 +1149,7 @@
 		g_snprintf(msg, sizeof(msg), _("The user %s (%s) wants to add %s to his or her buddy list."),
 				ap->user, ap->friend, ap->gc->username);
 
-		do_ask_dialog(msg, NULL, ap, _("Authorize"), msn_accept_add, _("Deny"), msn_cancel_add, FALSE);
+		do_ask_dialog(msg, NULL, ap, _("Authorize"), msn_accept_add, _("Deny"), msn_cancel_add, my_protocol->plug ? my_protocol->plug->handle : NULL, FALSE);
 	} else if (!g_strncasecmp(buf, "BLP", 3)) {
 		char *type, *tmp = buf;
 
@@ -1292,8 +1298,8 @@
 				ap->friend = g_strdup(friend);
 				ap->gc = gc;
                          
-		                g_snprintf(msg, sizeof(msg), _("The user %s (%s) wants to add you to their buddy list"),ap->user, ap->friend);
-				do_ask_dialog(msg, NULL, ap, _("Authorize"), msn_accept_add, _("Deny"), msn_cancel_add, FALSE);
+				g_snprintf(msg, sizeof(msg), _("The user %s (%s) wants to add you to their buddy list"),ap->user, ap->friend);
+				do_ask_dialog(msg, NULL, ap, _("Authorize"), msn_accept_add, _("Deny"), msn_cancel_add, my_protocol->plug ? my_protocol->plug->handle : NULL, FALSE);
 			}
 		    }
 			
@@ -2802,8 +2808,6 @@
 		g_free(b->proto_data);
 }
 
-static struct prpl *my_protocol = NULL;
-
 G_MODULE_EXPORT void msn_init(struct prpl *ret)
 {
 	struct proto_user_opt *puo;