Mercurial > pidgin.yaz
annotate libpurple/protocols/myspace/myspace.c @ 17346:73720427b132
Show online buddies on buddy list as online.
author | Jeffrey Connelly <jaconnel@calpoly.edu> |
---|---|
date | Sat, 02 Jun 2007 20:57:11 +0000 |
parents | 5f96fcbd627a |
children | aa8e70fa1edc |
rev | line source |
---|---|
16395 | 1 /* MySpaceIM Protocol Plugin |
2 * | |
3 * \author Jeff Connelly | |
4 * | |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
5 * Copyright (C) 2007, Jeff Connelly <jeff2@homing.pidgin.im> |
16395 | 6 * |
16397 | 7 * Based on Purple's "C Plugin HOWTO" hello world example. |
16395 | 8 * |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
9 * Code also drawn from mockprpl: |
16397 | 10 * http://snarfed.org/space/purple+mock+protocol+plugin |
16395 | 11 * Copyright (C) 2004-2007, Ryan Barrett <mockprpl@ryanb.org> |
12 * | |
16397 | 13 * and some constructs also based on existing Purple plugins, which are: |
14 * Copyright (C) 2003, Robbert Haarman <purple@inglorion.net> | |
16395 | 15 * Copyright (C) 2003, Ethan Blanton <eblanton@cs.purdue.edu> |
16 * Copyright (C) 2000-2003, Rob Flynn <rob@tgflinux.com> | |
17 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
18 * | |
19 * This program is free software; you can redistribute it and/or modify | |
20 * it under the terms of the GNU General Public License as published by | |
21 * the Free Software Foundation; either version 2 of the License, or | |
22 * (at your option) any later version. | |
23 * | |
24 * This program is distributed in the hope that it will be useful, | |
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
27 * GNU General Public License for more details. | |
28 * | |
29 * You should have received a copy of the GNU General Public License | |
30 * along with this program; if not, write to the Free Software | |
31 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
32 */ | |
33 | |
16397 | 34 #define PURPLE_PLUGIN |
16395 | 35 |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
36 #include "message.h" |
17343
58b4d103a5b8
Use symbolic constants for persist messages.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17342
diff
changeset
|
37 #include "persist.h" |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
38 #include "myspace.h" |
16395 | 39 |
16737
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
40 /** |
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
41 * Load the plugin. |
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
42 */ |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
43 gboolean msim_load(PurplePlugin *plugin) |
16737
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
44 { |
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
45 #ifdef MSIM_USE_PURPLE_RC4 |
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
46 /* If compiled to use RC4 from libpurple, check if it is really there. */ |
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
47 if (!purple_ciphers_find_cipher("rc4")) |
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
48 { |
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
49 purple_debug_error("msim", "compiled with MSIM_USE_PURPLE_RC4 but rc4 not in libpurple - not loading MySpaceIM plugin!\n"); |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
50 purple_notify_error(plugin, _("Missing Cipher"), |
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
51 _("The RC4 cipher could not be found"), |
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
52 _("Recompile without MSIM_USE_PURPLE_RC4, or upgrade " |
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
53 "to a libpurple with RC4 support (>= 2.0.1). MySpaceIM " |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
54 "plugin will not be loaded.")); |
16737
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
55 return FALSE; |
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
56 } |
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
57 #endif |
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
58 return TRUE; |
16395 | 59 } |
60 | |
61 /** | |
62 * Get possible user status types. Based on mockprpl. | |
63 * | |
64 * @return GList of status types. | |
65 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
66 GList *msim_status_types(PurpleAccount *acct) |
16395 | 67 { |
68 GList *types; | |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
69 PurpleStatusType *status; |
16395 | 70 |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
71 purple_debug_info("myspace", "returning status types\n"); |
16395 | 72 |
73 types = NULL; | |
74 | |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
75 /* TODO: Fix these: |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
76 * |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
77 * g_log: purple_presence_get_active_status: assertion `presence != NULL' failed |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
78 * g_log: purple_status_get_name: assertion `status != NULL' failed |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
79 * [...] |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
80 * |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
81 * and |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
82 * g_log: purple_presence_set_status_active: assertion `status != NULL' failed |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
83 * [...] |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
84 */ |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
85 status = purple_status_type_new_full(PURPLE_STATUS_AVAILABLE, NULL, NULL, FALSE, TRUE, FALSE); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
86 types = g_list_append(types, status); |
16395 | 87 |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
88 status = purple_status_type_new_full(PURPLE_STATUS_AWAY, NULL, NULL, FALSE, TRUE, FALSE); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
89 types = g_list_append(types, status); |
16395 | 90 |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
91 status = purple_status_type_new_full(PURPLE_STATUS_OFFLINE, NULL, NULL, FALSE, TRUE, FALSE); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
92 types = g_list_append(types, status); |
16395 | 93 |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
94 status = purple_status_type_new_full(PURPLE_STATUS_INVISIBLE, NULL, NULL, FALSE, TRUE, FALSE); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
95 types = g_list_append(types, status); |
16395 | 96 |
97 return types; | |
98 } | |
99 | |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
100 /** |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
101 * Return the icon name for a buddy and account. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
102 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
103 * @param acct The account to find the icon for, or NULL for protocol icon. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
104 * @param buddy The buddy to find the icon for, or NULL for the account icon. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
105 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
106 * @return The base icon name string. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
107 */ |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
108 const gchar *msim_list_icon(PurpleAccount *acct, PurpleBuddy *buddy) |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
109 { |
16744
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
110 /* Use a MySpace icon submitted by hbons submitted one at |
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
111 * http://developer.pidgin.im/wiki/MySpaceIM. */ |
16407
f62023eddfc6
Add and use MySpaceIM icon uploaded by hbons (48x48 original and resized 22x22 and 16x16 versions).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16406
diff
changeset
|
112 return "myspace"; |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
113 } |
16410
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
114 |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
115 /** |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
116 * Unescape a protocol message. |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
117 * |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
118 * @return The unescaped message. Caller must g_free(). |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
119 */ |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
120 gchar *msim_unescape(const gchar *msg) |
16410
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
121 { |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
122 /* TODO: make more elegant, refactor with msim_escape */ |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
123 gchar *tmp, *ret; |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
124 |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
125 tmp = str_replace(msg, "/1", "/"); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
126 ret = str_replace(tmp, "/2", "\\"); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
127 g_free(tmp); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
128 return ret; |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
129 } |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
130 |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
131 /** |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
132 * Escape a protocol message. |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
133 * |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
134 * @return The escaped message. Caller must g_free(). |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
135 */ |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
136 gchar *msim_escape(const gchar *msg) |
16410
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
137 { |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
138 /* TODO: make more elegant, refactor with msim_unescape */ |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
139 gchar *tmp, *ret; |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
140 |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
141 tmp = str_replace(msg, "/", "/1"); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
142 ret = str_replace(tmp, "\\", "/2"); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
143 g_free(tmp); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
144 |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
145 return ret; |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
146 } |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
147 |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
148 /** |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
149 * Replace 'old' with 'new' in 'str'. |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
150 * |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
151 * @param str The original string. |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
152 * @param old The substring of 'str' to replace. |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
153 * @param new The replacement for 'old' within 'str'. |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
154 * |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
155 * @return A _new_ string, based on 'str', with 'old' replaced |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
156 * by 'new'. Must be g_free()'d by caller. |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
157 * |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
158 * This string replace method is based on |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
159 * http://mail.gnome.org/archives/gtk-app-devel-list/2000-July/msg00201.html |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
160 * |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
161 */ |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
162 gchar *str_replace(const gchar *str, const gchar *old, const gchar *new) |
16410
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
163 { |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
164 char **items; |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
165 char *ret; |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
166 |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
167 items = g_strsplit(str, old, -1); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
168 ret = g_strjoinv(new, items); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
169 g_free(items); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
170 return ret; |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
171 } |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
172 |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
173 |
16746
52357f6392a4
Add partial implementation of MsimMessage (not used anywhere yet).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16745
diff
changeset
|
174 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
175 |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
176 #ifdef MSIM_DEBUG_MSG |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
177 void print_hash_item(gpointer key, gpointer value, gpointer user_data) |
16395 | 178 { |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
179 purple_debug_info("msim", "%s=%s\n", (char *)key, (char *)value); |
16395 | 180 } |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
181 #endif |
16395 | 182 |
183 /** | |
16734
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
184 * Send raw data to the server. |
16395 | 185 * |
186 * @param session | |
16734
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
187 * @param msg The raw data to send. |
16410
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
188 * |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
189 * @return TRUE if succeeded, FALSE if not. |
16395 | 190 * |
191 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
192 gboolean msim_send_raw(MsimSession *session, const gchar *msg) |
16395 | 193 { |
16410
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
194 int total_bytes_sent, total_bytes; |
16741
a2e9890a57e0
Implement msim_pack(), msim_sendh(), msim_send().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16740
diff
changeset
|
195 |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
196 purple_debug_info("msim", "msim_send_raw: writing <%s>\n", msg); |
16395 | 197 |
16410
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
198 g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
199 g_return_val_if_fail(msg != NULL, FALSE); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
200 |
16395 | 201 |
16410
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
202 /* Loop until all data is sent, or a failure occurs. */ |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
203 total_bytes_sent = 0; |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
204 total_bytes = strlen(msg); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
205 do |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
206 { |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
207 int bytes_sent; |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
208 |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
209 bytes_sent = send(session->fd, msg + total_bytes_sent, |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
210 total_bytes - total_bytes_sent, 0); |
16395 | 211 |
16410
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
212 if (bytes_sent < 0) |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
213 { |
16734
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
214 purple_debug_info("msim", "msim_send_raw(%s): send() failed: %s\n", |
16410
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
215 msg, g_strerror(errno)); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
216 return FALSE; |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
217 } |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
218 total_bytes_sent += bytes_sent; |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
219 |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
220 } while(total_bytes_sent < total_bytes); |
1aa62f7368ca
Add escaping and unescaping functions (for /1 and /2).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16408
diff
changeset
|
221 return TRUE; |
16395 | 222 } |
223 | |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
224 /** |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
225 * Start logging in to the MSIM servers. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
226 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
227 * @param acct Account information to use to login. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
228 */ |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
229 void msim_login(PurpleAccount *acct) |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
230 { |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
231 PurpleConnection *gc; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
232 const char *host; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
233 int port; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
234 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
235 g_return_if_fail(acct != NULL); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
236 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
237 purple_debug_info("myspace", "logging in %s\n", acct->username); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
238 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
239 gc = purple_account_get_connection(acct); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
240 gc->proto_data = msim_session_new(acct); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
241 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
242 /* 1. connect to server */ |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
243 purple_connection_update_progress(gc, _("Connecting"), |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
244 0, /* which connection step this is */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
245 4); /* total number of steps */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
246 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
247 host = purple_account_get_string(acct, "server", MSIM_SERVER); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
248 port = purple_account_get_int(acct, "port", MSIM_PORT); |
16744
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
249 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
250 /* From purple.sf.net/api: |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
251 * """Note that this function name can be misleading--although it is called |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
252 * "proxy connect," it is used for establishing any outgoing TCP connection, |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
253 * whether through a proxy or not.""" */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
254 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
255 /* Calls msim_connect_cb when connected. */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
256 if (purple_proxy_connect(gc, acct, host, port, msim_connect_cb, gc) == NULL) |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
257 { |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
258 /* TODO: try other ports if in auto mode, then save |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
259 * working port and try that first next time. */ |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
260 purple_connection_error(gc, _("Couldn't create socket")); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
261 return; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
262 } |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
263 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
264 } |
16395 | 265 /** |
266 * Process a login challenge, sending a response. | |
267 * | |
268 * @param session | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
269 * @param msg Login challenge message. |
16395 | 270 * |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
271 * @return 0, since the 'msg' parameter is no longer needed. |
16395 | 272 */ |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
273 int msim_login_challenge(MsimSession *session, MsimMessage *msg) |
16395 | 274 { |
16397 | 275 PurpleAccount *account; |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
276 gchar *response; |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
277 guint response_len; |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
278 gchar *nc; |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
279 gsize nc_len; |
16395 | 280 |
281 g_return_val_if_fail(MSIM_SESSION_VALID(session), 0); | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
282 g_return_val_if_fail(msg != NULL, 0); |
16395 | 283 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
284 g_return_val_if_fail(msim_msg_get_binary(msg, "nc", &nc, &nc_len), 0); |
16395 | 285 |
286 account = session->account; | |
287 //assert(account); | |
288 | |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
289 purple_connection_update_progress(session->gc, _("Reading challenge"), 1, 4); |
16395 | 290 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
291 purple_debug_info("msim", "nc is %d bytes, decoded\n", nc_len); |
16395 | 292 |
293 if (nc_len != 0x40) | |
294 { | |
16397 | 295 purple_debug_info("msim", "bad nc length: %x != 0x40\n", nc_len); |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
296 purple_connection_error(session->gc, _("Unexpected challenge length from server")); |
16395 | 297 return 0; |
298 } | |
299 | |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
300 purple_connection_update_progress(session->gc, _("Logging in"), 2, 4); |
16395 | 301 |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
302 response = msim_compute_login_response(nc, account->username, account->password, &response_len); |
16395 | 303 |
304 g_free(nc); | |
305 | |
16742
2e0bd3e6f2c7
Incomplete attempt at using msim_send() instead of msim_send_raw().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16741
diff
changeset
|
306 msim_send(session, |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
307 "login2", MSIM_TYPE_INTEGER, MSIM_AUTH_ALGORITHM, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
308 "username", MSIM_TYPE_STRING, g_strdup(account->username), |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
309 /* GString and gchar * response will be freed in msim_msg_free() in msim_send(). */ |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
310 "response", MSIM_TYPE_BINARY, g_string_new_len(response, response_len), |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
311 "clientver", MSIM_TYPE_INTEGER, MSIM_CLIENT_VERSION, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
312 "reconn", MSIM_TYPE_INTEGER, 0, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
313 "status", MSIM_TYPE_INTEGER, 100, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
314 "id", MSIM_TYPE_INTEGER, 1, |
16742
2e0bd3e6f2c7
Incomplete attempt at using msim_send() instead of msim_send_raw().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16741
diff
changeset
|
315 NULL); |
16395 | 316 |
317 return 0; | |
318 } | |
319 | |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
320 #ifndef MSIM_USE_PURPLE_RC4 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
321 /* No RC4 in this version of libpurple, so bring our own. */ |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
322 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
323 /* |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
324 Unix SMB/CIFS implementation. |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
325 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
326 a partial implementation of RC4 designed for use in the |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
327 SMB authentication protocol |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
328 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
329 Copyright (C) Andrew Tridgell 1998 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
330 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
331 $Id: crypt-rc4.c 12116 2004-09-27 23:29:22Z guy $ |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
332 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
333 This program is free software; you can redistribute it and/or modify |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
334 it under the terms of the GNU General Public License as published by |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
335 the Free Software Foundation; either version 2 of the License, or |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
336 (at your option) any later version. |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
337 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
338 This program is distributed in the hope that it will be useful, |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
339 but WITHOUT ANY WARRANTY; without even the implied warranty of |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
340 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
341 GNU General Public License for more details. |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
342 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
343 You should have received a copy of the GNU General Public License |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
344 along with this program; if not, write to the Free Software |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
345 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
346 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
347 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
348 Modified by Jeff Connelly for MySpaceIM Gaim plugin. |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
349 */ |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
350 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
351 #include <glib.h> |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
352 #include <string.h> |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
353 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
354 /* Perform RC4 on a block of data using specified key. "data" is a pointer |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
355 to the block to be processed. Output is written to same memory as input, |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
356 so caller may need to make a copy before calling this function, since |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
357 the input will be overwritten. |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
358 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
359 Taken from Samba source code. Modified to allow us to maintain state |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
360 between calls to crypt_rc4. |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
361 */ |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
362 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
363 void crypt_rc4_init(rc4_state_struct *rc4_state, |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
364 const unsigned char *key, int key_len) |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
365 { |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
366 int ind; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
367 unsigned char j = 0; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
368 unsigned char *s_box; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
369 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
370 memset(rc4_state, 0, sizeof(rc4_state_struct)); |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
371 s_box = rc4_state->s_box; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
372 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
373 for (ind = 0; ind < 256; ind++) |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
374 { |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
375 s_box[ind] = (unsigned char)ind; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
376 } |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
377 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
378 for( ind = 0; ind < 256; ind++) |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
379 { |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
380 unsigned char tc; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
381 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
382 j += (s_box[ind] + key[ind%key_len]); |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
383 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
384 tc = s_box[ind]; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
385 s_box[ind] = s_box[j]; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
386 s_box[j] = tc; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
387 } |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
388 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
389 } |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
390 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
391 void crypt_rc4(rc4_state_struct *rc4_state, unsigned char *data, int data_len) |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
392 { |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
393 unsigned char *s_box; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
394 unsigned char index_i; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
395 unsigned char index_j; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
396 int ind; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
397 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
398 /* retrieve current state from the state struct (so we can resume where |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
399 we left off) */ |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
400 index_i = rc4_state->index_i; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
401 index_j = rc4_state->index_j; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
402 s_box = rc4_state->s_box; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
403 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
404 for( ind = 0; ind < data_len; ind++) |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
405 { |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
406 unsigned char tc; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
407 unsigned char t; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
408 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
409 index_i++; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
410 index_j += s_box[index_i]; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
411 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
412 tc = s_box[index_i]; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
413 s_box[index_i] = s_box[index_j]; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
414 s_box[index_j] = tc; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
415 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
416 t = s_box[index_i] + s_box[index_j]; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
417 data[ind] = data[ind] ^ s_box[t]; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
418 } |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
419 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
420 /* Store the updated state */ |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
421 rc4_state->index_i = index_i; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
422 rc4_state->index_j = index_j; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
423 } |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
424 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
425 #endif /* !MSIM_USE_PURPLE_RC4 */ |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
426 |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
427 |
16395 | 428 /** |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
429 * Compute the base64'd login challenge response based on username, password, nonce, and IPs. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
430 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
431 * @param nonce The base64 encoded nonce ('nc') field from the server. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
432 * @param email User's email address (used as login name). |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
433 * @param password User's cleartext password. |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
434 * @param response_len Will be written with response length. |
16395 | 435 * |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
436 * @return Binary login challenge response, ready to send to the server. Must be g_free()'d |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
437 * when finished. |
16395 | 438 */ |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
439 gchar *msim_compute_login_response(gchar nonce[2 * NONCE_SIZE], |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
440 gchar *email, gchar *password, guint *response_len) |
16395 | 441 { |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
442 PurpleCipherContext *key_context; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
443 PurpleCipher *sha1; |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
444 #ifdef MSIM_USE_PURPLE_RC4 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
445 PurpleCipherContext *rc4; |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
446 #else |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
447 rc4_state_struct rc4; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
448 #endif |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
449 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
450 guchar hash_pw[HASH_SIZE]; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
451 guchar key[HASH_SIZE]; |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
452 gchar *password_utf16le; |
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
453 guchar *data; |
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
454 guchar *data_out; |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
455 size_t data_len, data_out_len; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
456 gsize conv_bytes_read, conv_bytes_written; |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
457 GError *conv_error; |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
458 #ifdef MSIM_DEBUG_LOGIN_CHALLENGE |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
459 int i; |
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
460 #endif |
16395 | 461 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
462 /* Convert ASCII password to UTF16 little endian */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
463 purple_debug_info("msim", "converting password to UTF-16LE\n"); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
464 conv_error = NULL; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
465 password_utf16le = g_convert(password, -1, "UTF-16LE", "UTF-8", |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
466 &conv_bytes_read, &conv_bytes_written, &conv_error); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
467 g_assert(conv_bytes_read == strlen(password)); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
468 if (conv_error != NULL) |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
469 { |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
470 purple_debug_error("msim", |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
471 "g_convert password UTF8->UTF16LE failed: %s", |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
472 conv_error->message); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
473 g_error_free(conv_error); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
474 } |
16395 | 475 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
476 /* Compute password hash */ |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
477 purple_cipher_digest_region("sha1", (guchar *)password_utf16le, |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
478 conv_bytes_written, sizeof(hash_pw), hash_pw, NULL); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
479 g_free(password_utf16le); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
480 |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
481 #ifdef MSIM_DEBUG_LOGIN_CHALLENGE |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
482 purple_debug_info("msim", "pwhash = "); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
483 for (i = 0; i < sizeof(hash_pw); i++) |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
484 purple_debug_info("msim", "%.2x ", hash_pw[i]); |
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
485 purple_debug_info("msim", "\n"); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
486 #endif |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
487 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
488 /* key = sha1(sha1(pw) + nonce2) */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
489 sha1 = purple_ciphers_find_cipher("sha1"); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
490 key_context = purple_cipher_context_new(sha1, NULL); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
491 purple_cipher_context_append(key_context, hash_pw, HASH_SIZE); |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
492 purple_cipher_context_append(key_context, (guchar *)(nonce + NONCE_SIZE), NONCE_SIZE); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
493 purple_cipher_context_digest(key_context, sizeof(key), key, NULL); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
494 |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
495 #ifdef MSIM_DEBUG_LOGIN_CHALLENGE |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
496 purple_debug_info("msim", "key = "); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
497 for (i = 0; i < sizeof(key); i++) |
16395 | 498 { |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
499 purple_debug_info("msim", "%.2x ", key[i]); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
500 } |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
501 purple_debug_info("msim", "\n"); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
502 #endif |
16395 | 503 |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
504 #ifdef MSIM_USE_PURPLE_RC4 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
505 rc4 = purple_cipher_context_new_by_name("rc4", NULL); |
16395 | 506 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
507 /* Note: 'key' variable is 0x14 bytes (from SHA-1 hash), |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
508 * but only first 0x10 used for the RC4 key. */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
509 purple_cipher_context_set_option(rc4, "key_len", (gpointer)0x10); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
510 purple_cipher_context_set_key(rc4, key); |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
511 #endif |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
512 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
513 /* TODO: obtain IPs of network interfaces. This is not immediately |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
514 * important because you can still connect and perform basic |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
515 * functions of the protocol. There is also a high chance that the addreses |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
516 * are RFC1918 private, so the servers couldn't do anything with them |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
517 * anyways except make note of that fact. Probably important for any |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
518 * kind of direct connection, or file transfer functionality. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
519 */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
520 /* rc4 encrypt: |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
521 * nonce1+email+IP list */ |
16745
3f53f8f502b2
Replacement magic numbers by symbolic constants.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16744
diff
changeset
|
522 data_len = NONCE_SIZE + strlen(email) |
3f53f8f502b2
Replacement magic numbers by symbolic constants.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16744
diff
changeset
|
523 /* TODO: change to length of IP list */ |
3f53f8f502b2
Replacement magic numbers by symbolic constants.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16744
diff
changeset
|
524 + 25; |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
525 data = g_new0(guchar, data_len); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
526 memcpy(data, nonce, NONCE_SIZE); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
527 memcpy(data + NONCE_SIZE, email, strlen(email)); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
528 memcpy(data + NONCE_SIZE + strlen(email), |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
529 /* TODO: IP addresses of network interfaces */ |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
530 "\x00\x00\x00\x00\x05\x7f\x00\x00\x01\x00\x00\x00\x00\x0a\x00\x00\x40\xc0\xa8\x58\x01\xc0\xa8\x3c\x01", 25); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
531 |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
532 #ifdef MSIM_USE_PURPLE_RC4 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
533 data_out = g_new0(guchar, data_len); |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
534 |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
535 purple_cipher_context_encrypt(rc4, (const guchar *)data, |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
536 data_len, data_out, &data_out_len); |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
537 purple_cipher_context_destroy(rc4); |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
538 #else |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
539 /* Use our own RC4 code */ |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
540 purple_debug_info("msim", "Using non-purple RC4 cipher code in this version\n"); |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
541 crypt_rc4_init(&rc4, key, 0x10); |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
542 crypt_rc4(&rc4, data, data_len); |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
543 data_out_len = data_len; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
544 data_out = data; |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
545 #endif |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
546 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
547 g_assert(data_out_len == data_len); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
548 |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
549 #ifdef MSIM_DEBUG_LOGIN_CHALLENGE |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
550 purple_debug_info("msim", "response=<%s>\n", data_out); |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
551 #endif |
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
552 |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
553 *response_len = data_out_len; |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
554 |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
555 return (gchar *)data_out; |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
556 } |
16395 | 557 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
558 /** |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
559 * Schedule an IM to be sent once the user ID is looked up. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
560 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
561 * @param gc Connection. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
562 * @param who A user id, email, or username to send the message to. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
563 * @param message Instant message text to send. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
564 * @param flags Flags. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
565 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
566 * @return 1 in all cases, even if the message delivery is destined to fail. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
567 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
568 * Allows sending to a user by username, email address, or userid. If |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
569 * a username or email address is given, the userid must be looked up. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
570 * This function does that by calling msim_lookup_user(), setting up |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
571 * a msim_send_im_by_userid_cb() callback function called when the userid |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
572 * response is received from the server. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
573 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
574 * The callback function calls msim_send_im_by_userid() to send the actual |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
575 * instant message. If a userid is specified directly, this function is called |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
576 * immediately here. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
577 */ |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
578 int msim_send_im(PurpleConnection *gc, const char *who, |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
579 const char *message, PurpleMessageFlags flags) |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
580 { |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
581 MsimSession *session; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
582 const char *from_username = gc->account->username; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
583 send_im_cb_struct *cbinfo; |
16395 | 584 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
585 g_return_val_if_fail(gc != NULL, 0); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
586 g_return_val_if_fail(who != NULL, 0); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
587 g_return_val_if_fail(message != NULL, 0); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
588 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
589 purple_debug_info("msim", "sending message from %s to %s: %s\n", |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
590 from_username, who, message); |
16395 | 591 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
592 session = gc->proto_data; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
593 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
594 /* If numeric ID, can send message immediately without userid lookup */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
595 if (msim_is_userid(who)) |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
596 { |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
597 purple_debug_info("msim", |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
598 "msim_send_im: numeric 'who' detected, sending asap\n"); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
599 msim_send_im_by_userid(session, who, message, flags); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
600 return 1; |
16395 | 601 } |
602 | |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
603 /* Otherwise, add callback to IM when userid of destination is available */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
604 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
605 /* Setup a callback for when the userid is available */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
606 cbinfo = g_new0(send_im_cb_struct, 1); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
607 cbinfo->who = g_strdup(who); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
608 cbinfo->message = g_strdup(message); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
609 cbinfo->flags = flags; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
610 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
611 /* Send the request to lookup the userid */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
612 msim_lookup_user(session, who, msim_send_im_by_userid_cb, cbinfo); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
613 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
614 /* msim_send_im_by_userid_cb will now be called once userid is looked up */ |
16395 | 615 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
616 /* Return 1 to have Purple show this IM as being sent, 0 to not. I always |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
617 * return 1 even if the message could not be sent, since I don't know if |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
618 * it has failed yet--because the IM is only sent after the userid is |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
619 * retrieved from the server (which happens after this function returns). |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
620 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
621 * TODO: In MySpace, you login with your email address, but don't talk to other |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
622 * users using their email address. So there is currently an asymmetry in the |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
623 * IM windows when using this plugin: |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
624 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
625 * you@example.com: hello |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
626 * some_other_user: what's going on? |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
627 * you@example.com: just coding a prpl |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
628 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
629 * TODO: Make the sent IM's appear as from the user's username, instead of |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
630 * their email address. Purple uses the login (in MSIM, the email)--change this. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
631 */ |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
632 return 1; |
16395 | 633 } |
634 | |
635 /** | |
636 * Immediately send an IM to a user, by their numeric user ID. | |
637 * | |
638 * @param session | |
639 * @param userid ASCII numeric userid. | |
640 * @param message Text of message to send. | |
16397 | 641 * @param flags Purple instant message flags. |
16395 | 642 * |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
643 * @return 0 |
16395 | 644 * |
645 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
646 int msim_send_im_by_userid(MsimSession *session, const gchar *userid, const gchar *message, PurpleMessageFlags flags) |
16395 | 647 { |
648 g_return_val_if_fail(MSIM_SESSION_VALID(session), 0); | |
649 g_return_val_if_fail(userid != NULL, 0); | |
650 g_return_val_if_fail(msim_is_userid(userid) == TRUE, 0); | |
651 g_return_val_if_fail(message != NULL, 0); | |
652 | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
653 msim_send(session, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
654 "bm", MSIM_TYPE_INTEGER, MSIM_BM_INSTANT, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
655 "sesskey", MSIM_TYPE_STRING, g_strdup(session->sesskey), |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
656 "t", MSIM_TYPE_STRING, g_strdup(userid), |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
657 "cv", MSIM_TYPE_INTEGER, MSIM_CLIENT_VERSION, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
658 "msg", MSIM_TYPE_STRING, g_strdup(message), |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
659 NULL); |
16395 | 660 |
661 /* Not needed since sending messages to yourself is allowed by MSIM! */ | |
662 /*if (strcmp(from_username, who) == 0) | |
16397 | 663 serv_got_im(gc, from_username, message, PURPLE_MESSAGE_RECV, time(NULL)); |
16395 | 664 */ |
665 | |
666 return 0; | |
667 } | |
668 | |
669 | |
670 /** | |
671 * Callback called when ready to send an IM by userid (the userid has been looked up). | |
672 * Calls msim_send_im_by_userid. | |
673 * | |
674 * @param session | |
675 * @param userinfo User info message from server containing a 'body' field | |
676 * with a 'UserID' key. This is where the user ID is taken from. | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
677 * Will be destroyed after use. |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
678 * @param data A send_im_cb_struct * of information on the IM to send. |
16395 | 679 * |
680 */ | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
681 void msim_send_im_by_userid_cb(MsimSession *session, MsimMessage *userinfo, gpointer data) |
16395 | 682 { |
683 send_im_cb_struct *s; | |
684 gchar *userid; | |
685 GHashTable *body; | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
686 gchar *body_str; |
16395 | 687 |
688 g_return_if_fail(MSIM_SESSION_VALID(session)); | |
689 g_return_if_fail(userinfo != NULL); | |
690 | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
691 body_str = msim_msg_get_string(userinfo, "body"); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
692 body = msim_parse_body(body_str); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
693 g_free(body_str); |
16738
cd4a6bd9f69e
Use g_return_if_fail() instead of g_assert(), as to not crash the whole program.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16737
diff
changeset
|
694 g_return_if_fail(body != NULL); |
16395 | 695 |
696 userid = g_hash_table_lookup(body, "UserID"); | |
697 | |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
698 s = (send_im_cb_struct *)data; |
16395 | 699 msim_send_im_by_userid(session, userid, s->message, s->flags); |
700 | |
701 g_hash_table_destroy(body); | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
702 /* g_hash_table_destroy(userinfo); */ |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
703 /* TODO: do we need to free userinfo here? */ |
17340
9ecd2bb0ecc1
Fix double-free crash when sending messages (typo). Works again.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17337
diff
changeset
|
704 /* msim_msg_free(userinfo); */ |
16395 | 705 g_free(s->message); |
706 g_free(s->who); | |
707 } | |
708 | |
709 /** | |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
710 * Callback to handle incoming messages, after resolving userid. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
711 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
712 * @param session |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
713 * @param userinfo Message from server on user's info, containing UserName. |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
714 * @param data A gchar * of the incoming instant message's text. |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
715 */ |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
716 void msim_incoming_im_cb(MsimSession *session, MsimMessage *userinfo, gpointer data) |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
717 { |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
718 gchar *msg, *username, *body_str; |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
719 GHashTable *body; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
720 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
721 g_return_if_fail(MSIM_SESSION_VALID(session)); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
722 g_return_if_fail(userinfo != NULL); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
723 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
724 body_str = msim_msg_get_string(userinfo, "body"); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
725 body = msim_parse_body(body_str); |
17340
9ecd2bb0ecc1
Fix double-free crash when sending messages (typo). Works again.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17337
diff
changeset
|
726 g_free(body_str); |
16738
cd4a6bd9f69e
Use g_return_if_fail() instead of g_assert(), as to not crash the whole program.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16737
diff
changeset
|
727 g_return_if_fail(body != NULL); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
728 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
729 username = g_hash_table_lookup(body, "UserName"); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
730 |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
731 msg = (gchar *)data; |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
732 serv_got_im(session->gc, username, msg, PURPLE_MESSAGE_RECV, time(NULL)); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
733 |
17340
9ecd2bb0ecc1
Fix double-free crash when sending messages (typo). Works again.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17337
diff
changeset
|
734 /* msim_msg_free(userinfo); */ /* TODO: Should we? */ |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
735 g_hash_table_destroy(body); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
736 } |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
737 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
738 /** |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
739 * Handle an incoming message. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
740 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
741 * @param session The session |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
742 * @param msg Message from the server, containing 'f' (userid from) and 'msg'. |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
743 * |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
744 * @return 0, since msg can be freed. |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
745 */ |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
746 int msim_incoming_im(MsimSession *session, MsimMessage *msg) |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
747 { |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
748 gchar *userid; |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
749 gchar *msg_text; |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
750 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
751 g_return_val_if_fail(MSIM_SESSION_VALID(session), 0); |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
752 g_return_val_if_fail(msg != NULL, 0); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
753 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
754 /* TODO: where freed? */ |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
755 userid = msim_msg_get_string(msg, "f"); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
756 msg_text = msim_msg_get_string(msg, "msg"); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
757 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
758 purple_debug_info("msim", |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
759 "msim_incoming_im: got msg <%s> from <%s>, resolving username\n", |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
760 msg_text, userid); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
761 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
762 msim_lookup_user(session, userid, msim_incoming_im_cb, msg_text); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
763 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
764 return 0; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
765 } |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
766 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
767 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
768 /** |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
769 * Process a message. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
770 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
771 * @param gc Connection. |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
772 * @param msg Any message from the server. |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
773 * |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
774 * @return The return value of the function used to process the message, or -1 if |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
775 * called with invalid parameters. |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
776 */ |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
777 int msim_process(PurpleConnection *gc, MsimMessage *msg) |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
778 { |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
779 MsimSession *session; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
780 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
781 g_return_val_if_fail(gc != NULL, -1); |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
782 g_return_val_if_fail(msg != NULL, -1); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
783 |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
784 session = (MsimSession *)gc->proto_data; |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
785 |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
786 #ifdef MSIM_DEBUG_MSG |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
787 { |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
788 gchar *debug_msg; |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
789 |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
790 debug_msg = msim_msg_debug_string(msg); |
17342
4f54e8c41086
Cosmetic improvement to MsimMessage debug output.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17340
diff
changeset
|
791 purple_debug_info("msim", "%s\n", debug_msg); |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
792 g_free(debug_msg); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
793 } |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
794 #endif |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
795 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
796 if (msim_msg_get(msg, "nc")) |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
797 { |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
798 return msim_login_challenge(session, msg); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
799 } else if (msim_msg_get(msg, "sesskey")) { |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
800 |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
801 purple_connection_update_progress(gc, _("Connected"), 3, 4); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
802 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
803 /* Freed in msim_session_destroy */ |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
804 session->sesskey = msim_msg_get_string(msg, "sesskey"); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
805 purple_debug_info("msim", "SESSKEY=<%s>\n", session->sesskey); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
806 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
807 /* Comes with: proof,profileid,userid,uniquenick -- all same values |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
808 * (at least for me). */ |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
809 /* Freed in msim_session_destroy */ |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
810 session->userid = msim_msg_get_string(msg, "userid"); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
811 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
812 purple_connection_set_state(gc, PURPLE_CONNECTED); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
813 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
814 return 0; |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
815 } else if (msim_msg_get(msg, "bm")) { |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
816 guint bm; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
817 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
818 bm = msim_msg_get_integer(msg, "bm"); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
819 switch (bm) |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
820 { |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
821 case MSIM_BM_STATUS: |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
822 return msim_status(session, msg); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
823 case MSIM_BM_INSTANT: |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
824 return msim_incoming_im(session, msg); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
825 default: |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
826 /* Not really an IM, but show it for informational |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
827 * purposes during development. */ |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
828 return msim_incoming_im(session, msg); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
829 } |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
830 |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
831 if (bm == MSIM_BM_STATUS) |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
832 { |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
833 return msim_status(session, msg); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
834 } else { /* else if strcmp(bm, "1") == 0) */ |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
835 return msim_incoming_im(session, msg); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
836 } |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
837 } else if (msim_msg_get(msg, "rid")) { |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
838 return msim_process_reply(session, msg); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
839 } else if (msim_msg_get(msg, "error")) { |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
840 return msim_error(session, msg); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
841 } else if (msim_msg_get(msg, "ka")) { |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
842 purple_debug_info("msim", "msim_process: got keep alive\n"); |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
843 return 0; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
844 } else { |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
845 /* TODO: dump unknown msgs to file, so user can send them to me |
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
846 * if they wish, to help add support for new messages (inspired |
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
847 * by Alexandr Shutko, who maintains OSCAR protocol documentation). */ |
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
848 purple_debug_info("msim", "msim_process: unhandled message\n"); |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
849 return 0; |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
850 } |
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
851 } |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
852 |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
853 /** |
16395 | 854 * Process a message reply from the server. |
855 * | |
856 * @param session | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
857 * @param msg Message reply from server. |
16395 | 858 * |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
859 * @return 0, since the 'msg' field is no longer needed. |
16395 | 860 */ |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
861 int msim_process_reply(MsimSession *session, MsimMessage *msg) |
16395 | 862 { |
863 g_return_val_if_fail(MSIM_SESSION_VALID(session), 0); | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
864 g_return_val_if_fail(msg != NULL, 0); |
16395 | 865 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
866 if (msim_msg_get(msg, "rid")) /* msim_lookup_user sets callback for here */ |
16395 | 867 { |
868 MSIM_USER_LOOKUP_CB cb; | |
869 gpointer data; | |
870 guint rid; | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
871 GHashTable *body; |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
872 gchar *username, *body_str; |
16395 | 873 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
874 rid = msim_msg_get_integer(msg, "rid"); |
16395 | 875 |
876 /* Cache the user info. Currently, the GHashTable of user info in | |
877 * this cache never expires so is never freed. TODO: expire and destroy | |
878 * | |
879 * Some information never changes (username->userid map), some does. | |
880 * TODO: Cache what doesn't change only | |
881 */ | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
882 body_str = msim_msg_get_string(msg, "body"); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
883 body = msim_parse_body(body_str); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
884 g_free(body_str); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
885 |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
886 /* TODO: implement a better hash-like interface, and use it. */ |
16395 | 887 username = g_hash_table_lookup(body, "UserName"); |
888 if (username) | |
889 { | |
17343
58b4d103a5b8
Use symbolic constants for persist messages.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17342
diff
changeset
|
890 /* TODO: permanently associated with blist item, if in buddy in blist, |
58b4d103a5b8
Use symbolic constants for persist messages.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17342
diff
changeset
|
891 * See purple_blist_node_set_int(). */ |
16395 | 892 g_hash_table_insert(session->user_lookup_cache, g_strdup(username), body); |
893 } else { | |
16405
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
894 purple_debug_info("msim", |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
895 "msim_process_reply: not caching body, no UserName\n"); |
16395 | 896 } |
897 | |
898 /* If a callback is registered for this userid lookup, call it. */ | |
899 cb = g_hash_table_lookup(session->user_lookup_cb, GUINT_TO_POINTER(rid)); | |
900 data = g_hash_table_lookup(session->user_lookup_cb_data, GUINT_TO_POINTER(rid)); | |
901 | |
902 if (cb) | |
903 { | |
16405
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
904 purple_debug_info("msim", |
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
905 "msim_process_body: calling callback now\n"); |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
906 cb(session, msg, data); |
16395 | 907 g_hash_table_remove(session->user_lookup_cb, GUINT_TO_POINTER(rid)); |
908 g_hash_table_remove(session->user_lookup_cb_data, GUINT_TO_POINTER(rid)); | |
909 | |
910 /* Return 1 to tell caller of msim_process (msim_input_cb) to | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
911 * not destroy 'msg'; allow 'cb' to hang on to it and destroy |
16395 | 912 * it when it wants. */ |
913 return 1; | |
914 } else { | |
16405
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
915 purple_debug_info("msim", |
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
916 "msim_process_body: no callback for rid %d\n", rid); |
16395 | 917 } |
918 } | |
919 return 0; | |
920 } | |
921 | |
922 /** | |
923 * Handle an error from the server. | |
924 * | |
925 * @param session | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
926 * @param msg The message. |
16395 | 927 * |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
928 * @return 0, since 'msg' can be freed. |
16395 | 929 */ |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
930 int msim_error(MsimSession *session, MsimMessage *msg) |
16395 | 931 { |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
932 gchar *errmsg, *full_errmsg; |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
933 guint err; |
16395 | 934 |
935 g_return_val_if_fail(MSIM_SESSION_VALID(session), 0); | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
936 g_return_val_if_fail(msg != NULL, 0); |
16395 | 937 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
938 err = msim_msg_get_integer(msg, "err"); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
939 errmsg = msim_msg_get_string(msg, "errmsg"); |
16395 | 940 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
941 full_errmsg = g_strdup_printf(_("Protocol error, code %d: %s"), err, errmsg); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
942 |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
943 g_free(errmsg); |
16395 | 944 |
16397 | 945 purple_debug_info("msim", "msim_error: %s\n", full_errmsg); |
16395 | 946 |
947 /* TODO: check 'fatal' and die if asked to. | |
948 * TODO: do something with the error # (localization of errmsg?) */ | |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
949 purple_notify_error(session->account, g_strdup(_("MySpaceIM Error")), |
16395 | 950 full_errmsg, NULL); |
951 | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
952 if (msim_msg_get(msg, "fatal")) |
16395 | 953 { |
16397 | 954 purple_debug_info("msim", "fatal error, destroy session\n"); |
955 purple_connection_error(session->gc, full_errmsg); | |
16395 | 956 close(session->fd); |
957 //msim_session_destroy(session); | |
958 } | |
959 | |
960 return 0; | |
961 } | |
962 | |
963 #if 0 | |
964 /* Not sure about this */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
965 void msim_status_now(gchar *who, gpointer data) |
16395 | 966 { |
967 printf("msim_status_now: %s\n", who); | |
968 } | |
969 #endif | |
970 | |
971 /** | |
972 * Callback to update incoming status messages, after looked up username. | |
973 * | |
974 * @param session | |
975 * @param userinfo Looked up user information from server. | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
976 * @param data gchar * status string, will be freed. |
16395 | 977 * |
978 */ | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
979 void msim_status_cb(MsimSession *session, MsimMessage *userinfo, gpointer data) |
16395 | 980 { |
16397 | 981 PurpleBuddyList *blist; |
982 PurpleBuddy *buddy; | |
16395 | 983 GHashTable *body; |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
984 gchar *body_str; |
16397 | 985 //PurpleStatus *status; |
16395 | 986 gchar **status_array; |
987 GList *list; | |
17346
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
988 gchar *status_headline; |
16395 | 989 gchar *status_str; |
17346
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
990 gint i, status_code, purple_status_code; |
16395 | 991 gchar *username; |
992 | |
993 g_return_if_fail(MSIM_SESSION_VALID(session)); | |
994 g_return_if_fail(userinfo != NULL); | |
995 | |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
996 status_str = (gchar *)data; |
16395 | 997 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
998 body_str = msim_msg_get_string(userinfo, "body"); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
999 body = msim_parse_body(body_str); |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1000 g_free(body_str); |
16738
cd4a6bd9f69e
Use g_return_if_fail() instead of g_assert(), as to not crash the whole program.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16737
diff
changeset
|
1001 g_return_if_fail(body != NULL); |
16395 | 1002 |
1003 username = g_hash_table_lookup(body, "UserName"); | |
1004 /* Note: DisplayName doesn't seem to be resolvable. It could be displayed on | |
1005 * the buddy list, if the UserID was stored along with it. */ | |
1006 | |
1007 if (!username) | |
1008 { | |
16397 | 1009 purple_debug_info("msim", "msim_status_cb: no username?!\n"); |
16395 | 1010 return; |
1011 } | |
1012 | |
16405
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1013 purple_debug_info("msim", |
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1014 "msim_status_cb: updating status for <%s> to <%s>\n", |
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1015 username, status_str); |
16395 | 1016 |
17346
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1017 /* TODO: generic functions to split into a GList, part of MsimMessage */ |
16395 | 1018 status_array = g_strsplit(status_str, "|", 0); |
1019 for (list = NULL, i = 0; | |
1020 status_array[i]; | |
1021 i++) | |
1022 { | |
17346
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1023 /* Note: this adds the 0th ordinal too, which might not be a value |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1024 * at all (the 0 in the 0|1|2|3... status fields, but 0 always appears blank). |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1025 */ |
16395 | 1026 list = g_list_append(list, status_array[i]); |
1027 } | |
1028 | |
17346
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1029 /* Example fields: |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1030 * |s|0|ss|Offline |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1031 * |s|1|ss|:-)|ls||ip|0|p|0 |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1032 * |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1033 * TODO: write list support in MsimMessage, and use it here. |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1034 */ |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1035 |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1036 status_code = atoi(g_list_nth_data(list, MSIM_STATUS_ORDINAL_ONLINE)); |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1037 purple_debug_info("msim", "msim_status_cb: %s's status code = %d\n", username, status_code); |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1038 status_headline = g_list_nth_data(list, MSIM_STATUS_ORDINAL_HEADLINE); |
16395 | 1039 |
16397 | 1040 blist = purple_get_blist(); |
16395 | 1041 |
1042 /* Add buddy if not found */ | |
16397 | 1043 buddy = purple_find_buddy(session->account, username); |
16395 | 1044 if (!buddy) |
1045 { | |
16397 | 1046 /* TODO: purple aliases, userids and usernames */ |
16405
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1047 purple_debug_info("msim", |
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1048 "msim_status: making new buddy for %s\n", username); |
16397 | 1049 buddy = purple_buddy_new(session->account, username, NULL); |
16395 | 1050 |
1051 /* TODO: sometimes (when click on it), buddy list disappears. Fix. */ | |
16397 | 1052 purple_blist_add_buddy(buddy, NULL, NULL, NULL); |
16395 | 1053 } else { |
16397 | 1054 purple_debug_info("msim", "msim_status: found buddy %s\n", username); |
16395 | 1055 } |
1056 | |
17346
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1057 /* TODO: show headline */ |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1058 |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1059 /* Set user status */ |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1060 switch (status_code) |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1061 { |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1062 case 1: purple_status_code = PURPLE_STATUS_AVAILABLE; |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1063 break; |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1064 case 0: purple_status_code = PURPLE_STATUS_OFFLINE; |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1065 break; |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1066 default: |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1067 purple_debug_info("msim", "msim_status_cb for %s, unknown status code %d\n", |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1068 username, status_code); |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1069 purple_status_code = PURPLE_STATUS_AVAILABLE; |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1070 } |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1071 purple_prpl_got_user_status(session->account, username, purple_primitive_get_id_from_type(purple_status_code), NULL); |
16395 | 1072 |
1073 g_strfreev(status_array); | |
1074 g_list_free(list); | |
1075 g_hash_table_destroy(body); | |
17340
9ecd2bb0ecc1
Fix double-free crash when sending messages (typo). Works again.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17337
diff
changeset
|
1076 /* msim_msg_free(userinfo); TODO: right? */ |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1077 /* Do not free status_str - it will currently be freed by g_hash_table_destroy |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1078 * on session->user_lookup_cb_data. But this is questionable (TODO: unask) since |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1079 * sometimes user_lookup_cb_data stores integers in gpointers, and sometimes |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1080 * real gpointers that need to be freed, like our status_str. |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1081 */ |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1082 /* g_free(status_str); */ |
16395 | 1083 } |
1084 | |
1085 /** | |
1086 * Process incoming status messages. | |
1087 * | |
1088 * @param session | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1089 * @param msg Status update message. |
16395 | 1090 * |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1091 * @return 0, since 'msg' can be freed. |
16395 | 1092 */ |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1093 int msim_status(MsimSession *session, MsimMessage *msg) |
16395 | 1094 { |
1095 gchar *status_str; | |
1096 gchar *userid; | |
1097 | |
1098 g_return_val_if_fail(MSIM_SESSION_VALID(session), 0); | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1099 g_return_val_if_fail(msg != NULL, 0); |
16395 | 1100 |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1101 /* TODO: free */ |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1102 status_str = msim_msg_get_string(msg, "msg"); |
16395 | 1103 if (!status_str) |
1104 { | |
16745
3f53f8f502b2
Replacement magic numbers by symbolic constants.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16744
diff
changeset
|
1105 purple_debug_info("msim", "msim_status: bm is status but no status msg\n"); |
16395 | 1106 return 0; |
1107 } | |
1108 | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1109 /* TODO: free */ |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1110 userid = msim_msg_get_string(msg, "f"); |
16395 | 1111 if (!userid) |
1112 { | |
16745
3f53f8f502b2
Replacement magic numbers by symbolic constants.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16744
diff
changeset
|
1113 purple_debug_info("msim", "msim_status: bm is status but no f field\n"); |
16395 | 1114 return 0; |
1115 } | |
1116 | |
1117 /* TODO: if buddies were identified on buddy list by uid, wouldn't have to lookup | |
1118 * before updating the status! Much more efficient. */ | |
16405
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1119 purple_debug_info("msim", |
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1120 "msim_status: got status msg <%s> for <%s>, scheduling lookup\n", |
16395 | 1121 status_str, userid); |
1122 | |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1123 /* Actually update status, once username is obtained. |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1124 * status_str() will currently be freed by g_hash_table_destroy() on |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1125 * user_lookup_cb_data (TODO: this is questionable, since it can also |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1126 * store gpointers. Fix this, and the 2 other TODOs of the same problem.) |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1127 */ |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1128 msim_lookup_user(session, userid, msim_status_cb, status_str); |
16395 | 1129 |
1130 return 0; | |
1131 } | |
1132 | |
1133 | |
1134 | |
1135 /** | |
1136 * Callback when input available. | |
1137 * | |
16397 | 1138 * @param gc_uncasted A PurpleConnection pointer. |
16395 | 1139 * @param source File descriptor. |
16397 | 1140 * @param cond PURPLE_INPUT_READ |
16395 | 1141 * |
1142 * Reads the input, and dispatches calls msim_process to handle it. | |
1143 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1144 void msim_input_cb(gpointer gc_uncasted, gint source, PurpleInputCondition cond) |
16395 | 1145 { |
16397 | 1146 PurpleConnection *gc; |
1147 PurpleAccount *account; | |
16395 | 1148 MsimSession *session; |
1149 gchar *end; | |
1150 int n; | |
1151 | |
1152 g_return_if_fail(gc_uncasted != NULL); | |
1153 g_return_if_fail(source >= 0); /* Note: 0 is a valid fd */ | |
1154 | |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
1155 gc = (PurpleConnection *)(gc_uncasted); |
16397 | 1156 account = purple_connection_get_account(gc); |
16395 | 1157 session = gc->proto_data; |
1158 | |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1159 g_return_if_fail(cond == PURPLE_INPUT_READ); |
16395 | 1160 g_return_if_fail(MSIM_SESSION_VALID(session)); |
1161 | |
1162 /* Only can handle so much data at once... | |
1163 * If this happens, try recompiling with a higher MSIM_READ_BUF_SIZE. | |
1164 * Should be large enough to hold the largest protocol message. | |
1165 */ | |
1166 if (session->rxoff == MSIM_READ_BUF_SIZE) | |
1167 { | |
16397 | 1168 purple_debug_error("msim", "msim_input_cb: %d-byte read buffer full!\n", |
16395 | 1169 MSIM_READ_BUF_SIZE); |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
1170 purple_connection_error(gc, _("Read buffer full")); |
16395 | 1171 /* TODO: fix 100% CPU after closing */ |
1172 close(source); | |
1173 return; | |
1174 } | |
1175 | |
16397 | 1176 purple_debug_info("msim", "buffer at %d (max %d), reading up to %d\n", |
16405
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1177 session->rxoff, MSIM_READ_BUF_SIZE, |
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1178 MSIM_READ_BUF_SIZE - session->rxoff); |
16395 | 1179 |
1180 /* Read into buffer. On Win32, need recv() not read(). session->fd also holds | |
1181 * the file descriptor, but it sometimes differs from the 'source' parameter. | |
1182 */ | |
1183 n = recv(session->fd, session->rxbuf + session->rxoff, MSIM_READ_BUF_SIZE - session->rxoff, 0); | |
1184 | |
1185 if (n < 0 && errno == EAGAIN) | |
1186 { | |
1187 return; | |
1188 } | |
1189 else if (n < 0) | |
1190 { | |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
1191 purple_connection_error(gc, _("Read error")); |
16397 | 1192 purple_debug_error("msim", "msim_input_cb: read error, ret=%d, " |
16395 | 1193 "error=%s, source=%d, fd=%d (%X))\n", |
1194 n, strerror(errno), source, session->fd, session->fd); | |
1195 close(source); | |
1196 return; | |
1197 } | |
1198 else if (n == 0) | |
1199 { | |
16397 | 1200 purple_debug_info("msim", "msim_input_cb: server disconnected\n"); |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
1201 purple_connection_error(gc, _("Server has disconnected")); |
16395 | 1202 return; |
1203 } | |
1204 | |
1205 /* Null terminate */ | |
1206 session->rxbuf[session->rxoff + n] = 0; | |
1207 | |
1208 /* Check for embedded NULs. I don't handle them, and they shouldn't occur. */ | |
1209 if (strlen(session->rxbuf + session->rxoff) != n) | |
1210 { | |
1211 /* Occurs after login, but it is not a null byte. */ | |
16397 | 1212 purple_debug_info("msim", "msim_input_cb: strlen=%d, but read %d bytes" |
16405
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1213 "--null byte encountered?\n", |
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1214 strlen(session->rxbuf + session->rxoff), n); |
16397 | 1215 //purple_connection_error(gc, "Invalid message - null byte on input"); |
16395 | 1216 return; |
1217 } | |
1218 | |
1219 session->rxoff += n; | |
16397 | 1220 purple_debug_info("msim", "msim_input_cb: read=%d\n", n); |
16395 | 1221 |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
1222 #ifdef MSIM_DEBUG_RXBUF |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
1223 purple_debug_info("msim", "buf=<%s>\n", session->rxbuf); |
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
1224 #endif |
16395 | 1225 |
1226 /* Look for \\final\\ end markers. If found, process message. */ | |
1227 while((end = strstr(session->rxbuf, MSIM_FINAL_STRING))) | |
1228 { | |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1229 MsimMessage *msg; |
16395 | 1230 |
16736
58cd11fcd84f
Re-add RC4 code from Samba, whose use is enabled by not defining
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16734
diff
changeset
|
1231 #ifdef MSIM_DEBUG_RXBUF |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
1232 purple_debug_info("msim", "in loop: buf=<%s>\n", session->rxbuf); |
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
1233 #endif |
16395 | 1234 *end = 0; |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1235 msg = msim_parse(g_strdup(session->rxbuf)); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1236 if (!msg) |
16395 | 1237 { |
16405
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1238 purple_debug_info("msim", "msim_input_cb: couldn't parse <%s>\n", |
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1239 session->rxbuf); |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
1240 purple_connection_error(gc, _("Unparseable message")); |
16395 | 1241 } |
1242 else | |
1243 { | |
1244 /* Process message. Returns 0 to free */ | |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1245 if (msim_process(gc, msg) == 0) |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1246 msim_msg_free(msg); |
16395 | 1247 } |
1248 | |
1249 /* Move remaining part of buffer to beginning. */ | |
1250 session->rxoff -= strlen(session->rxbuf) + strlen(MSIM_FINAL_STRING); | |
1251 memmove(session->rxbuf, end + strlen(MSIM_FINAL_STRING), | |
1252 MSIM_READ_BUF_SIZE - (end + strlen(MSIM_FINAL_STRING) - session->rxbuf)); | |
1253 | |
1254 /* Clear end of buffer */ | |
1255 //memset(end, 0, MSIM_READ_BUF_SIZE - (end - session->rxbuf)); | |
1256 } | |
1257 } | |
1258 | |
1259 /** | |
1260 * Callback when connected. Sets up input handlers. | |
1261 * | |
16397 | 1262 * @param data A PurpleConnection pointer. |
16395 | 1263 * @param source File descriptor. |
1264 * @param error_message | |
1265 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1266 void msim_connect_cb(gpointer data, gint source, const gchar *error_message) |
16395 | 1267 { |
16397 | 1268 PurpleConnection *gc; |
16395 | 1269 MsimSession *session; |
1270 | |
1271 g_return_if_fail(data != NULL); | |
1272 | |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
1273 gc = (PurpleConnection *)data; |
16395 | 1274 session = gc->proto_data; |
1275 | |
1276 if (source < 0) | |
1277 { | |
16739
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
1278 purple_connection_error(gc, _("Couldn't connect to host")); |
8f6dcd5e9298
Use _ for translations in msimprpl. See #648.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16738
diff
changeset
|
1279 purple_connection_error(gc, g_strdup_printf(_("Couldn't connect to host: %s (%d)"), |
16395 | 1280 error_message, source)); |
1281 return; | |
1282 } | |
1283 | |
1284 session->fd = source; | |
1285 | |
16397 | 1286 gc->inpa = purple_input_add(source, PURPLE_INPUT_READ, msim_input_cb, gc); |
16395 | 1287 } |
1288 | |
1289 /* Session methods */ | |
1290 | |
1291 /** | |
1292 * Create a new MSIM session. | |
1293 * | |
1294 * @param acct The account to create the session from. | |
1295 * | |
1296 * @return Pointer to a new session. Free with msim_session_destroy. | |
1297 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1298 MsimSession *msim_session_new(PurpleAccount *acct) |
16395 | 1299 { |
1300 MsimSession *session; | |
1301 | |
1302 g_return_val_if_fail(acct != NULL, NULL); | |
1303 | |
1304 session = g_new0(MsimSession, 1); | |
1305 | |
1306 session->magic = MSIM_SESSION_STRUCT_MAGIC; | |
1307 session->account = acct; | |
16397 | 1308 session->gc = purple_account_get_connection(acct); |
16395 | 1309 session->fd = -1; |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
1310 session->user_lookup_cb = g_hash_table_new_full(g_direct_hash, |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1311 g_direct_equal, NULL, NULL); /* do NOT free function pointers! (values) */ |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
1312 session->user_lookup_cb_data = g_hash_table_new_full(g_direct_hash, |
17337
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1313 g_direct_equal, NULL, g_free);/* TODO: we don't know what the values are, |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1314 they could be integers inside gpointers |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1315 or strings, but we free them anyway. |
d3e17c9d16e9
Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17323
diff
changeset
|
1316 Figure this out, once free cache. */ |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
1317 session->user_lookup_cache = g_hash_table_new_full(g_str_hash, g_str_equal, |
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
1318 g_free, (GDestroyNotify)g_hash_table_destroy); |
16395 | 1319 session->rxoff = 0; |
1320 session->rxbuf = g_new0(gchar, MSIM_READ_BUF_SIZE); | |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
1321 session->next_rid = 1; |
16395 | 1322 |
1323 return session; | |
1324 } | |
1325 | |
1326 /** | |
1327 * Free a session. | |
1328 * | |
1329 * @param session The session to destroy. | |
1330 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1331 void msim_session_destroy(MsimSession *session) |
16395 | 1332 { |
1333 g_return_if_fail(MSIM_SESSION_VALID(session)); | |
1334 | |
1335 session->magic = -1; | |
1336 | |
1337 g_free(session->rxbuf); | |
1338 g_free(session->userid); | |
1339 g_free(session->sesskey); | |
1340 | |
1341 g_free(session); | |
1342 } | |
16406
8063f163f411
Add MySpaceIM header file and reorganize functions.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16405
diff
changeset
|
1343 |
16395 | 1344 |
1345 | |
1346 /** | |
1347 * Close the connection. | |
1348 * | |
1349 * @param gc The connection. | |
1350 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1351 void msim_close(PurpleConnection *gc) |
16395 | 1352 { |
1353 g_return_if_fail(gc != NULL); | |
1354 | |
1355 msim_session_destroy(gc->proto_data); | |
1356 } | |
1357 | |
1358 | |
1359 /** | |
1360 * Check if a string is a userid (all numeric). | |
1361 * | |
1362 * @param user The user id, email, or name. | |
1363 * | |
1364 * @return TRUE if is userid, FALSE if not. | |
1365 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1366 gboolean msim_is_userid(const gchar *user) |
16395 | 1367 { |
1368 g_return_val_if_fail(user != NULL, FALSE); | |
1369 | |
1370 return strspn(user, "0123456789") == strlen(user); | |
1371 } | |
1372 | |
1373 /** | |
1374 * Check if a string is an email address (contains an @). | |
1375 * | |
1376 * @param user The user id, email, or name. | |
1377 * | |
1378 * @return TRUE if is an email, FALSE if not. | |
1379 * | |
1380 * This function is not intended to be used as a generic | |
1381 * means of validating email addresses, but to distinguish | |
1382 * between a user represented by an email address from | |
1383 * other forms of identification. | |
1384 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1385 gboolean msim_is_email(const gchar *user) |
16395 | 1386 { |
1387 g_return_val_if_fail(user != NULL, FALSE); | |
1388 | |
1389 return strchr(user, '@') != NULL; | |
1390 } | |
1391 | |
1392 | |
1393 /** | |
1394 * Asynchronously lookup user information, calling callback when receive result. | |
1395 * | |
1396 * @param session | |
1397 * @param user The user id, email address, or username. | |
1398 * @param cb Callback, called with user information when available. | |
1399 * @param data An arbitray data pointer passed to the callback. | |
1400 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1401 void msim_lookup_user(MsimSession *session, const gchar *user, MSIM_USER_LOOKUP_CB cb, gpointer data) |
16395 | 1402 { |
1403 gchar *field_name; | |
1404 guint rid, cmd, dsn, lid; | |
1405 | |
1406 g_return_if_fail(MSIM_SESSION_VALID(session)); | |
1407 g_return_if_fail(user != NULL); | |
1408 g_return_if_fail(cb != NULL); | |
1409 | |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1410 purple_debug_info("msim", "msim_lookup_userid: " |
16405
47e07438f01c
Use g_convert for UTF-16LE conversion instead of converting manually.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16403
diff
changeset
|
1411 "asynchronously looking up <%s>\n", user); |
16395 | 1412 |
1413 /* TODO: check if this user's info was cached and fresh; if so return immediately */ | |
1414 #if 0 | |
1415 /* If already know userid, then call callback immediately */ | |
1416 cached_userid = g_hash_table_lookup(session->userid_cache, who); | |
1417 if (cached_userid && !by_userid) | |
1418 { | |
1419 cb(cached_userid, NULL, NULL, data); | |
1420 return; | |
1421 } | |
1422 #endif | |
1423 | |
16408
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
1424 rid = session->next_rid; |
bb649c52fc19
Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16407
diff
changeset
|
1425 ++session->next_rid; |
16395 | 1426 |
1427 /* Setup callback. Response will be associated with request using 'rid'. */ | |
1428 g_hash_table_insert(session->user_lookup_cb, GUINT_TO_POINTER(rid), cb); | |
1429 g_hash_table_insert(session->user_lookup_cb_data, GUINT_TO_POINTER(rid), data); | |
1430 | |
1431 /* Send request */ | |
1432 | |
17343
58b4d103a5b8
Use symbolic constants for persist messages.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17342
diff
changeset
|
1433 cmd = MSIM_CMD_GET; |
16395 | 1434 |
1435 if (msim_is_userid(user)) | |
1436 { | |
1437 field_name = "UserID"; | |
17343
58b4d103a5b8
Use symbolic constants for persist messages.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17342
diff
changeset
|
1438 dsn = MG_MYSPACE_INFO_BY_ID_DSN; |
58b4d103a5b8
Use symbolic constants for persist messages.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17342
diff
changeset
|
1439 lid = MG_MYSPACE_INFO_BY_ID_LID; |
16395 | 1440 } else if (msim_is_email(user)) { |
1441 field_name = "Email"; | |
17343
58b4d103a5b8
Use symbolic constants for persist messages.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17342
diff
changeset
|
1442 dsn = MG_MYSPACE_INFO_BY_STRING_DSN; |
58b4d103a5b8
Use symbolic constants for persist messages.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17342
diff
changeset
|
1443 lid = MG_MYSPACE_INFO_BY_STRING_LID; |
16395 | 1444 } else { |
1445 field_name = "UserName"; | |
17343
58b4d103a5b8
Use symbolic constants for persist messages.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17342
diff
changeset
|
1446 dsn = MG_MYSPACE_INFO_BY_STRING_DSN; |
58b4d103a5b8
Use symbolic constants for persist messages.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17342
diff
changeset
|
1447 lid = MG_MYSPACE_INFO_BY_STRING_LID; |
16395 | 1448 } |
1449 | |
1450 | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1451 msim_send(session, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1452 "persist", MSIM_TYPE_INTEGER, 1, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1453 "sesskey", MSIM_TYPE_STRING, g_strdup(session->sesskey), |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1454 "cmd", MSIM_TYPE_INTEGER, 1, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1455 "dsn", MSIM_TYPE_INTEGER, dsn, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1456 "uid", MSIM_TYPE_STRING, g_strdup(session->userid), |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1457 "lid", MSIM_TYPE_INTEGER, lid, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1458 "rid", MSIM_TYPE_INTEGER, rid, |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1459 /* TODO: dictionary field type */ |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1460 "body", MSIM_TYPE_STRING, g_strdup_printf("%s=%s", field_name, user), |
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1461 NULL); |
16395 | 1462 } |
1463 | |
1464 | |
1465 /** | |
1466 * Obtain the status text for a buddy. | |
1467 * | |
1468 * @param buddy The buddy to obtain status text for. | |
1469 * | |
16738
cd4a6bd9f69e
Use g_return_if_fail() instead of g_assert(), as to not crash the whole program.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16737
diff
changeset
|
1470 * @return Status text, or NULL if error. |
16395 | 1471 * |
1472 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1473 char *msim_status_text(PurpleBuddy *buddy) |
16395 | 1474 { |
1475 MsimSession *session; | |
1476 GHashTable *userinfo; | |
1477 gchar *display_name; | |
1478 | |
1479 g_return_val_if_fail(buddy != NULL, NULL); | |
1480 | |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
1481 session = (MsimSession *)buddy->account->gc->proto_data; |
16738
cd4a6bd9f69e
Use g_return_if_fail() instead of g_assert(), as to not crash the whole program.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16737
diff
changeset
|
1482 g_return_val_if_fail(MSIM_SESSION_VALID(session), NULL); |
cd4a6bd9f69e
Use g_return_if_fail() instead of g_assert(), as to not crash the whole program.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16737
diff
changeset
|
1483 g_return_val_if_fail(session->user_lookup_cache != NULL, NULL); |
16395 | 1484 |
1485 userinfo = g_hash_table_lookup(session->user_lookup_cache, buddy->name); | |
1486 if (!userinfo) | |
1487 { | |
1488 return g_strdup(""); | |
1489 } | |
1490 | |
1491 display_name = g_hash_table_lookup(userinfo, "DisplayName"); | |
16738
cd4a6bd9f69e
Use g_return_if_fail() instead of g_assert(), as to not crash the whole program.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16737
diff
changeset
|
1492 g_return_val_if_fail(display_name != NULL, NULL); |
16395 | 1493 |
1494 return g_strdup(display_name); | |
1495 } | |
1496 | |
1497 /** | |
1498 * Obtain the tooltip text for a buddy. | |
1499 * | |
1500 * @param buddy Buddy to obtain tooltip text on. | |
1501 * @param user_info Variable modified to have the tooltip text. | |
1502 * @param full TRUE if should obtain full tooltip text. | |
1503 * | |
1504 */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1505 void msim_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean full) |
16395 | 1506 { |
1507 g_return_if_fail(buddy != NULL); | |
1508 g_return_if_fail(user_info != NULL); | |
1509 | |
16397 | 1510 if (PURPLE_BUDDY_IS_ONLINE(buddy)) |
16395 | 1511 { |
1512 MsimSession *session; | |
1513 GHashTable *userinfo; | |
1514 | |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
1515 session = (MsimSession *)buddy->account->gc->proto_data; |
16395 | 1516 |
16738
cd4a6bd9f69e
Use g_return_if_fail() instead of g_assert(), as to not crash the whole program.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16737
diff
changeset
|
1517 g_return_if_fail(MSIM_SESSION_VALID(session)); |
cd4a6bd9f69e
Use g_return_if_fail() instead of g_assert(), as to not crash the whole program.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16737
diff
changeset
|
1518 g_return_if_fail(session->user_lookup_cache); |
16395 | 1519 |
1520 userinfo = g_hash_table_lookup(session->user_lookup_cache, buddy->name); | |
1521 | |
16738
cd4a6bd9f69e
Use g_return_if_fail() instead of g_assert(), as to not crash the whole program.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16737
diff
changeset
|
1522 g_return_if_fail(userinfo != NULL); |
16395 | 1523 |
1524 // TODO: if (full), do something different | |
16397 | 1525 purple_notify_user_info_add_pair(user_info, "User ID", g_hash_table_lookup(userinfo, "UserID")); |
1526 purple_notify_user_info_add_pair(user_info, "Display Name", g_hash_table_lookup(userinfo, "DisplayName")); | |
1527 purple_notify_user_info_add_pair(user_info, "User Name", g_hash_table_lookup(userinfo, "UserName")); | |
1528 purple_notify_user_info_add_pair(user_info, "Total Friends", g_hash_table_lookup(userinfo, "TotalFriends")); | |
1529 purple_notify_user_info_add_pair(user_info, "Song", | |
16395 | 1530 g_strdup_printf("%s - %s", |
16749
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
1531 (gchar *)g_hash_table_lookup(userinfo, "BandName"), |
0fa4a3e9b318
Stylistic improvements - use type *name instead of type* name for pointers
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16747
diff
changeset
|
1532 (gchar *)g_hash_table_lookup(userinfo, "SongName"))); |
16395 | 1533 } |
1534 } | |
1535 | |
16397 | 1536 /** Callbacks called by Purple, to access this plugin. */ |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1537 PurplePluginProtocolInfo prpl_info = |
16395 | 1538 { |
1539 OPT_PROTO_MAIL_CHECK,/* options - TODO: myspace will notify of mail */ | |
1540 NULL, /* user_splits */ | |
1541 NULL, /* protocol_options */ | |
1542 NO_BUDDY_ICONS, /* icon_spec - TODO: eventually should add this */ | |
1543 msim_list_icon, /* list_icon */ | |
1544 NULL, /* list_emblems */ | |
1545 msim_status_text, /* status_text */ | |
1546 msim_tooltip_text, /* tooltip_text */ | |
1547 msim_status_types, /* status_types */ | |
1548 NULL, /* blist_node_menu */ | |
1549 NULL, /* chat_info */ | |
1550 NULL, /* chat_info_defaults */ | |
1551 msim_login, /* login */ | |
1552 msim_close, /* close */ | |
1553 msim_send_im, /* send_im */ | |
1554 NULL, /* set_info */ | |
1555 NULL, /* send_typing */ | |
1556 NULL, /* get_info */ | |
1557 NULL, /* set_away */ | |
1558 NULL, /* set_idle */ | |
1559 NULL, /* change_passwd */ | |
17346
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1560 NULL, /* add_buddy TODO */ |
16395 | 1561 NULL, /* add_buddies */ |
17346
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1562 NULL, /* remove_buddy TODO */ |
16395 | 1563 NULL, /* remove_buddies */ |
1564 NULL, /* add_permit */ | |
1565 NULL, /* add_deny */ | |
1566 NULL, /* rem_permit */ | |
1567 NULL, /* rem_deny */ | |
1568 NULL, /* set_permit_deny */ | |
1569 NULL, /* join_chat */ | |
1570 NULL, /* reject chat invite */ | |
1571 NULL, /* get_chat_name */ | |
1572 NULL, /* chat_invite */ | |
1573 NULL, /* chat_leave */ | |
1574 NULL, /* chat_whisper */ | |
1575 NULL, /* chat_send */ | |
1576 NULL, /* keepalive */ | |
1577 NULL, /* register_user */ | |
1578 NULL, /* get_cb_info */ | |
1579 NULL, /* get_cb_away */ | |
1580 NULL, /* alias_buddy */ | |
1581 NULL, /* group_buddy */ | |
1582 NULL, /* rename_group */ | |
1583 NULL, /* buddy_free */ | |
1584 NULL, /* convo_closed */ | |
1585 NULL, /* normalize */ | |
1586 NULL, /* set_buddy_icon */ | |
1587 NULL, /* remove_group */ | |
1588 NULL, /* get_cb_real_name */ | |
1589 NULL, /* set_chat_topic */ | |
1590 NULL, /* find_blist_chat */ | |
1591 NULL, /* roomlist_get_list */ | |
1592 NULL, /* roomlist_cancel */ | |
1593 NULL, /* roomlist_expand_category */ | |
1594 NULL, /* can_receive_file */ | |
1595 NULL, /* send_file */ | |
1596 NULL, /* new_xfer */ | |
1597 NULL, /* offline_message */ | |
1598 NULL, /* whiteboard_prpl_ops */ | |
1599 NULL, /* send_raw */ | |
16734
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
1600 NULL, /* roomlist_room_serialize */ |
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
1601 NULL, /* _purple_reserved1 */ |
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
1602 NULL, /* _purple_reserved2 */ |
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
1603 NULL, /* _purple_reserved3 */ |
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
1604 NULL /* _purple_reserved4 */ |
16395 | 1605 }; |
1606 | |
1607 | |
1608 | |
1609 /** Based on MSN's plugin info comments. */ | |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1610 PurplePluginInfo info = |
16395 | 1611 { |
16397 | 1612 PURPLE_PLUGIN_MAGIC, |
1613 PURPLE_MAJOR_VERSION, | |
1614 PURPLE_MINOR_VERSION, | |
17346
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1615 PURPLE_PLUGIN_PROTOCOL, /**< type */ |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1616 NULL, /**< ui_requirement */ |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1617 0, /**< flags */ |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1618 NULL, /**< dependencies */ |
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1619 PURPLE_PRIORITY_DEFAULT, /**< priority */ |
16395 | 1620 |
1621 "prpl-myspace", /**< id */ | |
1622 "MySpaceIM", /**< name */ | |
17346
73720427b132
Show online buddies on buddy list as online.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
17344
diff
changeset
|
1623 "0.6", /**< version */ |
16395 | 1624 /** summary */ |
1625 "MySpaceIM Protocol Plugin", | |
1626 /** description */ | |
1627 "MySpaceIM Protocol Plugin", | |
1628 "Jeff Connelly <myspaceim@xyzzy.cjb.net>", /**< author */ | |
1629 "http://developer.pidgin.im/wiki/MySpaceIM/", /**< homepage */ | |
1630 | |
16737
fc80e7b2540d
Check for RC4 in libpurple on plugin initialization.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16736
diff
changeset
|
1631 msim_load, /**< load */ |
16395 | 1632 NULL, /**< unload */ |
1633 NULL, /**< destroy */ | |
1634 NULL, /**< ui_info */ | |
1635 &prpl_info, /**< extra_info */ | |
1636 NULL, /**< prefs_info */ | |
1637 | |
1638 /* msim_actions */ | |
16734
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
1639 NULL, |
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
1640 |
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
1641 NULL, /**< reserved1 */ |
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
1642 NULL, /**< reserved2 */ |
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
1643 NULL, /**< reserved3 */ |
3b5037a93807
Add initializers for reserved fields in plugin and prpl structures.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16410
diff
changeset
|
1644 NULL /**< reserved4 */ |
16395 | 1645 }; |
1646 | |
16746
52357f6392a4
Add partial implementation of MsimMessage (not used anywhere yet).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16745
diff
changeset
|
1647 #include "message.h" |
52357f6392a4
Add partial implementation of MsimMessage (not used anywhere yet).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16745
diff
changeset
|
1648 |
16747
496855295bd7
Use MsimMessage via msim_send(), instead of msim_send_raw(). This is a more
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16746
diff
changeset
|
1649 void init_plugin(PurplePlugin *plugin) |
16744
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
1650 { |
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
1651 PurpleAccountOption *option; |
17323
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1652 #ifdef _TEST_MSIM_MSG |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1653 { |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1654 MsimMessage *msg; |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1655 |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1656 purple_debug_info("msim", "testing MsimMessage\n"); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1657 msg = msim_msg_new(); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1658 msg = msim_msg_append(msg, "bx", MSIM_TYPE_BINARY, g_string_new_len(g_strdup("XXX"), 3)); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1659 msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v1")); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1660 msg = msim_msg_append(msg, "k1", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(42)); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1661 msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v43")); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1662 msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v52/xxx\\yyy")); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1663 msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v7")); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1664 purple_debug_info("msim", "msg=%s\n", msim_msg_debug_string(msg)); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1665 purple_debug_info("msim", "msg=%s\n", msim_msg_pack(msg)); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1666 msim_msg_free(msg); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1667 exit(0); |
793301c04e3a
(Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16749
diff
changeset
|
1668 } |
16746
52357f6392a4
Add partial implementation of MsimMessage (not used anywhere yet).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16745
diff
changeset
|
1669 #endif |
16744
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
1670 |
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
1671 /* TODO: default to automatically try different ports. Make the user be |
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
1672 * able to set the first port to try (like LastConnectedPort in Windows client). */ |
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
1673 option = purple_account_option_string_new(_("Connect server"), "server", MSIM_SERVER); |
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
1674 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
1675 |
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
1676 option = purple_account_option_int_new(_("Connect port"), "port", MSIM_PORT); |
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
1677 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
a8e8482a2dc6
Clean up a few TODO's.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
16742
diff
changeset
|
1678 } |
16395 | 1679 |
16397 | 1680 PURPLE_INIT_PLUGIN(myspace, init_plugin, info); |