libpurple/protocols/myspace/myspace.c

Wed, 06 Jun 2007 04:38:03 +0000

author
Jeff Connelly <jeff2@soc.pidgin.im>
date
Wed, 06 Jun 2007 04:38:03 +0000
branch
soc.2007.msimprpl
changeset 17956
0b3393767f6d
parent 17955
70cfe01b0466
child 17957
bc5874ed7a09
permissions
-rw-r--r--

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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1 /* MySpaceIM Protocol Plugin
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
3 * \author Jeff Connelly
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
6 *
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
7 * Based on Purple's "C Plugin HOWTO" hello world example.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
10 * http://snarfed.org/space/purple+mock+protocol+plugin
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
11 * Copyright (C) 2004-2007, Ryan Barrett <mockprpl@ryanb.org>
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
12 *
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
13 * and some constructs also based on existing Purple plugins, which are:
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
14 * Copyright (C) 2003, Robbert Haarman <purple@inglorion.net>
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
15 * Copyright (C) 2003, Ethan Blanton <eblanton@cs.purdue.edu>
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
16 * Copyright (C) 2000-2003, Rob Flynn <rob@tgflinux.com>
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
17 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
18 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
19 * This program is free software; you can redistribute it and/or modify
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
20 * it under the terms of the GNU General Public License as published by
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
21 * the Free Software Foundation; either version 2 of the License, or
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
22 * (at your option) any later version.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
23 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
24 * This program is distributed in the hope that it will be useful,
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
27 * GNU General Public License for more details.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
28 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
29 * You should have received a copy of the GNU General Public License
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
30 * along with this program; if not, write to the Free Software
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
31 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
32 */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
33
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
34 #define PURPLE_PLUGIN
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
59 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
60
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
61 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
62 * Get possible user status types. Based on mockprpl.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
63 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
64 * @return GList of status types.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
67 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
72
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
73 types = NULL;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
96
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
97 return types;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
98 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
182
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
185 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
190 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
222 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
265 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
266 * Process a login challenge, sending a response.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
267 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
274 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
285
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
293
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
294 if (nc_len != 0x40)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
295 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
299 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
304
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
305 g_free(nc);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
318 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
627 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
628
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
866 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
878 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
879 MSIM_USER_LOOKUP_CB cb;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
880 gpointer data;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
886
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
887 /* Cache the user info. Currently, the GHashTable of user info in
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
888 * this cache never expires so is never freed. TODO: expire and destroy
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
889 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
890 * Some information never changes (username->userid map), some does.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
891 * TODO: Cache what doesn't change only
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
898 username = g_hash_table_lookup(body, "UserName");
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
899 if (username)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
903 g_hash_table_insert(session->user_lookup_cache, g_strdup(username), body);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
907 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
908
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
909 /* If a callback is registered for this userid lookup, call it. */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
910 cb = g_hash_table_lookup(session->user_lookup_cb, GUINT_TO_POINTER(rid));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
911 data = g_hash_table_lookup(session->user_lookup_cb_data, GUINT_TO_POINTER(rid));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
912
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
913 if (cb)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
919 g_hash_table_remove(session->user_lookup_cb, GUINT_TO_POINTER(rid));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
920 g_hash_table_remove(session->user_lookup_cb_data, GUINT_TO_POINTER(rid));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
924 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
928 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
929
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
930 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
931 * Handle an error from the server.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
932 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
952
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
953 purple_debug_info("msim", "msim_error: %s\n", full_errmsg);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
957 full_errmsg, NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
963 purple_connection_error(session->gc, full_errmsg);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
966 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
969 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
980 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
981 PurpleBuddyList *blist;
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
982 PurpleBuddy *buddy;
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
983 //PurpleStatus *status;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
984 gchar **status_array;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
989 gchar *username;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1001 /* Note: DisplayName doesn't seem to be resolvable. It could be displayed on
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1002 * the buddy list, if the UserID was stored along with it. */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1015 status_array = g_strsplit(status_str, "|", 0);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1016 for (list = NULL, i = 0;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1017 status_array[i];
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1018 i++)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1023 list = g_list_append(list, status_array[i]);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1024 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1036
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1037 blist = purple_get_blist();
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1038
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1039 /* Add buddy if not found */
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1040 buddy = purple_find_buddy(session->account, username);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1041 if (!buddy)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1042 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
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
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1046 buddy = purple_buddy_new(session->account, username, NULL);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1047
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1052 } else {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1053 purple_debug_info("msim", "msim_status: found buddy %s\n", username);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1054 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1071
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1075 g_list_free(list);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1078 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1279
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1280
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1281 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1282 * Callback when input available.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1283 *
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1284 * @param gc_uncasted A PurpleConnection pointer.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1285 * @param source File descriptor.
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1286 * @param cond PURPLE_INPUT_READ
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1291 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1292 PurpleConnection *gc;
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1293 PurpleAccount *account;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1294 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1295 gchar *end;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1296 int n;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1297
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1298 g_return_if_fail(gc_uncasted != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1299 g_return_if_fail(source >= 0); /* Note: 0 is a valid fd */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1302 account = purple_connection_get_account(gc);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1303 session = gc->proto_data;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1306 g_return_if_fail(MSIM_SESSION_VALID(session));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1307
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1308 /* Only can handle so much data at once...
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1309 * If this happens, try recompiling with a higher MSIM_READ_BUF_SIZE.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1310 * Should be large enough to hold the largest protocol message.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1311 */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1312 if (session->rxoff == MSIM_READ_BUF_SIZE)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1313 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1314 purple_debug_error("msim", "msim_input_cb: %d-byte read buffer full!\n",
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1317 /* TODO: fix 100% CPU after closing */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1318 close(source);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1319 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1320 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1321
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1325
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1326 /* Read into buffer. On Win32, need recv() not read(). session->fd also holds
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1327 * the file descriptor, but it sometimes differs from the 'source' parameter.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1328 */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1329 n = recv(session->fd, session->rxbuf + session->rxoff, MSIM_READ_BUF_SIZE - session->rxoff, 0);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1330
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1331 if (n < 0 && errno == EAGAIN)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1332 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1333 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1334 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1335 else if (n < 0)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1338 purple_debug_error("msim", "msim_input_cb: read error, ret=%d, "
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1339 "error=%s, source=%d, fd=%d (%X))\n",
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1340 n, strerror(errno), source, session->fd, session->fd);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1341 close(source);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1342 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1343 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1344 else if (n == 0)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1345 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1348 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1349 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1350
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1351 /* Null terminate */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1352 session->rxbuf[session->rxoff + n] = 0;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1353
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1354 /* Check for embedded NULs. I don't handle them, and they shouldn't occur. */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1355 if (strlen(session->rxbuf + session->rxoff) != n)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1356 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1357 /* Occurs after login, but it is not a null byte. */
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
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
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1361 //purple_connection_error(gc, "Invalid message - null byte on input");
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1362 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1363 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1364
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1365 session->rxoff += n;
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1366 purple_debug_info("msim", "msim_input_cb: read=%d\n", n);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1371
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1372 /* Look for \\final\\ end markers. If found, process message. */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1373 while((end = strstr(session->rxbuf, MSIM_FINAL_STRING)))
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1387 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1388 else
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1397 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1398
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1399 /* Move remaining part of buffer to beginning. */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1400 session->rxoff -= strlen(session->rxbuf) + strlen(MSIM_FINAL_STRING);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1401 memmove(session->rxbuf, end + strlen(MSIM_FINAL_STRING),
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1402 MSIM_READ_BUF_SIZE - (end + strlen(MSIM_FINAL_STRING) - session->rxbuf));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1403
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1404 /* Clear end of buffer */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1405 //memset(end, 0, MSIM_READ_BUF_SIZE - (end - session->rxbuf));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1406 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1407 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1408
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1409 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1410 * Callback when connected. Sets up input handlers.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1411 *
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1412 * @param data A PurpleConnection pointer.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1413 * @param source File descriptor.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1414 * @param error_message
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1417 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1418 PurpleConnection *gc;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1419 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1420
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1421 g_return_if_fail(data != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1424 session = gc->proto_data;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1425
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1426 if (source < 0)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1430 error_message, source));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1431 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1432 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1433
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1434 session->fd = source;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1435
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1436 gc->inpa = purple_input_add(source, PURPLE_INPUT_READ, msim_input_cb, gc);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1437 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1438
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1439 /* Session methods */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1440
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1441 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1442 * Create a new MSIM session.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1443 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1444 * @param acct The account to create the session from.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1445 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1446 * @return Pointer to a new session. Free with msim_session_destroy.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1449 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1450 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1451
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1452 g_return_val_if_fail(acct != NULL, NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1453
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1454 session = g_new0(MsimSession, 1);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1455
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1456 session->magic = MSIM_SESSION_STRUCT_MAGIC;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1457 session->account = acct;
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1458 session->gc = purple_account_get_connection(acct);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1469 session->rxoff = 0;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1472
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1473 return session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1474 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1475
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1476 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1477 * Free a session.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1478 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1479 * @param session The session to destroy.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1482 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1483 g_return_if_fail(MSIM_SESSION_VALID(session));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1484
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1485 session->magic = -1;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1486
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1487 g_free(session->rxbuf);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1488 g_free(session->userid);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1489
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1490 g_free(session);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1491 }
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1492
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1493
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1494
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1495 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1496 * Close the connection.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1497 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1498 * @param gc The connection.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1501 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1505
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1506 msim_session_destroy(gc->proto_data);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1507 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1508
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1509
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1510 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1511 * Check if a string is a userid (all numeric).
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1512 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1513 * @param user The user id, email, or name.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1514 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1515 * @return TRUE if is userid, FALSE if not.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1518 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1519 g_return_val_if_fail(user != NULL, FALSE);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1520
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1521 return strspn(user, "0123456789") == strlen(user);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1522 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1523
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1524 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1525 * Check if a string is an email address (contains an @).
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1526 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1527 * @param user The user id, email, or name.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1528 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1529 * @return TRUE if is an email, FALSE if not.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1530 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1531 * This function is not intended to be used as a generic
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1532 * means of validating email addresses, but to distinguish
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1533 * between a user represented by an email address from
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1534 * other forms of identification.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1537 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1538 g_return_val_if_fail(user != NULL, FALSE);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1539
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1540 return strchr(user, '@') != NULL;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1541 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1542
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1543
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1544 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1545 * Asynchronously lookup user information, calling callback when receive result.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1546 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1547 * @param session
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1548 * @param user The user id, email address, or username.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1549 * @param cb Callback, called with user information when available.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1550 * @param data An arbitray data pointer passed to the callback.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1554 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1555 gchar *field_name;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1556 guint rid, cmd, dsn, lid;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1557
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1558 g_return_if_fail(MSIM_SESSION_VALID(session));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1559 g_return_if_fail(user != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1560 g_return_if_fail(cb != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1567 /* TODO: check if this user's info was cached and fresh; if so return immediately */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1568 #if 0
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1569 /* If already know userid, then call callback immediately */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1570 cached_userid = g_hash_table_lookup(session->userid_cache, who);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1571 if (cached_userid && !by_userid)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1572 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1573 cb(cached_userid, NULL, NULL, data);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1574 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1575 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1576 #endif
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1580
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1581 /* Setup callback. Response will be associated with request using 'rid'. */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1582 g_hash_table_insert(session->user_lookup_cb, GUINT_TO_POINTER(rid), cb);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1583 g_hash_table_insert(session->user_lookup_cb_data, GUINT_TO_POINTER(rid), data);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1584
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1585 /* Send request */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1588
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1589 if (msim_is_userid(user))
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1590 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1594 } else if (msim_is_email(user)) {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1598 } else {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1602 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1603
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1616 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1617
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1618
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1619 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1620 * Obtain the status text for a buddy.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1621 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1622 * @param buddy The buddy to obtain status text for.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1625 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1628 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1629 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1630 GHashTable *userinfo;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1631 gchar *display_name;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1632
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1633 g_return_val_if_fail(buddy != NULL, NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1638
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1639 userinfo = g_hash_table_lookup(session->user_lookup_cache, buddy->name);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1640 if (!userinfo)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1641 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1642 return g_strdup("");
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1643 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1644
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1647
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1648 return g_strdup(display_name);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1649 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1650
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1651 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1652 * Obtain the tooltip text for a buddy.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1653 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1654 * @param buddy Buddy to obtain tooltip text on.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1655 * @param user_info Variable modified to have the tooltip text.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1656 * @param full TRUE if should obtain full tooltip text.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1657 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1660 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1661 g_return_if_fail(buddy != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1662 g_return_if_fail(user_info != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1663
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1664 if (PURPLE_BUDDY_IS_ONLINE(buddy))
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1665 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1666 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1667 GHashTable *userinfo;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1673
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1674 userinfo = g_hash_table_lookup(session->user_lookup_cache, buddy->name);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1677
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1678 // TODO: if (full), do something different
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1679 purple_notify_user_info_add_pair(user_info, "User ID", g_hash_table_lookup(userinfo, "UserID"));
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1680 purple_notify_user_info_add_pair(user_info, "Display Name", g_hash_table_lookup(userinfo, "DisplayName"));
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1681 purple_notify_user_info_add_pair(user_info, "User Name", g_hash_table_lookup(userinfo, "UserName"));
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1682 purple_notify_user_info_add_pair(user_info, "Total Friends", g_hash_table_lookup(userinfo, "TotalFriends"));
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1683 purple_notify_user_info_add_pair(user_info, "Song",
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1687 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1688 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1689
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1692 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1693 OPT_PROTO_MAIL_CHECK,/* options - TODO: myspace will notify of mail */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1694 NULL, /* user_splits */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1695 NULL, /* protocol_options */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1696 NO_BUDDY_ICONS, /* icon_spec - TODO: eventually should add this */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1697 msim_list_icon, /* list_icon */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1698 NULL, /* list_emblems */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1699 msim_status_text, /* status_text */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1700 msim_tooltip_text, /* tooltip_text */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1701 msim_status_types, /* status_types */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1702 NULL, /* blist_node_menu */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1703 NULL, /* chat_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1704 NULL, /* chat_info_defaults */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1705 msim_login, /* login */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1706 msim_close, /* close */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1707 msim_send_im, /* send_im */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1710 NULL, /* get_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1711 NULL, /* set_away */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1712 NULL, /* set_idle */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1717 NULL, /* remove_buddies */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1718 NULL, /* add_permit */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1719 NULL, /* add_deny */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1720 NULL, /* rem_permit */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1721 NULL, /* rem_deny */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1722 NULL, /* set_permit_deny */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1723 NULL, /* join_chat */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1724 NULL, /* reject chat invite */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1725 NULL, /* get_chat_name */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1726 NULL, /* chat_invite */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1727 NULL, /* chat_leave */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1728 NULL, /* chat_whisper */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1729 NULL, /* chat_send */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1730 NULL, /* keepalive */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1731 NULL, /* register_user */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1732 NULL, /* get_cb_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1733 NULL, /* get_cb_away */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1734 NULL, /* alias_buddy */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1735 NULL, /* group_buddy */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1736 NULL, /* rename_group */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1737 NULL, /* buddy_free */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1738 NULL, /* convo_closed */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1739 NULL, /* normalize */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1740 NULL, /* set_buddy_icon */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1741 NULL, /* remove_group */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1742 NULL, /* get_cb_real_name */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1743 NULL, /* set_chat_topic */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1744 NULL, /* find_blist_chat */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1745 NULL, /* roomlist_get_list */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1746 NULL, /* roomlist_cancel */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1747 NULL, /* roomlist_expand_category */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1748 NULL, /* can_receive_file */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1749 NULL, /* send_file */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1750 NULL, /* new_xfer */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1751 NULL, /* offline_message */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1752 NULL, /* whiteboard_prpl_ops */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1759 };
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1760
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1761
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1762
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1765 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1766 PURPLE_PLUGIN_MAGIC,
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1767 PURPLE_MAJOR_VERSION,
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1774
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1775 "prpl-myspace", /**< id */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1778 /** summary */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1779 "MySpaceIM Protocol Plugin",
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1780 /** description */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1781 "MySpaceIM Protocol Plugin",
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1782 "Jeff Connelly <myspaceim@xyzzy.cjb.net>", /**< author */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1783 "http://developer.pidgin.im/wiki/MySpaceIM/", /**< homepage */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1786 NULL, /**< unload */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1787 NULL, /**< destroy */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1788 NULL, /**< ui_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1789 &prpl_info, /**< extra_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1790 NULL, /**< prefs_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1791
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1799 };
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
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
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1833
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1834 PURPLE_INIT_PLUGIN(myspace, init_plugin, info);

mercurial