libpurple/protocols/oscar/clientlogin.c

Sat, 30 Oct 2010 21:36:34 +0000

author
Ivan Komarov <ivan.komarov@pidgin.im>
date
Sat, 30 Oct 2010 21:36:34 +0000
changeset 30888
21a931e7747e
parent 30857
1a7e2da2ab01
child 31088
7b3be28cc5e7
permissions
-rw-r--r--

Merged everything related to ICQ server changes.

applied changes from b6d7712e90b68610df3bd2d8cbaf46d94c8b3794
through d849dc2a852a4ffdd345a150f0b88ab37de36e36

applied changes from 7aedaac3ed815cab16d758474a829d5ec5a59e4b
through d849dc2a852a4ffdd345a150f0b88ab37de36e36

27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1 /*
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
2 * Purple's oscar protocol plugin
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
3 * This file is the legal property of its developers.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
4 * Please see the AUTHORS file distributed alongside this file.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
5 *
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
6 * This library is free software; you can redistribute it and/or
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
8 * License as published by the Free Software Foundation; either
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
9 * version 2 of the License, or (at your option) any later version.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
10 *
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
11 * This library is distributed in the hope that it will be useful,
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
14 * Lesser General Public License for more details.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
15 *
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
17 * License along with this library; if not, write to the Free Software
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
19 */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
20
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
21 /**
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
22 * This file implements AIM's clientLogin procedure for authenticating
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
23 * users. This replaces the older MD5-based and XOR-based
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
24 * authentication methods that use SNAC family 0x0017.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
25 *
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
26 * This doesn't use SNACs or FLAPs at all. It makes http and https
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
27 * POSTs to AOL to validate the user based on the password they
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
28 * provided to us. Upon successful authentication we request a
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
29 * connection to the BOS server by calling startOSCARsession. The
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
30 * AOL server gives us the hostname and port number to use, as well
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
31 * as the cookie to use to authenticate to the BOS server. And then
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
32 * everything else is the same as with BUCP.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
33 *
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
34 * For details, see:
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
35 * http://dev.aol.com/aim/oscar/#AUTH
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
36 * http://dev.aol.com/authentication_for_clients
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
37 */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
38
29106
51c7b2177e42 Fix all the remaining files for which internal.h doesn't end up being the first include.
Paul Aurich <darkrain42@pidgin.im>
parents: 29100
diff changeset
39 #include "oscar.h"
51c7b2177e42 Fix all the remaining files for which internal.h doesn't end up being the first include.
Paul Aurich <darkrain42@pidgin.im>
parents: 29100
diff changeset
40 #include "oscarcommon.h"
51c7b2177e42 Fix all the remaining files for which internal.h doesn't end up being the first include.
Paul Aurich <darkrain42@pidgin.im>
parents: 29100
diff changeset
41
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
42 #include "cipher.h"
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
43 #include "core.h"
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
44
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
45 #define AIM_LOGIN_HOST "api.screenname.aol.com"
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
46 #define ICQ_LOGIN_HOST "api.login.icq.net"
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
47
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
48 #define AIM_API_HOST "api.oscar.aol.com"
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
49 #define ICQ_API_HOST "api.icq.net"
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
50
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
51 #define CLIENT_LOGIN_PAGE "/auth/clientLogin"
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
52 #define START_OSCAR_SESSION_PAGE "/aim/startOSCARSession"
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
53
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
54 #define HTTPS_FORMAT_URL(host, page) "https://" host page
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
55
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
56 static const gchar *client_login_urls[] = {
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
57 HTTPS_FORMAT_URL(AIM_LOGIN_HOST, CLIENT_LOGIN_PAGE),
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
58 HTTPS_FORMAT_URL(ICQ_LOGIN_HOST, CLIENT_LOGIN_PAGE),
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
59 };
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
60
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
61 static const gchar *start_oscar_session_urls[] = {
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
62 HTTPS_FORMAT_URL(AIM_API_HOST, START_OSCAR_SESSION_PAGE),
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
63 HTTPS_FORMAT_URL(ICQ_API_HOST, START_OSCAR_SESSION_PAGE),
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
64 };
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
65
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
66 static const gchar *get_client_login_url(OscarData *od)
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
67 {
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
68 return client_login_urls[od->icq];
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
69 }
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
70
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
71 static const gchar *get_start_oscar_session_url(OscarData *od)
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
72 {
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
73 return start_oscar_session_urls[od->icq];
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
74 }
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
75
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
76 /*
27684
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
77 * Using clientLogin requires a developer ID. This key is for libpurple.
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
78 * It is the default key for all libpurple-based clients. AOL encourages
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
79 * UIs (especially ones with lots of users) to override this with their
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
80 * own key. This key is owned by the AIM account "markdoliner"
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
81 *
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
82 * Keys can be managed at http://developer.aim.com/manageKeys.jsp
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
83 */
27684
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
84 #define DEFAULT_CLIENT_KEY "ma15d7JTxbmVG-RP"
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
85
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
86 static const char *get_client_key(OscarData *od)
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
87 {
27686
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 27684
diff changeset
88 return oscar_get_ui_info_string(
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 27684
diff changeset
89 od->icq ? "prpl-icq-clientkey" : "prpl-aim-clientkey",
c790e9057b4e Create a oscar_get_ui_info_string() function that looks up a value in the
Mark Doliner <markdoliner@pidgin.im>
parents: 27684
diff changeset
90 DEFAULT_CLIENT_KEY);
27684
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
91 }
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
92
29233
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
93 static gchar *generate_error_message(xmlnode *resp, const char *url)
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
94 {
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
95 xmlnode *text;
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
96 gchar *err = NULL;
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
97 gchar *details = NULL;
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
98
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
99 if (resp && (text = xmlnode_get_child(resp, "statusText"))) {
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
100 details = xmlnode_get_data(text);
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
101 }
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
102
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
103 if (details && *details) {
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
104 err = g_strdup_printf(_("Received unexpected response from %s: %s"), url, details);
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
105 } else {
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
106 err = g_strdup_printf(_("Received unexpected response from %s"), url);
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
107 }
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
108
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
109 g_free(details);
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
110 return err;
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
111 }
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
112
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
113 /**
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
114 * @return A null-terminated base64 encoded version of the HMAC
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
115 * calculated using the given key and data.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
116 */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
117 static gchar *hmac_sha256(const char *key, const char *message)
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
118 {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
119 PurpleCipherContext *context;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
120 guchar digest[32];
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
121
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
122 context = purple_cipher_context_new_by_name("hmac", NULL);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
123 purple_cipher_context_set_option(context, "hash", "sha256");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
124 purple_cipher_context_set_key(context, (guchar *)key);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
125 purple_cipher_context_append(context, (guchar *)message, strlen(message));
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
126 purple_cipher_context_digest(context, sizeof(digest), digest, NULL);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
127 purple_cipher_context_destroy(context);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
128
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
129 return purple_base64_encode(digest, sizeof(digest));
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
130 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
131
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
132 /**
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
133 * @return A base-64 encoded HMAC-SHA256 signature created using the
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
134 * technique documented at
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
135 * http://dev.aol.com/authentication_for_clients#signing
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
136 */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
137 static gchar *generate_signature(const char *method, const char *url, const char *parameters, const char *session_key)
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
138 {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
139 char *encoded_url, *signature_base_string, *signature;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
140 const char *encoded_parameters;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
141
28538
fb879aa298ee Change purple_url_encode() to not encode . _ - ~ because it's not
Mark Doliner <markdoliner@pidgin.im>
parents: 28274
diff changeset
142 encoded_url = g_strdup(purple_url_encode(url));
fb879aa298ee Change purple_url_encode() to not encode . _ - ~ because it's not
Mark Doliner <markdoliner@pidgin.im>
parents: 28274
diff changeset
143 encoded_parameters = purple_url_encode(parameters);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
144 signature_base_string = g_strdup_printf("%s&%s&%s",
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
145 method, encoded_url, encoded_parameters);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
146 g_free(encoded_url);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
147
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
148 signature = hmac_sha256(session_key, signature_base_string);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
149 g_free(signature_base_string);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
150
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
151 return signature;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
152 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
153
28824
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
154 static gboolean parse_start_oscar_session_response(PurpleConnection *gc, const gchar *response, gsize response_len, char **host, unsigned short *port, char **cookie, char **tls_certname)
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
155 {
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
156 OscarData *od = purple_connection_get_protocol_data(gc);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
157 xmlnode *response_node, *tmp_node, *data_node;
28824
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
158 xmlnode *host_node = NULL, *port_node = NULL, *cookie_node = NULL, *tls_node = NULL;
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
159 gboolean use_tls;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
160 char *tmp;
28837
e9b208719e54 oscar: According to the online docs, statusCode 607 is rate limit (confirmed
Paul Aurich <darkrain42@pidgin.im>
parents: 28825
diff changeset
161 guint code;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
162
28824
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
163 use_tls = purple_account_get_bool(purple_connection_get_account(gc), "use_ssl", OSCAR_DEFAULT_USE_SSL);
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
164
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
165 /* Parse the response as XML */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
166 response_node = xmlnode_from_str(response, response_len);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
167 if (response_node == NULL)
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
168 {
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
169 char *msg;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
170 purple_debug_error("oscar", "startOSCARSession could not parse "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
171 "response as XML: %s\n", response);
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
172 /* Note to translators: %s in this string is a URL */
29233
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
173 msg = generate_error_message(response_node,
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
174 get_start_oscar_session_url(od));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
175 purple_connection_error_reason(gc,
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
176 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
177 g_free(msg);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
178 return FALSE;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
179 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
180
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
181 /* Grab the necessary XML nodes */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
182 tmp_node = xmlnode_get_child(response_node, "statusCode");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
183 data_node = xmlnode_get_child(response_node, "data");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
184 if (data_node != NULL) {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
185 host_node = xmlnode_get_child(data_node, "host");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
186 port_node = xmlnode_get_child(data_node, "port");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
187 cookie_node = xmlnode_get_child(data_node, "cookie");
28824
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
188 tls_node = xmlnode_get_child(data_node, "tlsCertName");
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
189 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
190
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
191 /* Make sure we have a status code */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
192 if (tmp_node == NULL || (tmp = xmlnode_get_data_unescaped(tmp_node)) == NULL) {
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
193 char *msg;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
194 purple_debug_error("oscar", "startOSCARSession response was "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
195 "missing statusCode: %s\n", response);
29233
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
196 msg = generate_error_message(response_node,
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
197 get_start_oscar_session_url(od));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
198 purple_connection_error_reason(gc,
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
199 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
200 g_free(msg);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
201 xmlnode_free(response_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
202 return FALSE;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
203 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
204
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
205 /* Make sure the status code was 200 */
28837
e9b208719e54 oscar: According to the online docs, statusCode 607 is rate limit (confirmed
Paul Aurich <darkrain42@pidgin.im>
parents: 28825
diff changeset
206 code = atoi(tmp);
e9b208719e54 oscar: According to the online docs, statusCode 607 is rate limit (confirmed
Paul Aurich <darkrain42@pidgin.im>
parents: 28825
diff changeset
207 if (code != 200)
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
208 {
29737
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
209 xmlnode *status_detail_node;
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
210 guint status_detail = 0;
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
211
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
212 status_detail_node = xmlnode_get_child(response_node,
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
213 "statusDetailCode");
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
214 if (status_detail_node) {
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
215 gchar *data = xmlnode_get_data(status_detail_node);
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
216 if (data) {
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
217 status_detail = atoi(data);
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
218 g_free(data);
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
219 }
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
220 }
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
221
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
222 purple_debug_error("oscar", "startOSCARSession response statusCode "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
223 "was %s: %s\n", tmp, response);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
224
29737
0adc09e12a5a 401/1014 is a bad signature (it's what I've been getting while testing startOSCARSession over https).
Paul Aurich <darkrain42@pidgin.im>
parents: 29734
diff changeset
225 if ((code == 401 && status_detail != 1014) || code == 607)
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
226 purple_connection_error_reason(gc,
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
227 PURPLE_CONNECTION_ERROR_OTHER_ERROR,
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
228 _("You have been connecting and disconnecting too "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
229 "frequently. Wait ten minutes and try again. If "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
230 "you continue to try, you will need to wait even "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
231 "longer."));
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
232 else {
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
233 char *msg;
29233
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
234 msg = generate_error_message(response_node,
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
235 get_start_oscar_session_url(od));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
236 purple_connection_error_reason(gc,
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
237 PURPLE_CONNECTION_ERROR_OTHER_ERROR, msg);
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
238 g_free(msg);
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
239 }
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
240
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
241 g_free(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
242 xmlnode_free(response_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
243 return FALSE;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
244 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
245 g_free(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
246
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
247 /* Make sure we have everything else */
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
248 if (data_node == NULL || host_node == NULL || port_node == NULL || cookie_node == NULL)
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
249 {
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
250 char *msg;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
251 purple_debug_error("oscar", "startOSCARSession response was missing "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
252 "something: %s\n", response);
29233
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
253 msg = generate_error_message(response_node,
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
254 get_start_oscar_session_url(od));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
255 purple_connection_error_reason(gc,
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
256 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
257 g_free(msg);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
258 xmlnode_free(response_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
259 return FALSE;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
260 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
261
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
262 /* Extract data from the XML */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
263 *host = xmlnode_get_data_unescaped(host_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
264 tmp = xmlnode_get_data_unescaped(port_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
265 *cookie = xmlnode_get_data_unescaped(cookie_node);
28824
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
266
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
267 if (use_tls) {
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
268 if (tls_node != NULL) {
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
269 *tls_certname = xmlnode_get_data_unescaped(tls_node);
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
270 } else {
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
271 purple_debug_warning("oscar", "useTls was 1, but we haven't received a tlsCertName to use. We will not do SSL to BOS.\n");
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
272 }
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
273 }
28824
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
274
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
275 if (*host == NULL || **host == '\0' || tmp == NULL || *tmp == '\0' || *cookie == NULL || **cookie == '\0')
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
276 {
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
277 char *msg;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
278 purple_debug_error("oscar", "startOSCARSession response was missing "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
279 "something: %s\n", response);
29233
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
280 msg = generate_error_message(response_node,
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
281 get_start_oscar_session_url(od));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
282 purple_connection_error_reason(gc,
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
283 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
284 g_free(msg);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
285 g_free(*host);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
286 g_free(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
287 g_free(*cookie);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
288 xmlnode_free(response_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
289 return FALSE;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
290 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
291
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
292 *port = atoi(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
293 g_free(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
294
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
295 return TRUE;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
296 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
297
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
298 static void start_oscar_session_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message)
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
299 {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
300 OscarData *od;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
301 PurpleConnection *gc;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
302 char *host, *cookie;
28824
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
303 char *tls_certname = NULL;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
304 unsigned short port;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
305 guint8 *cookiedata;
30857
1a7e2da2ab01 Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents: 30004
diff changeset
306 gsize cookiedata_len = 0;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
307
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
308 od = user_data;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
309 gc = od->gc;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
310
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
311 od->url_data = NULL;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
312
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
313 if (error_message != NULL || len == 0) {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
314 gchar *tmp;
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
315 /* Note to translators: The first %s is a URL, the second is an
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
316 error message. */
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
317 tmp = g_strdup_printf(_("Error requesting %s: %s"),
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
318 get_start_oscar_session_url(od), error_message);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
319 purple_connection_error_reason(gc,
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
320 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
321 g_free(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
322 return;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
323 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
324
28824
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
325 if (!parse_start_oscar_session_response(gc, url_text, len, &host, &port, &cookie, &tls_certname))
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
326 return;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
327
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
328 cookiedata = purple_base64_decode(cookie, &cookiedata_len);
28824
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
329 oscar_connect_to_bos(gc, od, host, port, cookiedata, cookiedata_len, tls_certname);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
330 g_free(cookiedata);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
331
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
332 g_free(host);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
333 g_free(cookie);
28824
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
334 g_free(tls_certname);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
335 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
336
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
337 static void send_start_oscar_session(OscarData *od, const char *token, const char *session_key, time_t hosttime)
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
338 {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
339 char *query_string, *signature, *url;
29734
0af639f8fa3b Allow clientLogin POST/GETs to use a configured proxy.
Paul Aurich <darkrain42@pidgin.im>
parents: 29733
diff changeset
340 PurpleAccount *account;
0af639f8fa3b Allow clientLogin POST/GETs to use a configured proxy.
Paul Aurich <darkrain42@pidgin.im>
parents: 29733
diff changeset
341 gboolean use_tls;
0af639f8fa3b Allow clientLogin POST/GETs to use a configured proxy.
Paul Aurich <darkrain42@pidgin.im>
parents: 29733
diff changeset
342
0af639f8fa3b Allow clientLogin POST/GETs to use a configured proxy.
Paul Aurich <darkrain42@pidgin.im>
parents: 29733
diff changeset
343 account = purple_connection_get_account(od->gc);
0af639f8fa3b Allow clientLogin POST/GETs to use a configured proxy.
Paul Aurich <darkrain42@pidgin.im>
parents: 29733
diff changeset
344 use_tls = purple_account_get_bool(account, "use_ssl", OSCAR_DEFAULT_USE_SSL);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
345
29071
a1e2c4649516 This magic number is documented in oscar.h, but it makes sense to
Mark Doliner <markdoliner@pidgin.im>
parents: 29070
diff changeset
346 /*
a1e2c4649516 This magic number is documented in oscar.h, but it makes sense to
Mark Doliner <markdoliner@pidgin.im>
parents: 29070
diff changeset
347 * Construct the GET parameters. 0x00000611 is the distid given to
a1e2c4649516 This magic number is documented in oscar.h, but it makes sense to
Mark Doliner <markdoliner@pidgin.im>
parents: 29070
diff changeset
348 * us by AOL for use as the default libpurple distid.
a1e2c4649516 This magic number is documented in oscar.h, but it makes sense to
Mark Doliner <markdoliner@pidgin.im>
parents: 29070
diff changeset
349 */
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
350 query_string = g_strdup_printf("a=%s"
29070
a255a2bc015b Send our distid when calling startOSCARSession, as request by AOL
Mark Doliner <markdoliner@pidgin.im>
parents: 28837
diff changeset
351 "&distId=%d"
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
352 "&f=xml"
27684
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
353 "&k=%s"
27705
06cdb9c6366f Fix this compiler warning:
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 27686
diff changeset
354 "&ts=%" PURPLE_TIME_T_MODIFIER
28824
e23d22216f58 oscar: Properly support TLS when using clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 28538
diff changeset
355 "&useTLS=%d",
29070
a255a2bc015b Send our distid when calling startOSCARSession, as request by AOL
Mark Doliner <markdoliner@pidgin.im>
parents: 28837
diff changeset
356 purple_url_encode(token),
a255a2bc015b Send our distid when calling startOSCARSession, as request by AOL
Mark Doliner <markdoliner@pidgin.im>
parents: 28837
diff changeset
357 oscar_get_ui_info_int(od->icq ? "prpl-icq-distid"
a255a2bc015b Send our distid when calling startOSCARSession, as request by AOL
Mark Doliner <markdoliner@pidgin.im>
parents: 28837
diff changeset
358 : "prpl-aim-distid", 0x00000611),
a255a2bc015b Send our distid when calling startOSCARSession, as request by AOL
Mark Doliner <markdoliner@pidgin.im>
parents: 28837
diff changeset
359 get_client_key(od), hosttime, use_tls);
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
360 signature = generate_signature("GET", get_start_oscar_session_url(od),
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
361 query_string, session_key);
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
362 url = g_strdup_printf("%s?%s&sig_sha256=%s", get_start_oscar_session_url(od),
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
363 query_string, signature);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
364 g_free(query_string);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
365 g_free(signature);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
366
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
367 /* Make the request */
29734
0af639f8fa3b Allow clientLogin POST/GETs to use a configured proxy.
Paul Aurich <darkrain42@pidgin.im>
parents: 29733
diff changeset
368 od->url_data = purple_util_fetch_url_request_len_with_account(account,
0af639f8fa3b Allow clientLogin POST/GETs to use a configured proxy.
Paul Aurich <darkrain42@pidgin.im>
parents: 29733
diff changeset
369 url, TRUE, NULL, FALSE, NULL, FALSE, -1,
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
370 start_oscar_session_cb, od);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
371 g_free(url);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
372 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
373
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
374 /**
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
375 * This function parses the given response from a clientLogin request
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
376 * and extracts the useful information.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
377 *
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
378 * @param gc The PurpleConnection. If the response data does
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
379 * not indicate then purple_connection_error_reason()
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
380 * will be called to close this connection.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
381 * @param response The response data from the clientLogin request.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
382 * @param response_len The length of the above response, or -1 if
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
383 * @response is NUL terminated.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
384 * @param token If parsing was successful then this will be set to
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
385 * a newly allocated string containing the token. The
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
386 * caller should g_free this string when it is finished
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
387 * with it. On failure this value will be untouched.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
388 * @param secret If parsing was successful then this will be set to
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
389 * a newly allocated string containing the secret. The
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
390 * caller should g_free this string when it is finished
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
391 * with it. On failure this value will be untouched.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
392 * @param hosttime If parsing was successful then this will be set to
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
393 * the time on the OpenAuth Server in seconds since the
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
394 * Unix epoch. On failure this value will be untouched.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
395 *
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
396 * @return TRUE if the request was successful and we were able to
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
397 * extract all info we need. Otherwise FALSE.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
398 */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
399 static gboolean parse_client_login_response(PurpleConnection *gc, const gchar *response, gsize response_len, char **token, char **secret, time_t *hosttime)
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
400 {
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
401 OscarData *od = purple_connection_get_protocol_data(gc);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
402 xmlnode *response_node, *tmp_node, *data_node;
27442
754d246cd697 Silence some warnings from gcc on OS X. None of these were actually valid.
Paul Aurich <darkrain42@pidgin.im>
parents: 27414
diff changeset
403 xmlnode *secret_node = NULL, *hosttime_node = NULL, *token_node = NULL, *tokena_node = NULL;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
404 char *tmp;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
405
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
406 /* Parse the response as XML */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
407 response_node = xmlnode_from_str(response, response_len);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
408 if (response_node == NULL)
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
409 {
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
410 char *msg;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
411 purple_debug_error("oscar", "clientLogin could not parse "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
412 "response as XML: %s\n", response);
29233
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
413 msg = generate_error_message(response_node,
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
414 get_client_login_url(od));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
415 purple_connection_error_reason(gc,
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
416 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
417 g_free(msg);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
418 return FALSE;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
419 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
420
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
421 /* Grab the necessary XML nodes */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
422 tmp_node = xmlnode_get_child(response_node, "statusCode");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
423 data_node = xmlnode_get_child(response_node, "data");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
424 if (data_node != NULL) {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
425 secret_node = xmlnode_get_child(data_node, "sessionSecret");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
426 hosttime_node = xmlnode_get_child(data_node, "hostTime");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
427 token_node = xmlnode_get_child(data_node, "token");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
428 if (token_node != NULL)
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
429 tokena_node = xmlnode_get_child(token_node, "a");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
430 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
431
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
432 /* Make sure we have a status code */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
433 if (tmp_node == NULL || (tmp = xmlnode_get_data_unescaped(tmp_node)) == NULL) {
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
434 char *msg;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
435 purple_debug_error("oscar", "clientLogin response was "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
436 "missing statusCode: %s\n", response);
29233
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
437 msg = generate_error_message(response_node,
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
438 get_client_login_url(od));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
439 purple_connection_error_reason(gc,
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
440 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
441 g_free(msg);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
442 xmlnode_free(response_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
443 return FALSE;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
444 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
445
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
446 /* Make sure the status code was 200 */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
447 if (strcmp(tmp, "200") != 0)
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
448 {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
449 int status_code, status_detail_code = 0;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
450
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
451 status_code = atoi(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
452 g_free(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
453 tmp_node = xmlnode_get_child(response_node, "statusDetailCode");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
454 if (tmp_node != NULL && (tmp = xmlnode_get_data_unescaped(tmp_node)) != NULL) {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
455 status_detail_code = atoi(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
456 g_free(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
457 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
458
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
459 purple_debug_error("oscar", "clientLogin response statusCode "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
460 "was %d (%d): %s\n", status_code, status_detail_code, response);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
461
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
462 if (status_code == 330 && status_detail_code == 3011) {
30004
7de569e20a6b oscar: Forget un-remembered passwords on Incorrect Password w/ clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 29983
diff changeset
463 PurpleAccount *account = purple_connection_get_account(gc);
7de569e20a6b oscar: Forget un-remembered passwords on Incorrect Password w/ clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 29983
diff changeset
464 if (!purple_account_get_remember_password(account))
7de569e20a6b oscar: Forget un-remembered passwords on Incorrect Password w/ clientLogin.
Paul Aurich <darkrain42@pidgin.im>
parents: 29983
diff changeset
465 purple_account_set_password(account, NULL);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
466 purple_connection_error_reason(gc,
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
467 PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED,
27635
0cd19038c417 More uniformity among disconnect error messages
Mark Doliner <markdoliner@pidgin.im>
parents: 27442
diff changeset
468 _("Incorrect password"));
29317
d46d080a42cc Add back Paul's error message from revision 315ffdf6a4550e47b2bc6e5a29af0e47e107abc6
Mark Doliner <markdoliner@pidgin.im>
parents: 29233
diff changeset
469 } else if (status_code == 330 && status_detail_code == 3015) {
d46d080a42cc Add back Paul's error message from revision 315ffdf6a4550e47b2bc6e5a29af0e47e107abc6
Mark Doliner <markdoliner@pidgin.im>
parents: 29233
diff changeset
470 purple_connection_error_reason(gc,
d46d080a42cc Add back Paul's error message from revision 315ffdf6a4550e47b2bc6e5a29af0e47e107abc6
Mark Doliner <markdoliner@pidgin.im>
parents: 29233
diff changeset
471 PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED,
d46d080a42cc Add back Paul's error message from revision 315ffdf6a4550e47b2bc6e5a29af0e47e107abc6
Mark Doliner <markdoliner@pidgin.im>
parents: 29233
diff changeset
472 _("Server requested that you fill out a CAPTCHA in order to "
d46d080a42cc Add back Paul's error message from revision 315ffdf6a4550e47b2bc6e5a29af0e47e107abc6
Mark Doliner <markdoliner@pidgin.im>
parents: 29233
diff changeset
473 "sign in, but this client does not currently support CAPTCHAs."));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
474 } else if (status_code == 401 && status_detail_code == 3019) {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
475 purple_connection_error_reason(gc,
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
476 PURPLE_CONNECTION_ERROR_OTHER_ERROR,
27635
0cd19038c417 More uniformity among disconnect error messages
Mark Doliner <markdoliner@pidgin.im>
parents: 27442
diff changeset
477 _("AOL does not allow your screen name to authenticate here"));
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
478 } else {
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
479 char *msg;
29233
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
480 msg = generate_error_message(response_node,
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
481 get_client_login_url(od));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
482 purple_connection_error_reason(gc,
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
483 PURPLE_CONNECTION_ERROR_OTHER_ERROR, msg);
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
484 g_free(msg);
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
485 }
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
486
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
487 xmlnode_free(response_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
488 return FALSE;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
489 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
490 g_free(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
491
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
492 /* Make sure we have everything else */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
493 if (data_node == NULL || secret_node == NULL ||
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
494 token_node == NULL || tokena_node == NULL)
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
495 {
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
496 char *msg;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
497 purple_debug_error("oscar", "clientLogin response was missing "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
498 "something: %s\n", response);
29233
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
499 msg = generate_error_message(response_node,
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
500 get_client_login_url(od));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
501 purple_connection_error_reason(gc,
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
502 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
503 g_free(msg);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
504 xmlnode_free(response_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
505 return FALSE;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
506 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
507
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
508 /* Extract data from the XML */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
509 *token = xmlnode_get_data_unescaped(tokena_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
510 *secret = xmlnode_get_data_unescaped(secret_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
511 tmp = xmlnode_get_data_unescaped(hosttime_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
512 if (*token == NULL || **token == '\0' || *secret == NULL || **secret == '\0' || tmp == NULL || *tmp == '\0')
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
513 {
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
514 char *msg;
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
515 purple_debug_error("oscar", "clientLogin response was missing "
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
516 "something: %s\n", response);
29233
a686b1d2f50f oscar: Try to make the error message more verbose.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 29106
diff changeset
517 msg = generate_error_message(response_node,
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
518 get_client_login_url(od));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
519 purple_connection_error_reason(gc,
28274
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
520 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg);
4eca816a16a2 Make the strings in this file more localizable
Mark Doliner <markdoliner@pidgin.im>
parents: 27705
diff changeset
521 g_free(msg);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
522 g_free(*token);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
523 g_free(*secret);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
524 g_free(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
525 xmlnode_free(response_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
526 return FALSE;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
527 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
528
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
529 *hosttime = strtol(tmp, NULL, 10);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
530 g_free(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
531
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
532 xmlnode_free(response_node);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
533
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
534 return TRUE;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
535 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
536
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
537 static void client_login_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message)
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
538 {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
539 OscarData *od;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
540 PurpleConnection *gc;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
541 char *token, *secret, *session_key;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
542 time_t hosttime;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
543 int password_len;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
544 char *password;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
545
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
546 od = user_data;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
547 gc = od->gc;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
548
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
549 od->url_data = NULL;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
550
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
551 if (error_message != NULL || len == 0) {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
552 gchar *tmp;
29983
9b14edc28e44 oscar: Fix a clientLogin error crash (null printf bug). Closes #11662
Paul Aurich <darkrain42@pidgin.im>
parents: 29737
diff changeset
553 if (error_message != NULL)
9b14edc28e44 oscar: Fix a clientLogin error crash (null printf bug). Closes #11662
Paul Aurich <darkrain42@pidgin.im>
parents: 29737
diff changeset
554 tmp = g_strdup_printf(_("Error requesting %s: %s"),
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
555 get_client_login_url(od), error_message);
29983
9b14edc28e44 oscar: Fix a clientLogin error crash (null printf bug). Closes #11662
Paul Aurich <darkrain42@pidgin.im>
parents: 29737
diff changeset
556 else
9b14edc28e44 oscar: Fix a clientLogin error crash (null printf bug). Closes #11662
Paul Aurich <darkrain42@pidgin.im>
parents: 29737
diff changeset
557 tmp = g_strdup_printf(_("Error requesting %s"),
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
558 get_client_login_url(od));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
559 purple_connection_error_reason(gc,
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
560 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
561 g_free(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
562 return;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
563 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
564
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
565 if (!parse_client_login_response(gc, url_text, len, &token, &secret, &hosttime))
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
566 return;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
567
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
568 password_len = strlen(purple_connection_get_password(gc));
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
569 password = g_strdup_printf("%.*s",
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
570 od->icq ? MIN(password_len, MAXICQPASSLEN) : password_len,
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
571 purple_connection_get_password(gc));
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
572 session_key = hmac_sha256(password, secret);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
573 g_free(password);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
574 g_free(secret);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
575
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
576 send_start_oscar_session(od, token, session_key, hosttime);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
577
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
578 g_free(token);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
579 g_free(session_key);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
580 }
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
581
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
582 /**
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
583 * This function sends a request to
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
584 * https://api.screenname.aol.com/auth/clientLogin with the user's
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
585 * username and password and receives the user's session key, which is
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
586 * used to request a connection to the BOSS server.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
587 */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
588 void send_client_login(OscarData *od, const char *username)
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
589 {
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
590 PurpleConnection *gc;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
591 GString *request, *body;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
592 const char *tmp;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
593 char *password;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
594 int password_len;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
595
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
596 gc = od->gc;
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
597
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
598 /*
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
599 * We truncate ICQ passwords to 8 characters. There is probably a
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
600 * limit for AIM passwords, too, but we really only need to do
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
601 * this for ICQ because older ICQ clients let you enter a password
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
602 * as long as you wanted and then they truncated it silently.
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
603 *
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
604 * And we can truncate based on the number of bytes and not the
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
605 * number of characters because passwords for AIM and ICQ are
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
606 * supposed to be plain ASCII (I don't know if this has always been
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
607 * the case, though).
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
608 */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
609 tmp = purple_connection_get_password(gc);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
610 password_len = strlen(tmp);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
611 password = g_strndup(tmp, od->icq ? MIN(password_len, MAXICQPASSLEN) : password_len);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
612
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
613 /* Construct the body of the HTTP POST request */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
614 body = g_string_new("");
27684
f85539a9fc3a Allow UIs to specify their own AOL client key
Mark Doliner <markdoliner@pidgin.im>
parents: 27635
diff changeset
615 g_string_append_printf(body, "devId=%s", get_client_key(od));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
616 g_string_append_printf(body, "&f=xml");
28538
fb879aa298ee Change purple_url_encode() to not encode . _ - ~ because it's not
Mark Doliner <markdoliner@pidgin.im>
parents: 28274
diff changeset
617 g_string_append_printf(body, "&pwd=%s", purple_url_encode(password));
fb879aa298ee Change purple_url_encode() to not encode . _ - ~ because it's not
Mark Doliner <markdoliner@pidgin.im>
parents: 28274
diff changeset
618 g_string_append_printf(body, "&s=%s", purple_url_encode(username));
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
619 g_free(password);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
620
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
621 /* Construct an HTTP POST request */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
622 request = g_string_new("POST /auth/clientLogin HTTP/1.0\r\n"
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
623 "Connection: close\r\n"
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
624 "Accept: */*\r\n");
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
625
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
626 /* Tack on the body */
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
627 g_string_append_printf(request, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n");
27414
b676cf2259c7 Dear Compiler, Shut up!
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 27385
diff changeset
628 g_string_append_printf(request, "Content-Length: %" G_GSIZE_FORMAT "\r\n\r\n", body->len);
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
629 g_string_append_len(request, body->str, body->len);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
630 g_string_free(body, TRUE);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
631
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
632 /* Send the POST request */
29734
0af639f8fa3b Allow clientLogin POST/GETs to use a configured proxy.
Paul Aurich <darkrain42@pidgin.im>
parents: 29733
diff changeset
633 od->url_data = purple_util_fetch_url_request_len_with_account(
30888
21a931e7747e Merged everything related to ICQ server changes.
Ivan Komarov <ivan.komarov@pidgin.im>
parents: 30857
diff changeset
634 purple_connection_get_account(gc), get_client_login_url(od),
29734
0af639f8fa3b Allow clientLogin POST/GETs to use a configured proxy.
Paul Aurich <darkrain42@pidgin.im>
parents: 29733
diff changeset
635 TRUE, NULL, FALSE, request->str, FALSE, -1,
27385
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
636 client_login_cb, od);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
637 g_string_free(request, TRUE);
cd0d721fec8f Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
638 }

mercurial