Mercurial > pidgin
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;
