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