Mercurial > pidgin
annotate libpurple/protocols/oscar/clientlogin.c @ 27381:f541583e31bd
More uniformity among disconnect error messages
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Mon, 06 Jul 2009 09:07:42 +0000 |
parents | a2508ac2e536 |
children | 4813810ea7d4 |
rev | line source |
---|---|
27161
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
1 /* |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
2 * Purple's oscar protocol plugin |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
3 * This file is the legal property of its developers. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
4 * Please see the AUTHORS file distributed alongside this file. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
5 * |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
6 * This library is free software; you can redistribute it and/or |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
7 * modify it under the terms of the GNU Lesser General Public |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
8 * License as published by the Free Software Foundation; either |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
9 * version 2 of the License, or (at your option) any later version. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
10 * |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
11 * This library is distributed in the hope that it will be useful, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
14 * Lesser General Public License for more details. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
15 * |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
16 * You should have received a copy of the GNU Lesser General Public |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
17 * License along with this library; if not, write to the Free Software |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
19 */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
20 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
21 /** |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
22 * This file implements AIM's clientLogin procedure for authenticating |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
23 * users. This replaces the older MD5-based and XOR-based |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
24 * authentication methods that use SNAC family 0x0017. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
25 * |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
26 * This doesn't use SNACs or FLAPs at all. It makes http and https |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
27 * POSTs to AOL to validate the user based on the password they |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
28 * provided to us. Upon successful authentication we request a |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
29 * connection to the BOS server by calling startOSCARsession. The |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
30 * AOL server gives us the hostname and port number to use, as well |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
31 * as the cookie to use to authenticate to the BOS server. And then |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
32 * everything else is the same as with BUCP. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
33 * |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
34 * For details, see: |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
35 * http://dev.aol.com/aim/oscar/#AUTH |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
36 * http://dev.aol.com/authentication_for_clients |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
37 */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
38 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
39 #include "cipher.h" |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
40 #include "core.h" |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
41 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
42 #include "oscar.h" |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
43 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
44 #define URL_CLIENT_LOGIN "https://api.screenname.aol.com/auth/clientLogin" |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
45 #define URL_START_OSCAR_SESSION "http://api.oscar.aol.com/aim/startOSCARSession" |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
46 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
47 /* |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
48 * Using clientLogin requires a developer ID. This dev ID is owned by |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
49 * the AIM account "markdoliner" |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
50 */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
51 #define CLIENT_KEY "ma15d7JTxbmVG-RP" |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
52 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
53 /** |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
54 * This is similar to purple_url_encode() except that it follows |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
55 * RFC3986 a little more closely by not encoding - . _ and ~ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
56 * It also uses capital letters as hex characters because capital |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
57 * letters are required by AOL. The RFC says that capital letters |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
58 * are a SHOULD and that URLs that use capital letters are |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
59 * equivalent to URLs that use small letters. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
60 * |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
61 * TODO: Check if purple_url_encode() can be replaced with this |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
62 * version without breaking anything. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
63 */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
64 static const char *oscar_auth_url_encode(const char *str) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
65 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
66 const char *iter; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
67 static char buf[BUF_LEN]; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
68 char utf_char[6]; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
69 guint i, j = 0; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
70 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
71 g_return_val_if_fail(str != NULL, NULL); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
72 g_return_val_if_fail(g_utf8_validate(str, -1, NULL), NULL); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
73 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
74 iter = str; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
75 for (; *iter && j < (BUF_LEN - 1) ; iter = g_utf8_next_char(iter)) { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
76 gunichar c = g_utf8_get_char(iter); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
77 /* If the character is an ASCII character and is alphanumeric |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
78 * no need to escape */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
79 if ((c < 128 && isalnum(c)) || c =='-' || c == '.' || c == '_' || c == '~') { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
80 buf[j++] = c; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
81 } else { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
82 int bytes = g_unichar_to_utf8(c, utf_char); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
83 for (i = 0; i < bytes; i++) { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
84 if (j > (BUF_LEN - 4)) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
85 break; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
86 sprintf(buf + j, "%%%02X", utf_char[i] & 0xff); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
87 j += 3; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
88 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
89 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
90 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
91 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
92 buf[j] = '\0'; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
93 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
94 return buf; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
95 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
96 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
97 /** |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
98 * @return A null-terminated base64 encoded version of the HMAC |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
99 * calculated using the given key and data. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
100 */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
101 static gchar *hmac_sha256(const char *key, const char *message) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
102 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
103 PurpleCipherContext *context; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
104 guchar digest[32]; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
105 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
106 context = purple_cipher_context_new_by_name("hmac", NULL); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
107 purple_cipher_context_set_option(context, "hash", "sha256"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
108 purple_cipher_context_set_key(context, (guchar *)key); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
109 purple_cipher_context_append(context, (guchar *)message, strlen(message)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
110 purple_cipher_context_digest(context, sizeof(digest), digest, NULL); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
111 purple_cipher_context_destroy(context); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
112 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
113 return purple_base64_encode(digest, sizeof(digest)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
114 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
115 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
116 /** |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
117 * @return A base-64 encoded HMAC-SHA256 signature created using the |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
118 * technique documented at |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
119 * http://dev.aol.com/authentication_for_clients#signing |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
120 */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
121 static gchar *generate_signature(const char *method, const char *url, const char *parameters, const char *session_key) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
122 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
123 char *encoded_url, *signature_base_string, *signature; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
124 const char *encoded_parameters; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
125 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
126 encoded_url = g_strdup(oscar_auth_url_encode(url)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
127 encoded_parameters = oscar_auth_url_encode(parameters); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
128 signature_base_string = g_strdup_printf("%s&%s&%s", |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
129 method, encoded_url, encoded_parameters); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
130 g_free(encoded_url); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
131 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
132 signature = hmac_sha256(session_key, signature_base_string); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
133 g_free(signature_base_string); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
134 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
135 return signature; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
136 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
137 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
138 static gboolean parse_start_oscar_session_response(PurpleConnection *gc, const gchar *response, gsize response_len, char **host, unsigned short *port, char **cookie) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
139 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
140 xmlnode *response_node, *tmp_node, *data_node; |
27200
a2508ac2e536
Silence some warnings from gcc on OS X. None of these were actually valid.
Paul Aurich <paul@darkrain42.org>
parents:
27190
diff
changeset
|
141 xmlnode *host_node = NULL, *port_node = NULL, *cookie_node = NULL; |
27161
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
142 char *tmp; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
143 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
144 /* Parse the response as XML */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
145 response_node = xmlnode_from_str(response, response_len); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
146 if (response_node == NULL) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
147 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
148 purple_debug_error("oscar", "startOSCARSession could not parse " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
149 "response as XML: %s\n", response); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
150 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
151 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
152 _("Received unexpected response from " URL_START_OSCAR_SESSION)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
153 return FALSE; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
154 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
155 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
156 /* Grab the necessary XML nodes */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
157 tmp_node = xmlnode_get_child(response_node, "statusCode"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
158 data_node = xmlnode_get_child(response_node, "data"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
159 if (data_node != NULL) { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
160 host_node = xmlnode_get_child(data_node, "host"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
161 port_node = xmlnode_get_child(data_node, "port"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
162 cookie_node = xmlnode_get_child(data_node, "cookie"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
163 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
164 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
165 /* Make sure we have a status code */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
166 if (tmp_node == NULL || (tmp = xmlnode_get_data_unescaped(tmp_node)) == NULL) { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
167 purple_debug_error("oscar", "startOSCARSession response was " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
168 "missing statusCode: %s\n", response); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
169 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
170 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
171 _("Received unexpected response from " URL_START_OSCAR_SESSION)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
172 xmlnode_free(response_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
173 return FALSE; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
174 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
175 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
176 /* Make sure the status code was 200 */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
177 if (strcmp(tmp, "200") != 0) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
178 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
179 purple_debug_error("oscar", "startOSCARSession response statusCode " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
180 "was %s: %s\n", tmp, response); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
181 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
182 if (strcmp(tmp, "401") == 0) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
183 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
184 PURPLE_CONNECTION_ERROR_OTHER_ERROR, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
185 _("You have been connecting and disconnecting too " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
186 "frequently. Wait ten minutes and try again. If " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
187 "you continue to try, you will need to wait even " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
188 "longer.")); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
189 else |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
190 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
191 PURPLE_CONNECTION_ERROR_OTHER_ERROR, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
192 _("Received unexpected response from " URL_START_OSCAR_SESSION)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
193 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
194 g_free(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
195 xmlnode_free(response_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
196 return FALSE; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
197 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
198 g_free(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
199 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
200 /* Make sure we have everything else */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
201 if (data_node == NULL || host_node == NULL || |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
202 port_node == NULL || cookie_node == NULL) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
203 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
204 purple_debug_error("oscar", "startOSCARSession response was missing " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
205 "something: %s\n", response); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
206 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
207 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
208 _("Received unexpected response from " URL_START_OSCAR_SESSION)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
209 xmlnode_free(response_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
210 return FALSE; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
211 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
212 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
213 /* Extract data from the XML */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
214 *host = xmlnode_get_data_unescaped(host_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
215 tmp = xmlnode_get_data_unescaped(port_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
216 *cookie = xmlnode_get_data_unescaped(cookie_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
217 if (*host == NULL || **host == '\0' || tmp == NULL || *tmp == '\0' || cookie == NULL || *cookie == '\0') |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
218 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
219 purple_debug_error("oscar", "startOSCARSession response was missing " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
220 "something: %s\n", response); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
221 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
222 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
223 _("Received unexpected response from " URL_START_OSCAR_SESSION)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
224 g_free(*host); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
225 g_free(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
226 g_free(*cookie); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
227 xmlnode_free(response_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
228 return FALSE; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
229 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
230 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
231 *port = atoi(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
232 g_free(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
233 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
234 return TRUE; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
235 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
236 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
237 static void start_oscar_session_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
238 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
239 OscarData *od; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
240 PurpleConnection *gc; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
241 char *host, *cookie; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
242 unsigned short port; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
243 guint8 *cookiedata; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
244 gsize cookiedata_len; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
245 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
246 od = user_data; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
247 gc = od->gc; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
248 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
249 od->url_data = NULL; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
250 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
251 if (error_message != NULL || len == 0) { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
252 gchar *tmp; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
253 tmp = g_strdup_printf(_("Error requesting " URL_START_OSCAR_SESSION |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
254 ": %s"), error_message); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
255 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
256 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
257 g_free(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
258 return; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
259 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
260 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
261 if (!parse_start_oscar_session_response(gc, url_text, len, &host, &port, &cookie)) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
262 return; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
263 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
264 cookiedata = purple_base64_decode(cookie, &cookiedata_len); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
265 oscar_connect_to_bos(gc, od, host, port, cookiedata, cookiedata_len); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
266 g_free(cookiedata); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
267 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
268 g_free(host); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
269 g_free(cookie); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
270 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
271 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
272 static void send_start_oscar_session(OscarData *od, const char *token, const char *session_key, time_t hosttime) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
273 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
274 char *query_string, *signature, *url; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
275 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
276 /* Construct the GET parameters */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
277 query_string = g_strdup_printf("a=%s" |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
278 "&f=xml" |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
279 "&k=" CLIENT_KEY |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
280 "&ts=%zu" |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
281 "&useTLS=0", |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
282 oscar_auth_url_encode(token), hosttime); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
283 signature = generate_signature("GET", URL_START_OSCAR_SESSION, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
284 query_string, session_key); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
285 url = g_strdup_printf(URL_START_OSCAR_SESSION "?%s&sig_sha256=%s", |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
286 query_string, signature); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
287 g_free(query_string); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
288 g_free(signature); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
289 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
290 /* Make the request */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
291 od->url_data = purple_util_fetch_url(url, TRUE, NULL, FALSE, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
292 start_oscar_session_cb, od); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
293 g_free(url); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
294 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
295 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
296 /** |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
297 * This function parses the given response from a clientLogin request |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
298 * and extracts the useful information. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
299 * |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
300 * @param gc The PurpleConnection. If the response data does |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
301 * not indicate then purple_connection_error_reason() |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
302 * will be called to close this connection. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
303 * @param response The response data from the clientLogin request. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
304 * @param response_len The length of the above response, or -1 if |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
305 * @response is NUL terminated. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
306 * @param token If parsing was successful then this will be set to |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
307 * a newly allocated string containing the token. The |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
308 * caller should g_free this string when it is finished |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
309 * with it. On failure this value will be untouched. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
310 * @param secret If parsing was successful then this will be set to |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
311 * a newly allocated string containing the secret. The |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
312 * caller should g_free this string when it is finished |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
313 * with it. On failure this value will be untouched. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
314 * @param hosttime If parsing was successful then this will be set to |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
315 * the time on the OpenAuth Server in seconds since the |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
316 * Unix epoch. On failure this value will be untouched. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
317 * |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
318 * @return TRUE if the request was successful and we were able to |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
319 * extract all info we need. Otherwise FALSE. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
320 */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
321 static gboolean parse_client_login_response(PurpleConnection *gc, const gchar *response, gsize response_len, char **token, char **secret, time_t *hosttime) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
322 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
323 xmlnode *response_node, *tmp_node, *data_node; |
27200
a2508ac2e536
Silence some warnings from gcc on OS X. None of these were actually valid.
Paul Aurich <paul@darkrain42.org>
parents:
27190
diff
changeset
|
324 xmlnode *secret_node = NULL, *hosttime_node = NULL, *token_node = NULL, *tokena_node = NULL; |
27161
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
325 char *tmp; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
326 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
327 /* Parse the response as XML */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
328 response_node = xmlnode_from_str(response, response_len); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
329 if (response_node == NULL) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
330 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
331 purple_debug_error("oscar", "clientLogin could not parse " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
332 "response as XML: %s\n", response); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
333 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
334 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
335 _("Received unexpected response from " URL_CLIENT_LOGIN)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
336 return FALSE; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
337 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
338 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
339 /* Grab the necessary XML nodes */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
340 tmp_node = xmlnode_get_child(response_node, "statusCode"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
341 data_node = xmlnode_get_child(response_node, "data"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
342 if (data_node != NULL) { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
343 secret_node = xmlnode_get_child(data_node, "sessionSecret"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
344 hosttime_node = xmlnode_get_child(data_node, "hostTime"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
345 token_node = xmlnode_get_child(data_node, "token"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
346 if (token_node != NULL) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
347 tokena_node = xmlnode_get_child(token_node, "a"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
348 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
349 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
350 /* Make sure we have a status code */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
351 if (tmp_node == NULL || (tmp = xmlnode_get_data_unescaped(tmp_node)) == NULL) { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
352 purple_debug_error("oscar", "clientLogin response was " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
353 "missing statusCode: %s\n", response); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
354 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
355 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
356 _("Received unexpected response from " URL_CLIENT_LOGIN)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
357 xmlnode_free(response_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
358 return FALSE; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
359 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
360 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
361 /* Make sure the status code was 200 */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
362 if (strcmp(tmp, "200") != 0) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
363 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
364 int status_code, status_detail_code = 0; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
365 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
366 status_code = atoi(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
367 g_free(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
368 tmp_node = xmlnode_get_child(response_node, "statusDetailCode"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
369 if (tmp_node != NULL && (tmp = xmlnode_get_data_unescaped(tmp_node)) != NULL) { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
370 status_detail_code = atoi(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
371 g_free(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
372 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
373 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
374 purple_debug_error("oscar", "clientLogin response statusCode " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
375 "was %d (%d): %s\n", status_code, status_detail_code, response); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
376 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
377 if (status_code == 330 && status_detail_code == 3011) { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
378 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
379 PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, |
27381
f541583e31bd
More uniformity among disconnect error messages
Mark Doliner <mark@kingant.net>
parents:
27200
diff
changeset
|
380 _("Incorrect password")); |
27161
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
381 } else if (status_code == 401 && status_detail_code == 3019) { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
382 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
383 PURPLE_CONNECTION_ERROR_OTHER_ERROR, |
27381
f541583e31bd
More uniformity among disconnect error messages
Mark Doliner <mark@kingant.net>
parents:
27200
diff
changeset
|
384 _("AOL does not allow your screen name to authenticate here")); |
27161
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
385 } else |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
386 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
387 PURPLE_CONNECTION_ERROR_OTHER_ERROR, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
388 _("Received unexpected response from " URL_CLIENT_LOGIN)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
389 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
390 xmlnode_free(response_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
391 return FALSE; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
392 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
393 g_free(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
394 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
395 /* Make sure we have everything else */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
396 if (data_node == NULL || secret_node == NULL || |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
397 token_node == NULL || tokena_node == NULL) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
398 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
399 purple_debug_error("oscar", "clientLogin response was missing " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
400 "something: %s\n", response); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
401 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
402 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
403 _("Received unexpected response from " URL_CLIENT_LOGIN)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
404 xmlnode_free(response_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
405 return FALSE; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
406 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
407 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
408 /* Extract data from the XML */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
409 *token = xmlnode_get_data_unescaped(tokena_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
410 *secret = xmlnode_get_data_unescaped(secret_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
411 tmp = xmlnode_get_data_unescaped(hosttime_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
412 if (*token == NULL || **token == '\0' || *secret == NULL || **secret == '\0' || tmp == NULL || *tmp == '\0') |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
413 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
414 purple_debug_error("oscar", "clientLogin response was missing " |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
415 "something: %s\n", response); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
416 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
417 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
418 _("Received unexpected response from " URL_CLIENT_LOGIN)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
419 g_free(*token); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
420 g_free(*secret); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
421 g_free(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
422 xmlnode_free(response_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
423 return FALSE; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
424 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
425 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
426 *hosttime = strtol(tmp, NULL, 10); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
427 g_free(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
428 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
429 xmlnode_free(response_node); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
430 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
431 return TRUE; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
432 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
433 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
434 static void client_login_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
435 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
436 OscarData *od; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
437 PurpleConnection *gc; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
438 char *token, *secret, *session_key; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
439 time_t hosttime; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
440 int password_len; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
441 char *password; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
442 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
443 od = user_data; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
444 gc = od->gc; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
445 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
446 od->url_data = NULL; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
447 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
448 if (error_message != NULL || len == 0) { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
449 gchar *tmp; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
450 tmp = g_strdup_printf(_("Error requesting " URL_CLIENT_LOGIN |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
451 ": %s"), error_message); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
452 purple_connection_error_reason(gc, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
453 PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
454 g_free(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
455 return; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
456 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
457 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
458 if (!parse_client_login_response(gc, url_text, len, &token, &secret, &hosttime)) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
459 return; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
460 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
461 password_len = strlen(purple_connection_get_password(gc)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
462 password = g_strdup_printf("%.*s", |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
463 od->icq ? MIN(password_len, MAXICQPASSLEN) : password_len, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
464 purple_connection_get_password(gc)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
465 session_key = hmac_sha256(password, secret); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
466 g_free(password); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
467 g_free(secret); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
468 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
469 send_start_oscar_session(od, token, session_key, hosttime); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
470 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
471 g_free(token); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
472 g_free(session_key); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
473 } |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
474 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
475 /** |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
476 * This function sends a request to |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
477 * https://api.screenname.aol.com/auth/clientLogin with the user's |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
478 * username and password and receives the user's session key, which is |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
479 * used to request a connection to the BOSS server. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
480 */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
481 void send_client_login(OscarData *od, const char *username) |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
482 { |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
483 PurpleConnection *gc; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
484 GString *request, *body; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
485 const char *tmp; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
486 char *password; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
487 int password_len; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
488 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
489 gc = od->gc; |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
490 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
491 /* |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
492 * We truncate ICQ passwords to 8 characters. There is probably a |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
493 * limit for AIM passwords, too, but we really only need to do |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
494 * this for ICQ because older ICQ clients let you enter a password |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
495 * as long as you wanted and then they truncated it silently. |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
496 * |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
497 * And we can truncate based on the number of bytes and not the |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
498 * number of characters because passwords for AIM and ICQ are |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
499 * supposed to be plain ASCII (I don't know if this has always been |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
500 * the case, though). |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
501 */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
502 tmp = purple_connection_get_password(gc); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
503 password_len = strlen(tmp); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
504 password = g_strndup(tmp, od->icq ? MIN(password_len, MAXICQPASSLEN) : password_len); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
505 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
506 /* Construct the body of the HTTP POST request */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
507 body = g_string_new(""); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
508 g_string_append_printf(body, "devId=" CLIENT_KEY); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
509 g_string_append_printf(body, "&f=xml"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
510 g_string_append_printf(body, "&pwd=%s", oscar_auth_url_encode(password)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
511 g_string_append_printf(body, "&s=%s", oscar_auth_url_encode(username)); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
512 g_free(password); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
513 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
514 /* Construct an HTTP POST request */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
515 request = g_string_new("POST /auth/clientLogin HTTP/1.0\r\n" |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
516 "Connection: close\r\n" |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
517 "Accept: */*\r\n"); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
518 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
519 /* Tack on the body */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
520 g_string_append_printf(request, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n"); |
27190
1a255e11c02b
Dear Compiler, Shut up!
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27161
diff
changeset
|
521 g_string_append_printf(request, "Content-Length: %" G_GSIZE_FORMAT "\r\n\r\n", body->len); |
27161
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
522 g_string_append_len(request, body->str, body->len); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
523 g_string_free(body, TRUE); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
524 |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
525 /* Send the POST request */ |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
526 od->url_data = purple_util_fetch_url_request(URL_CLIENT_LOGIN, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
527 TRUE, NULL, FALSE, request->str, FALSE, |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
528 client_login_cb, od); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
529 g_string_free(request, TRUE); |
7054f810b0f9
Check in code that connects to oscar using clientLogin. This is the
Mark Doliner <mark@kingant.net>
parents:
diff
changeset
|
530 } |