annotate src/protocols/msn/dialog.c @ 13914:3ae8a3935406

[gaim-migrate @ 16414] First stab at trying to fix the MSN http connect method. It still doesn't work, and I'm not sure why, but it gets a lot farther in the signon process now. For those unfamiliar with the issue, the MSN http connect method stopped working after all the non-blocking I/O changes. The http connect method is apparently used by lots of people behind silly firewalls and stuff, and therefore we really shouldn't release Gaim 2.0.0 without it working, because people will complain. The two main problems were 1. The outgoing message queue was removed in favor of buffering all data to one large buffer. This sounds good in theory... but apparently each message sent to and from the server has a "SessionID" in the HTTP header. Every message we send should use the same SessionID as the last packet we received from the server. So basically you can't put two messages into the outgoing buffer at the same time because you don't have the correct SessionID to use for the second message. You have to wait until you get the reply from the server. 2. There were some strange buffer problems with using the wrong variable when trying to combine the header+body into one buffer before sending the message. I also fixed a small memleak or two, added some comments, and tried to clean up the code a little. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Mon, 03 Jul 2006 20:39:04 +0000
parents 4e44ecb866bd
children 6fc412e59214
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10044
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1 /**
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
2 * @file dialog.c Dialog functions
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
3 *
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
4 * gaim
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
5 *
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
6 * Gaim is the legal property of its developers, whose names are too numerous
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
7 * to list here. Please refer to the COPYRIGHT file distributed with this
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
8 * source distribution.
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
9 *
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
13 * (at your option) any later version.
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
14 *
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
18 * GNU General Public License for more details.
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
19 *
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
23 */
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
24
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
25 #include "msn.h"
12324
90f488e08216 [gaim-migrate @ 14628]
Richard Laager <rlaager@wiktel.com>
parents: 12323
diff changeset
26 #include "dialog.h"
10044
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
27
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
28 typedef struct
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
29 {
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
30 GaimConnection *gc;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
31 char *who;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
32 char *group;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
33 gboolean add;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
34
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
35 } MsnAddRemData;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
36
13905
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
37 /* Remove the buddy referenced by the MsnAddRemData before the serverside list is changed.
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
38 * If the buddy will be added, he'll be added back; if he will be removed, he won't be. */
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
39 static void
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
40 msn_complete_sync_issue(MsnAddRemData *data)
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
41 {
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
42 GaimBuddy *buddy;
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
43 GaimGroup *group = NULL;
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
44
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
45 if (data->group != NULL)
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
46 group = gaim_find_group(data->group);
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
47
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
48 if (group != NULL)
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
49 buddy = gaim_find_buddy_in_group(gaim_connection_get_account(data->gc), data->who, group);
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
50 else
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
51 buddy = gaim_find_buddy(gaim_connection_get_account(data->gc), data->who);
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
52
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
53 if (buddy != NULL)
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
54 gaim_blist_remove_buddy(buddy);
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
55 }
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
56
10044
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
57 static void
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
58 msn_add_cb(MsnAddRemData *data)
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
59 {
13905
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
60 msn_complete_sync_issue(data);
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
61
10044
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
62 if (g_list_find(gaim_connections_get_all(), data->gc) != NULL)
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
63 {
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
64 MsnSession *session = data->gc->proto_data;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
65 MsnUserList *userlist = session->userlist;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
66
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
67 msn_userlist_add_buddy(userlist, data->who, MSN_LIST_FL, data->group);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
68 }
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
69
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
70 if (data->group != NULL)
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
71 g_free(data->group);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
72
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
73 g_free(data->who);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
74 g_free(data);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
75 }
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
76
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
77 static void
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
78 msn_rem_cb(MsnAddRemData *data)
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
79 {
13905
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
80 msn_complete_sync_issue(data);
4e44ecb866bd [gaim-migrate @ 16394]
Evan Schoenberg <evan.s@dreskin.net>
parents: 12324
diff changeset
81
10044
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
82 if (g_list_find(gaim_connections_get_all(), data->gc) != NULL)
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
83 {
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
84 MsnSession *session = data->gc->proto_data;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
85 MsnUserList *userlist = session->userlist;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
86
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
87 msn_userlist_rem_buddy(userlist, data->who, MSN_LIST_FL, data->group);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
88 }
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
89
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
90 if (data->group != NULL)
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
91 g_free(data->group);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
92
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
93 g_free(data->who);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
94 g_free(data);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
95 }
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
96
12324
90f488e08216 [gaim-migrate @ 14628]
Richard Laager <rlaager@wiktel.com>
parents: 12323
diff changeset
97 void
10044
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
98 msn_show_sync_issue(MsnSession *session, const char *passport,
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
99 const char *group_name)
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
100 {
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
101 GaimConnection *gc;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
102 GaimAccount *account;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
103 MsnAddRemData *data;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
104 char *msg, *reason;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
105
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
106 account = session->account;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
107 gc = gaim_account_get_connection(account);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
108
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
109 data = g_new0(MsnAddRemData, 1);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
110 data->who = g_strdup(passport);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
111 data->group = g_strdup(group_name);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
112 data->gc = gc;
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
113
10310
926bd0e5f487 [gaim-migrate @ 11504]
Mark Doliner <mark@kingant.net>
parents: 10116
diff changeset
114 msg = g_strdup_printf(_("Buddy list synchronization issue in %s (%s)"),
10044
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
115 gaim_account_get_username(account),
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
116 gaim_account_get_protocol_name(account));
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
117
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
118 if (group_name != NULL)
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
119 {
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
120 reason = g_strdup_printf(_("%s on the local list is "
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
121 "inside the group \"%s\" but not on "
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
122 "the server list. "
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
123 "Do you want this buddy to be added?"),
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
124 passport, group_name);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
125 }
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
126 else
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
127 {
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
128 reason = g_strdup_printf(_("%s is on the local list but "
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
129 "not on the server list. "
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
130 "Do you want this buddy to be added?"),
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
131 passport);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
132 }
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
133
10116
9f358a718f38 [gaim-migrate @ 11153]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10044
diff changeset
134 gaim_request_action(gc, NULL, msg, reason, GAIM_DEFAULT_ACTION_NONE,
9f358a718f38 [gaim-migrate @ 11153]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10044
diff changeset
135 data, 2,
10044
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
136 _("Yes"), G_CALLBACK(msn_add_cb),
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
137 _("No"), G_CALLBACK(msn_rem_cb));
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
138
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
139 g_free(reason);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
140 g_free(msg);
86a6d78b070b [gaim-migrate @ 11003]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
141 }