libpurple/protocols/myspace/myspace.c

Thu, 14 Jun 2007 01:53:58 +0000

author
Jeff Connelly <jeff2@soc.pidgin.im>
date
Thu, 14 Jun 2007 01:53:58 +0000
branch
soc.2007.msimprpl
changeset 17968
c29352b95fa6
parent 17967
a16d7668ab43
child 17969
9a043ea6bc44
permissions
-rw-r--r--

Add msim_offline_message() for offline message status. Always return TRUE,
though offline messages are not yet supported. Mainly for sending to users
whose status has not been retrieved yet.

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 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
264 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
265 * Process a login challenge, sending a response.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
266 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
267 * @param session
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
268 * @param msg Login challenge message.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
269 *
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
270 * @return TRUE if successful, FALSE if not
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
271 */
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
272 gboolean msim_login_challenge(MsimSession *session, MsimMessage *msg)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
273 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
274 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
275 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
276 guint response_len;
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
277 gchar *nc;
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
278 gsize nc_len;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
279
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
280 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
281 g_return_val_if_fail(msg != NULL, FALSE);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
282
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
283 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
284
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
285 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
286
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
287 g_return_val_if_fail(account != NULL, FALSE);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
288
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
289 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
290
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
291 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
292
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
293 if (nc_len != 0x40)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
294 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
295 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
296 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
297 return FALSE;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
298 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
299
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
300 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
301
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
302 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
303
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
304 g_free(nc);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
305
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
306 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
307 "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
308 /* 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
309 "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
310 /* 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
311 "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
312 "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
313 "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
314 "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
315 "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
316 NULL);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
317 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
318
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
319 #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
320 /* 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
321
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 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
324
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 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
326 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
327
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 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
329
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 $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
331
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 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
333 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
334 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
335 (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
336
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 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
338 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
339 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
340 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
341
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 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
343 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
344 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
345
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 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
348 */
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 #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
351 #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
352
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 /* 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
354 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
355 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
356 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
357
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 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
359 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
360 */
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 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
363 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
364 {
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 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
366 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
367 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
368
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 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
370 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
371
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 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
373 {
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 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
375 }
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 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
378 {
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 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
380
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 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
382
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 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
384 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
385 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
386 }
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 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
391 {
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 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
393 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
394 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
395 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
396
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 /* 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
398 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
399 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
400 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
401 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
402
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 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
404 {
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 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
406 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
407
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 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
409 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
410
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 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
412 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
413 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
414
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 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
416 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
417 }
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 /* 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
420 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
421 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
422 }
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 #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
425
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
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
427 /**
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
428 * 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
429 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
430 * @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
431 * @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
432 * @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
433 * @param response_len Will be written with response length.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
434 *
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
435 * @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
436 * when finished.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
437 */
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
438 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
439 gchar *email, gchar *password, guint *response_len)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
440 {
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
441 PurpleCipherContext *key_context;
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
442 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
443 #ifdef MSIM_USE_PURPLE_RC4
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
444 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
445 #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
446 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
447 #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
448
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
449 guchar hash_pw[HASH_SIZE];
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
450 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
451 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
452 guchar *data;
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_out;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
454 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
455 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
456 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
457 #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
458 int i;
0c2b32acc27a Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16334
diff changeset
459 #endif
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
460
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
461 /* 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
462 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
463 conv_error = NULL;
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
464 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
465 &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
466 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
467 if (conv_error != NULL)
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
468 {
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
469 purple_debug_error("msim",
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
470 "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
471 conv_error->message);
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
472 g_error_free(conv_error);
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
473 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
474
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
475 /* 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
476 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
477 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
478 g_free(password_utf16le);
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
479
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
480 #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
481 purple_debug_info("msim", "pwhash = ");
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
482 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
483 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
484 purple_debug_info("msim", "\n");
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
485 #endif
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
486
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
487 /* key = sha1(sha1(pw) + nonce2) */
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
488 sha1 = purple_ciphers_find_cipher("sha1");
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
489 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
490 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
491 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
492 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
493
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
494 #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
495 purple_debug_info("msim", "key = ");
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
496 for (i = 0; i < sizeof(key); i++)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
497 {
16335
0c2b32acc27a Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16334
diff changeset
498 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
499 }
16335
0c2b32acc27a Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16334
diff changeset
500 purple_debug_info("msim", "\n");
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
501 #endif
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
502
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
503 #ifdef MSIM_USE_PURPLE_RC4
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
504 rc4 = purple_cipher_context_new_by_name("rc4", NULL);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
505
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
506 /* 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
507 * 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
508 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
509 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
510 #endif
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
511
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
512 /* 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
513 * 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
514 * 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
515 * 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
516 * 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
517 * 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
518 */
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
519 /* rc4 encrypt:
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
520 * nonce1+email+IP list */
17901
ecaeb5f6e531 Replacement magic numbers by symbolic constants.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17900
diff changeset
521 data_len = NONCE_SIZE + strlen(email)
ecaeb5f6e531 Replacement magic numbers by symbolic constants.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17900
diff changeset
522 /* TODO: change to length of IP list */
ecaeb5f6e531 Replacement magic numbers by symbolic constants.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17900
diff changeset
523 + 25;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
524 data = g_new0(guchar, data_len);
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
525 memcpy(data, nonce, NONCE_SIZE);
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
526 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
527 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
528 /* 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
529 "\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
530
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
531 #ifdef MSIM_USE_PURPLE_RC4
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
532 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
533
17906
f87472f223aa Stylistic improvements - use type *name instead of type* name for pointers
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17903
diff changeset
534 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
535 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
536 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
537 #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
538 /* 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
539 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
540 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
541 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
542 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
543 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
544 #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
545
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
546 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
547
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
548 #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
549 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
550 #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
551
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
552 *response_len = data_out_len;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
553
17906
f87472f223aa Stylistic improvements - use type *name instead of type* name for pointers
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17903
diff changeset
554 return (gchar *)data_out;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
555 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
556
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
557 /**
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
558 * 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
559 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
560 * @param gc Connection.
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
561 * @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
562 * @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
563 * @param flags Flags.
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
564 *
17954
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
565 * @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
566 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
567 * 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
568 * 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
569 * 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
570 */
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
571 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
572 const char *message, PurpleMessageFlags flags)
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
573 {
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
574 MsimSession *session;
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
575
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
576 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
577 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
578 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
579
17944
62750b952935 Remove 'flags' from send_im_cb_struct - it was never needed.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17943
diff changeset
580 /* '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
581
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
582 session = gc->proto_data;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
583
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
584 /* TODO: const-correctness */
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
585 if (msim_send_bm(session, (char *)who, (char *)message, MSIM_BM_INSTANT))
17954
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
586 {
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
587 /* 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
588 * 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
589 * 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
590 * 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
591 */
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
592 return 1;
17954
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
593 } else {
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
594 return -1;
17954
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
595 }
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
596 /*
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
597 * 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
598 * 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
599 * IM windows when using this plugin:
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
600 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
601 * you@example.com: hello
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
602 * 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
603 * 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
604 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
605 * 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
606 * 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
607 */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
608 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
609
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
610 /** Send a buddy message of a given type.
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
611 *
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
612 * @param session
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
613 * @param who Username to send message to.
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
614 * @param text Message text to send. Not freed; will be copied.
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
615 * @param type A MSIM_BM_* constant.
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
616 *
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
617 * Buddy messages ('bm') include instant messages, action messages, status messages, etc.
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
618 */
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
619 gboolean msim_send_bm(MsimSession *session, gchar *who, gchar *text, int type)
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
620 {
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
621 gboolean rc;
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
622 MsimMessage *msg;
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
623 const char *from_username = session->account->username;
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
624
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
625 purple_debug_info("msim", "sending %d message from %s to %s: %s\n",
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
626 type, from_username, who, text);
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
627
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
628 msg = msim_msg_new(TRUE,
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
629 "bm", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(type),
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
630 "sesskey", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(session->sesskey),
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
631 /* 't' will be inserted here */
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
632 "cv", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(MSIM_CLIENT_VERSION),
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
633 "msg", MSIM_TYPE_STRING, g_strdup(text),
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
634 NULL);
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
635
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
636 rc = msim_postprocess_outgoing(session, msg, (char *)who, "t", "cv");
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
637
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
638 msim_msg_free(msg);
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
639
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
640 return rc;
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
641 }
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
642
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
643 /**
17934
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
644 * Handle an incoming instant message.
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
645 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
646 * @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
647 * @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
648 * 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
649 *
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
650 * @return TRUE if successful.
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
651 */
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
652 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
653 {
17951
313b994beb1d Transition msim_incoming_im() to the callbackless infrastructure. Remove
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17950
diff changeset
654 gchar *username;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
655
17951
313b994beb1d Transition msim_incoming_im() to the callbackless infrastructure. Remove
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17950
diff changeset
656 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
657
313b994beb1d Transition msim_incoming_im() to the callbackless infrastructure. Remove
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17950
diff changeset
658 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
659
17951
313b994beb1d Transition msim_incoming_im() to the callbackless infrastructure. Remove
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17950
diff changeset
660 g_free(username);
313b994beb1d Transition msim_incoming_im() to the callbackless infrastructure. Remove
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17950
diff changeset
661 /* 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
662 //msim_msg_free(msg);
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
663
17951
313b994beb1d Transition msim_incoming_im() to the callbackless infrastructure. Remove
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17950
diff changeset
664 return TRUE;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
665 }
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
666
17934
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
667 /**
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
668 * 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
669 *
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
670 * @param session
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
671 * @param msg
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
672 *
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
673 * @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
674 *
17952
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
675 * UNTESTED
17934
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
676 */
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
677 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
678 {
17952
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
679 gchar *msg_text, *username;
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
680 gboolean rc;
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
681
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
682 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
683 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
684
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
685 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
686
17952
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
687 if (strcmp(msg_text, "%typing%") == 0)
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 /* 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
690 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
691 rc = TRUE;
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
692 } 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
693 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
694 rc = TRUE;
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
695 } else {
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
696 /* 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
697 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
698 username, msg_text);
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
699 rc = FALSE;
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
700 }
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
701
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
702
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
703 g_free(msg_text);
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
704 g_free(username);
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
705
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
706 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
707 }
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
708
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 * 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
711 *
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
712 * @param gc
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
713 * @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
714 * @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
715 *
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
716 * 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
717 */
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
718 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
719 {
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
720 char *typing_str;
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
721 MsimSession *session;
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
722
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
723 session = (MsimSession *)gc->proto_data;
17934
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
724
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
725 switch (state)
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
726 {
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
727 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
728 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
729 break;
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
730
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
731 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
732 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
733 default:
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
734 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
735 break;
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
736 }
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
737
17953
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
738 purple_debug_info("msim", "msim_send_typing(%s): %d (%s)\n", name, state, typing_str);
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
739 msim_send_bm(session, (gchar *)name, typing_str, MSIM_BM_ACTION);
17934
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
740 return 0;
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
741 }
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
742
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
743 /** 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
744 *
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
745 * @param session
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
746 * @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
747 * @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
748 */
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
749 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
750 {
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
751 gchar *body_str;
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
752 GHashTable *body;
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
753 gchar *username;
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
754 MsimMessage *msg;
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
755
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
756 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
757 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
758 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
759 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
760 g_free(body_str);
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 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
763 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
764
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
765 msg = (MsimMessage *)data;
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
766 /* 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
767 * 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
768 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
769
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
770 msim_process(session, msg);
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
771
17951
313b994beb1d Transition msim_incoming_im() to the callbackless infrastructure. Remove
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17950
diff changeset
772 /* 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
773 //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
774 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
775 }
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
776
17958
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
777 #ifdef _MSIM_UID2USERNAME_WORKS
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
778 /* Lookup a username by userid, from buddy list.
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
779 *
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
780 * @param wanted_uid
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
781 *
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
782 * @return Username of wanted_uid, if on blist, or NULL. Static string.
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
783 *
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
784 * XXX WARNING: UNKNOWN MEMORY CORRUPTION HERE!
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
785 */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
786 static const gchar *msim_uid2username_from_blist(MsimSession *session, guint wanted_uid)
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
787 {
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
788 GSList *buddies, *buddies_head;
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
789
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
790 for (buddies = buddies_head = purple_find_buddies(session->account, NULL);
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
791 buddies;
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
792 buddies = g_slist_next(buddies))
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
793 {
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
794 PurpleBuddy *buddy;
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
795 guint uid;
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
796 gchar *name;
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
797
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
798 buddy = buddies->data;
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
799
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
800 uid = purple_blist_node_get_int(&buddy->node, "UserID");
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
801
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
802 /* name = buddy->name; */ /* crash */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
803 /* name = PURPLE_BLIST_NODE_NAME(&buddy->node); */ /* crash */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
804
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
805 /* XXX Is this right? Memory corruption here somehow. Happens only
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
806 * when return one of these values. */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
807 name = purple_buddy_get_name(buddy); /* crash */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
808 /* return name; */ /* crash (with above) */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
809
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
810 /* name = NULL; */ /* no crash */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
811 /* return NULL; */ /* no crash (with anything) */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
812
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
813 /* crash =
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
814 *** glibc detected *** pidgin: realloc(): invalid pointer: 0x0000000000d2aec0 ***
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
815 ======= Backtrace: =========
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
816 /lib/libc.so.6(__libc_realloc+0x323)[0x2b7bfc012e03]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
817 /usr/lib/libglib-2.0.so.0(g_realloc+0x31)[0x2b7bfba79a41]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
818 /usr/lib/libgtk-x11-2.0.so.0(gtk_tree_path_append_index+0x3a)[0x2b7bfa110d5a]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
819 /usr/lib/libgtk-x11-2.0.so.0[0x2b7bfa1287dc]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
820 /usr/lib/libgtk-x11-2.0.so.0[0x2b7bfa128e56]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
821 /usr/lib/libgtk-x11-2.0.so.0[0x2b7bfa128efd]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
822 /usr/lib/libglib-2.0.so.0(g_main_context_dispatch+0x1b4)[0x2b7bfba72c84]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
823 /usr/lib/libglib-2.0.so.0[0x2b7bfba75acd]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
824 /usr/lib/libglib-2.0.so.0(g_main_loop_run+0x1ca)[0x2b7bfba75dda]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
825 /usr/lib/libgtk-x11-2.0.so.0(gtk_main+0xa3)[0x2b7bfa0475f3]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
826 pidgin(main+0x8be)[0x46b45e]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
827 /lib/libc.so.6(__libc_start_main+0xf4)[0x2b7bfbfbf0c4]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
828 pidgin(gtk_widget_grab_focus+0x39)[0x429ab9]
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
829
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
830 or:
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
831 *** glibc detected *** /usr/local/bin/pidgin: malloc(): memory corruption (fast): 0x0000000000c10076 ***
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
832 (gdb) bt
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
833 #0 0x00002b4074ecd47b in raise () from /lib/libc.so.6
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
834 #1 0x00002b4074eceda0 in abort () from /lib/libc.so.6
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
835 #2 0x00002b4074f0453b in __fsetlocking () from /lib/libc.so.6
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
836 #3 0x00002b4074f0c810 in free () from /lib/libc.so.6
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
837 #4 0x00002b4074f0d6dd in malloc () from /lib/libc.so.6
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
838 #5 0x00002b4074974b5b in g_malloc () from /usr/lib/libglib-2.0.so.0
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
839 #6 0x00002b40749868bf in g_strdup () from /usr/lib/libglib-2.0.so.0
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
840 #7 0x00002b407810969f in msim_parse (
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
841 raw=0xd2a910 "\\bm\\100\\f\\3656574\\msg\\|s|0|ss|Offline")
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
842 at message.c:648
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
843 #8 0x00002b407810889c in msim_input_cb (gc_uncasted=0xcf92c0,
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
844 source=<value optimized out>, cond=<value optimized out>) at myspace.c:1478
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
845
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
846
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
847 Why is it crashing in msim_parse()'s g_strdup()?
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
848 */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
849
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
850
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
851 purple_debug_info("msim", "msim_uid2username_from_blist: %s's uid=%d (want %d)\n",
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
852 name, uid, wanted_uid);
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
853
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
854 if (uid == wanted_uid)
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
855 {
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
856 g_slist_free(buddies_head);
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
857
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
858 return name;
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
859 }
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
860 }
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
861
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
862 g_slist_free(buddies_head);
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
863 return NULL;
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
864 }
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
865
17958
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
866 #endif
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
867
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
868 /** 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
869 *
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
870 * 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
871 * 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
872 * once get username.
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
873 *
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
874 * @param session
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
875 * @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
876 */
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
877 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
878 {
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
879 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
880 {
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
881 guint uid;
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
882 const gchar *username;
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
883
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
884 /* 'f' = userid message is from, in buddy messages */
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
885 uid = msim_msg_get_integer(msg, "f");
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
886
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
887 /* TODO: Make caching work. Currently it is commented out because
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
888 * it crashes for unknown reasons, memory realloc error. */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
889 //#define _MSIM_UID2USERNAME_WORKS
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
890 #ifdef _MSIM_UID2USERNAME_WORKS
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
891 username = msim_uid2username_from_blist(session, uid);
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
892 #else
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
893 username = NULL;
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
894 #endif
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
895
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
896 if (username)
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
897 {
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
898 /* Know username already, use it. */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
899 purple_debug_info("msim", "msim_preprocess_incoming: tagging with _username=%s\n",
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
900 username);
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
901 msg = msim_msg_append(msg, "_username", MSIM_TYPE_STRING, g_strdup(username));
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
902 return msim_process(session, msg);
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
903
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
904 } else {
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
905 /* Send lookup request. */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
906 /* XXX: where is msim_msg_get_string() freed? make _strdup and _nonstrdup. */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
907 purple_debug_info("msim", "msim_incoming: sending lookup, setting up callback\n");
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
908 msim_lookup_user(session, msim_msg_get_string(msg, "f"), msim_incoming_resolved, msim_msg_clone(msg));
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
909
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
910 /* indeterminate */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
911 return TRUE;
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
912 }
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
913 } else {
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
914 /* 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
915 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
916 }
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
917 }
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
918
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
919 /**
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
920 * Process a message.
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
921 *
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
922 * @param session
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
923 * @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
924 *
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
925 * @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
926 */
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
927 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
928 {
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
929 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
930 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
931
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
932 #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
933 {
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
934 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
935 }
16335
0c2b32acc27a Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16334
diff changeset
936 #endif
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
937
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
938 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
939 {
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
940 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
941 } 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
942
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
943 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
944
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
945 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
946 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
947
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
948 /* Comes with: proof,profileid,userid,uniquenick -- all same values
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
949 * some of the time, but can vary. This is our own user ID. */
17960
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
950 session->userid = msim_msg_get_integer(msg, "userid");
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
951
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
952 /* TODO: fake our own userid being online */
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
953
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
954 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
955
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
956 return TRUE;
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
957 } 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
958 guint bm;
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
959
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
960 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
961 switch (bm)
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
962 {
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
963 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
964 return msim_status(session, msg);
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
965 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
966 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
967 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
968 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
969 default:
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
970 /* 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
971 * purposes during development. */
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
972 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
973 }
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
974 } 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
975 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
976 } 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
977 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
978 } 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
979 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
980 return TRUE;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
981 } else {
16335
0c2b32acc27a Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16334
diff changeset
982 /* 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
983 * 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
984 * 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
985 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
986 return FALSE;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
987 }
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
988 }
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
989
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
990 /** Store an field of information about a buddy. */
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
991 void msim_store_buddy_info_each(gpointer key, gpointer value, gpointer user_data)
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
992 {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
993 PurpleBuddy *buddy;
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
994 gchar *key_str, *value_str;
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
995
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
996 buddy = (PurpleBuddy *)user_data;
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
997 key_str = (gchar *)key;
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
998 value_str = (gchar *)value;
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
999
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1000 if (strcmp(key_str, "UserID") == 0 ||
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1001 strcmp(key_str, "Age") == 0 ||
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1002 strcmp(key_str, "TotalFriends") == 0)
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1003 {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1004 /* Certain fields get set as integers, instead of strings, for
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1005 * convenience. May not be the best way to do it, but having at least
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1006 * UserID as an integer is convenient...until it overflows! */
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1007 purple_blist_node_set_int(&buddy->node, key_str, atol(value_str));
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1008 } else {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1009 purple_blist_node_set_string(&buddy->node, key_str, value_str);
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1010 }
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1011 }
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1012
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1013 /** Save buddy information to the buddy list from a user info reply message.
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1014 *
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1015 * @param session
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1016 * @param msg The user information reply, with any amount of information.
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1017 *
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1018 * The information is saved to the buddy's blist node, which ends up in blist.xml.
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1019 */
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1020 gboolean msim_store_buddy_info(MsimSession *session, MsimMessage *msg)
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1021 {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1022 GHashTable *body;
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1023 gchar *username, *body_str, *uid;
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1024 PurpleBuddy *buddy;
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1025 guint rid;
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1026
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1027 rid = msim_msg_get_integer(msg, "rid");
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1028
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1029 g_return_val_if_fail(rid != 0, FALSE);
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1030
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1031 body_str = msim_msg_get_string(msg, "body");
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1032 g_return_val_if_fail(body_str != NULL, FALSE);
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1033 body = msim_parse_body(body_str);
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1034 g_free(body_str);
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1035
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1036 /* TODO: implement a better hash-like interface, and use it. */
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1037 username = g_hash_table_lookup(body, "UserName");
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1038
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1039 if (!username)
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1040 {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1041 purple_debug_info("msim",
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1042 "msim_process_reply: not caching body, no UserName\n");
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1043 return FALSE;
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1044 }
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1045
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1046 uid = g_hash_table_lookup(body, "UserID");
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1047 g_return_val_if_fail(uid, FALSE);
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1048
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1049 purple_debug_info("msim", "associating uid %d with username %s\n", uid, username);
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1050
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1051 buddy = purple_find_buddy(session->account, username);
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1052 if (buddy)
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1053 {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1054 g_hash_table_foreach(body, msim_store_buddy_info_each, buddy);
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1055 }
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1056
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1057 return TRUE;
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1058 }
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1059
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1060 /**
17934
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1061 * Process a persistance message reply from the server.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1062 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1063 * @param session
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1064 * @param msg Message reply from server.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1065 *
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1066 * @return TRUE if successful.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1067 */
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1068 gboolean msim_process_reply(MsimSession *session, MsimMessage *msg)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1069 {
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1070 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
1071 g_return_val_if_fail(msg != NULL, FALSE);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1072
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1073 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
1074 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1075 MSIM_USER_LOOKUP_CB cb;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1076 gpointer data;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1077 guint rid;
17958
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1078
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1079 msim_store_buddy_info(session, msg);
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1080
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1081 rid = msim_msg_get_integer(msg, "rid");
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1082
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1083 /* 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
1084 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
1085 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
1086
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1087 if (cb)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1088 {
16332
f0e987f024e0 Use g_convert for UTF-16LE conversion instead of converting manually.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16330
diff changeset
1089 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
1090 "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
1091 /* 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
1092 cb(session, msim_msg_clone(msg), data);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1093 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
1094 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
1095 } else {
16332
f0e987f024e0 Use g_convert for UTF-16LE conversion instead of converting manually.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16330
diff changeset
1096 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
1097 "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
1098 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1099 }
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1100
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1101 return TRUE;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1102 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1103
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1104 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1105 * Handle an error from the server.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1106 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1107 * @param session
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1108 * @param msg The message.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1109 *
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1110 * @return TRUE if successfully reported error.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1111 */
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1112 gboolean msim_error(MsimSession *session, MsimMessage *msg)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1113 {
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1114 gchar *errmsg, *full_errmsg;
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1115 guint err;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1116
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1117 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
1118 g_return_val_if_fail(msg != NULL, FALSE);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1119
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1120 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
1121 errmsg = msim_msg_get_string(msg, "errmsg");
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1122
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1123 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
1124
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1125 g_free(errmsg);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1126
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1127 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
1128
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1129 /* 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
1130 purple_notify_error(session->account, g_strdup(_("MySpaceIM Error")),
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1131 full_errmsg, NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1132
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1133 /* 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
1134 if (msim_msg_get(msg, "fatal"))
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1135 {
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1136 purple_debug_info("msim", "fatal error, closing\n");
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1137 purple_connection_error(session->gc, full_errmsg);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1138 close(session->fd);
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1139 /* 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
1140 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1141
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1142 return TRUE;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1143 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1144
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1145 /**
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1146 * Process incoming status messages.
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1147 *
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1148 * @param session
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1149 * @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
1150 *
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1151 * @return TRUE if successful.
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1152 */
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1153 gboolean msim_status(MsimSession *session, MsimMessage *msg)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1154 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1155 PurpleBuddyList *blist;
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1156 PurpleBuddy *buddy;
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1157 //PurpleStatus *status;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1158 gchar **status_array;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1159 GList *list;
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1160 gchar *status_headline;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1161 gchar *status_str;
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1162 gint i, status_code, purple_status_code;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1163 gchar *username;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1164
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1165 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
1166 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
1167
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
1168 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
1169 g_return_val_if_fail(status_str != NULL, FALSE);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1170
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1171 msim_msg_dump("msim_status msg=%s\n", msg);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1172
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1173 /* 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
1174 username = msim_msg_get_string(msg, "_username");
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1175 /* 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
1176 * 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
1177
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1178 if (username == NULL)
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1179 {
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1180 g_free(status_str);
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1181 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
1182 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1183
16332
f0e987f024e0 Use g_convert for UTF-16LE conversion instead of converting manually.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16330
diff changeset
1184 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
1185 "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
1186 username, status_str);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1187
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1188 /* 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
1189 status_array = g_strsplit(status_str, "|", 0);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1190 for (list = NULL, i = 0;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1191 status_array[i];
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1192 i++)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1193 {
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1194 /* 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
1195 * 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
1196 */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1197 list = g_list_append(list, status_array[i]);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1198 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1199
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1200 /* Example fields:
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1201 * |s|0|ss|Offline
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1202 * |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
1203 *
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1204 * 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
1205 */
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1206
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1207 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
1208 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
1209 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
1210
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1211 blist = purple_get_blist();
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1212
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1213 /* Add buddy if not found */
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1214 buddy = purple_find_buddy(session->account, username);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1215 if (!buddy)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1216 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1217 /* 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
1218 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
1219 "msim_status: making new buddy for %s\n", username);
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1220 buddy = purple_buddy_new(session->account, username, NULL);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1221
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1222 purple_blist_add_buddy(buddy, NULL, NULL, NULL);
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1223
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
1224 /* All buddies on list should have 'uid' integer associated with them. */
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1225 purple_blist_node_set_int(&buddy->node, "UserID", msim_msg_get_integer(msg, "f"));
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1226
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1227 msim_store_buddy_info(session, msg);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1228 } else {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1229 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
1230 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1231
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1232 purple_blist_node_set_string(&buddy->node, "Headline", status_headline);
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1233
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1234 /* Set user status */
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1235 switch (status_code)
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1236 {
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1237 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
1238 break;
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1239 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
1240 break;
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1241 default:
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1242 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
1243 username, status_code);
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1244 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
1245 }
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1246 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
1247
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1248 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
1249 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
1250 g_free(username);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1251 g_list_free(list);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1252
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1253 return TRUE;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1254 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1255
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1256 /** 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
1257 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
1258 {
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1259 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
1260 MsimMessage *msg;
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1261
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1262 session = (MsimSession *)gc->proto_data;
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1263 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
1264 group ? group->name : "(no group)");
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1265
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1266 msg = msim_msg_new(TRUE,
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1267 "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
1268 "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
1269 /* "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
1270 "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
1271 NULL);
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1272
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1273 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
1274 {
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1275 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
1276 msim_msg_free(msg);
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1277 return;
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1278 }
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1279 msim_msg_free(msg);
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1280
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1281 /* TODO: update blocklist */
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1282
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1283 #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
1284 /* TODO */
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1285 if (!msim_send(session,
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1286 "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
1287 "sesskey", MSIM_TYPE_INTEGER, session->sesskey,
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1288 "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
1289 "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
1290 "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
1291 /* 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
1292 "rid", MSIM_TYPE_INTEGER, session->next_rid++,
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1293 "body", MSIM_TYPE_STRING,
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1294 g_strdup_printf("ContactID=%s\034"
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1295 "GroupName=%s\034"
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1296 "Position=1000\034"
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1297 "Visibility=1\034"
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1298 "NickName=\034"
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1299 "NameSelect=0",
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1300 buddy->name, group->name),
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1301 NULL))
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1302 {
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1303 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
1304 return;
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1305 }
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1306 #endif
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1307 }
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1308
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1309 /** Perform actual postprocessing on a message, adding userid as specified.
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1310 *
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1311 * @param msg The message to postprocess.
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1312 * @param uid_before Name of field where to insert new field before, or NULL for end.
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1313 * @param uid_field_name Name of field to add uid to.
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1314 * @param uid The userid to insert.
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1315 *
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1316 * If the field named by uid_field_name already exists, then its string contents will
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1317 * be used for the field, except "<uid>" will be replaced by the userid.
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1318 *
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1319 * If the field named by uid_field_name does not exist, it will be added before the
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1320 * field named by uid_before, as an integer, with the userid.
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1321 *
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1322 * Does not handle sending, or scheduling userid lookup. For that, see msim_postprocess_outgoing().
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1323 */
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1324 MsimMessage *msim_do_postprocessing(MsimMessage *msg, gchar *uid_before, gchar *uid_field_name, guint uid)
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1325 {
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1326 purple_debug_info("msim", "msim_do_postprocessing called with ufn=%s, ub=%s, uid=%d\n",
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1327 uid_field_name, uid_before, uid);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1328 msim_msg_dump("msim_do_postprocessing msg: %s\n", msg);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1329
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1330 /* First, check - if the field already exists, treat it as a format string. */
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1331 if (msim_msg_get(msg, uid_field_name))
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1332 {
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1333 MsimMessageElement *elem;
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1334 gchar *fmt_string;
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1335 gchar *uid_str;
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1336
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1337 /* Warning: this probably violates the encapsulation of MsimMessage */
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1338
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1339 elem = msim_msg_get(msg, uid_field_name);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1340 g_return_val_if_fail(elem->type == MSIM_TYPE_STRING, NULL);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1341
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1342 /* Get the raw string, not with msim_msg_get_string() since that copies it.
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1343 * Want the original string so can free it. */
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1344 fmt_string = (gchar *)(elem->data);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1345
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1346 uid_str = g_strdup_printf("%d", uid);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1347 elem->data = str_replace(fmt_string, "<uid>", uid_str);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1348 g_free(uid_str);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1349 g_free(fmt_string);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1350
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1351 purple_debug_info("msim", "msim_postprocess_outgoing_cb: formatted new string, %s\n",
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1352 elem->data);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1353
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1354 } else {
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1355 /* Otherwise, insert new field into outgoing message. */
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1356 msg = msim_msg_insert_before(msg, uid_before, uid_field_name, MSIM_TYPE_INTEGER, GUINT_TO_POINTER(uid));
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1357 }
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1358
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1359 return msg;
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1360 }
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1361
17960
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1362 /** Callback for msim_postprocess_outgoing() to add a userid to a message, and send it (once receiving userid).
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1363 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1364 * @param session
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1365 * @param userinfo The user information reply message, containing the user ID
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1366 * @param data The message to postprocess and send.
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1367 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1368 * The data message should contain these fields:
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1369 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1370 * _uid_field_name: string, name of field to add with userid from userinfo message
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1371 * _uid_before: string, name of field before field to insert, or NULL for end
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1372 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1373 *
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1374 */
17953
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1375 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
1376 {
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1377 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
1378 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
1379 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
1380 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
1381
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1382 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
1383
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1384 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
1385
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1386 /* 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
1387 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
1388 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
1389 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
1390 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
1391
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1392 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
1393 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
1394
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1395 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
1396 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
1397
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1398 msg = msim_do_postprocessing(msg, uid_before, uid_field_name, atol(uid));
17960
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1399
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1400 /* Send */
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1401 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
1402 {
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1403 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
1404 }
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1405
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1406
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1407 /* 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
1408 * 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
1409 */
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1410 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
1411 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
1412
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1413 //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
1414 }
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1415
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1416 /** 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
1417 *
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1418 * @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
1419 * @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
1420 * @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
1421 * @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
1422 * @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
1423 *
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1424 * @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
1425 */
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1426 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
1427 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
1428 {
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1429 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
1430 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
1431 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
1432
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1433 /* 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
1434 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
1435 username, uid_field_name, uid_before);
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1436 msim_msg_dump("msim_postprocess_outgoing: msg before=%s\n", msg);
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1437 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
1438 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
1439 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
1440
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1441 /* 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
1442 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
1443 {
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1444 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
1445 } else {
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1446 /* 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
1447 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
1448 if (buddy)
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1449 {
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1450 uid = purple_blist_node_get_int(&buddy->node, "UserID");
17954
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1451 } else {
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1452 uid = 0;
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1453 }
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1454
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1455 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
1456 {
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1457 /* Don't have uid offhand - need to ask for it, and wait until hear back before sending. */
17954
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1458 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
1459 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
1460 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
1461 /* 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
1462 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
1463 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
1464 }
17953
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1465 }
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1466
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1467 /* Already have uid, postprocess 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
1468 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
1469 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
1470
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1471 msg = msim_do_postprocessing(msg, uid_before, uid_field_name, uid);
17953
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1472
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1473 msim_msg_dump("msim_postprocess_outgoing: msg after (uid immediate)=%s\n", msg);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1474
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1475 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
1476
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1477 //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
1478
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1479 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
1480 }
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1481
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1482 /** 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
1483 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
1484 {
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1485 MsimSession *session;
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1486 MsimMessage *delbuddy_msg;
17960
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1487 MsimMessage *persist_msg;
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1488 MsimMessage *blocklist_msg;
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1489
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1490 session = (MsimSession *)gc->proto_data;
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1491
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1492 delbuddy_msg = msim_msg_new(TRUE,
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1493 "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
1494 "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
1495 /* '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
1496 NULL);
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1497 /* TODO: free msg */
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1498 if (!msim_postprocess_outgoing(session, delbuddy_msg, buddy->name, "delprofileid", NULL))
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1499 {
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1500 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
1501 return;
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1502 }
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1503
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1504 persist_msg = msim_msg_new(TRUE,
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1505 "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
1506 "sesskey", MSIM_TYPE_INTEGER, session->sesskey,
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1507 "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
1508 "dsn", MSIM_TYPE_INTEGER, MD_DELETE_BUDDY_DSN,
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1509 "lid", MSIM_TYPE_INTEGER, MD_DELETE_BUDDY_LID,
17961
16c5545a0a95 Remove msim_get_own_uid{,_cb}() - it is not needed, since the login
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17960
diff changeset
1510 "uid", MSIM_TYPE_INTEGER, session->userid,
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1511 "rid", MSIM_TYPE_INTEGER, session->next_rid++,
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1512 /* <uid> will be replaced by postprocessing */
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1513 "body", MSIM_TYPE_STRING, g_strdup("ContactID=<uid>"),
17960
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1514 NULL);
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1515
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1516 /* TODO: free msg */
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1517 if (!msim_postprocess_outgoing(session, persist_msg, buddy->name, "body", NULL))
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1518 {
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1519 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
1520 return;
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1521 }
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1522
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1523 blocklist_msg = msim_msg_new(TRUE,
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1524 "blocklist", MSIM_TYPE_BOOLEAN, TRUE,
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1525 "sesskey", MSIM_TYPE_INTEGER, session->sesskey,
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1526 /* TODO: MsimMessage lists */
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1527 "idlist", MSIM_TYPE_STRING, g_strdup("a-|<uid>|b-|<uid>"),
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1528 NULL);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1529
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1530 if (!msim_postprocess_outgoing(session, blocklist_msg, buddy->name, "idlist", NULL))
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1531 {
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1532 purple_notify_error(NULL, NULL, _("Failed to remove buddy"), _("blocklist command failed"));
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1533 return;
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1534 }
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1535
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1536 /* TODO: update blocklist */
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1537 }
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1538
17968
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
1539 /** Return whether the buddy can be messaged while offline.
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
1540 *
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
1541 * I always return TRUE, to allow sending to buddies whose status has not yet
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
1542 * been received. The protocol _does_ support offline messages, but not this plugin.
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
1543 * TODO: Real offline message support.
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
1544 */
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
1545 gboolean msim_offline_message(const PurpleBuddy *buddy)
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
1546 {
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
1547 return TRUE;
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
1548 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1549
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1550
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1551 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1552 * Callback when input available.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1553 *
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1554 * @param gc_uncasted A PurpleConnection pointer.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1555 * @param source File descriptor.
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1556 * @param cond PURPLE_INPUT_READ
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1557 *
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1558 * 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
1559 */
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
1560 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
1561 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1562 PurpleConnection *gc;
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1563 PurpleAccount *account;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1564 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1565 gchar *end;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1566 int n;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1567
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1568 g_return_if_fail(gc_uncasted != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1569 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
1570
17906
f87472f223aa Stylistic improvements - use type *name instead of type* name for pointers
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17903
diff changeset
1571 gc = (PurpleConnection *)(gc_uncasted);
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1572 account = purple_connection_get_account(gc);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1573 session = gc->proto_data;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1574
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
1575 g_return_if_fail(cond == PURPLE_INPUT_READ);
17958
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1576 /* TODO: fix bug #193, crash when re-login */
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1577 g_return_if_fail(MSIM_SESSION_VALID(session));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1578
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1579 /* Only can handle so much data at once...
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1580 * 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
1581 * Should be large enough to hold the largest protocol message.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1582 */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1583 if (session->rxoff == MSIM_READ_BUF_SIZE)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1584 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1585 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
1586 MSIM_READ_BUF_SIZE);
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
1587 purple_connection_error(gc, _("Read buffer full"));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1588 /* TODO: fix 100% CPU after closing */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1589 close(source);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1590 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1591 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1592
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1593 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
1594 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
1595 MSIM_READ_BUF_SIZE - session->rxoff);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1596
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1597 /* 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
1598 * 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
1599 */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1600 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
1601
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1602 if (n < 0 && errno == EAGAIN)
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 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1605 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1606 else if (n < 0)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1607 {
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
1608 purple_connection_error(gc, _("Read error"));
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1609 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
1610 "error=%s, source=%d, fd=%d (%X))\n",
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1611 n, strerror(errno), source, session->fd, session->fd);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1612 close(source);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1613 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1614 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1615 else if (n == 0)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1616 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1617 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
1618 purple_connection_error(gc, _("Server has disconnected"));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1619 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1620 }
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 /* Null terminate */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1623 session->rxbuf[session->rxoff + n] = 0;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1624
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1625 /* 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
1626 if (strlen(session->rxbuf + session->rxoff) != n)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1627 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1628 /* Occurs after login, but it is not a null byte. */
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1629 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
1630 "--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
1631 strlen(session->rxbuf + session->rxoff), n);
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1632 //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
1633 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1634 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1635
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1636 session->rxoff += n;
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1637 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
1638
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
1639 #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
1640 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
1641 #endif
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1642
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1643 /* Look for \\final\\ end markers. If found, process message. */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1644 while((end = strstr(session->rxbuf, MSIM_FINAL_STRING)))
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1645 {
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
1646 MsimMessage *msg;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1647
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
1648 #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
1649 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
1650 #endif
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1651 *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
1652 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
1653 if (!msg)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1654 {
16332
f0e987f024e0 Use g_convert for UTF-16LE conversion instead of converting manually.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16330
diff changeset
1655 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
1656 session->rxbuf);
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
1657 purple_connection_error(gc, _("Unparseable message"));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1658 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1659 else
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1660 {
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1661 /* 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
1662 * 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
1663 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
1664 {
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1665 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
1666 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1667 msim_msg_free(msg);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1668 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1669
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1670 /* Move remaining part of buffer to beginning. */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1671 session->rxoff -= strlen(session->rxbuf) + strlen(MSIM_FINAL_STRING);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1672 memmove(session->rxbuf, end + strlen(MSIM_FINAL_STRING),
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1673 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
1674
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1675 /* Clear end of buffer */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1676 //memset(end, 0, MSIM_READ_BUF_SIZE - (end - session->rxbuf));
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 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1679
17960
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1680 /* Setup a callback, to be called when a reply is received with the returned rid.
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1681 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1682 * @param cb The callback, an MSIM_USER_LOOKUP_CB.
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1683 * @param data Arbitrary user data to be passed to callback (probably an MsimMessage *).
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1684 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1685 * @return The request/reply ID, used to link replies with requests. Put the rid in your request.
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1686 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1687 * TODO: Make more generic and more specific:
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1688 * 1) MSIM_USER_LOOKUP_CB - make it for PERSIST_REPLY, not just user lookup
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1689 * 2) data - make it an MsimMessage?
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1690 */
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1691 guint msim_new_reply_callback(MsimSession *session, MSIM_USER_LOOKUP_CB cb, gpointer data)
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1692 {
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1693 guint rid;
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1694
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1695 rid = session->next_rid++;
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1696
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1697 g_hash_table_insert(session->user_lookup_cb, GUINT_TO_POINTER(rid), cb);
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1698 g_hash_table_insert(session->user_lookup_cb_data, GUINT_TO_POINTER(rid), data);
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1699
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1700 return rid;
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1701 }
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1702
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1703 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1704 * Callback when connected. Sets up input handlers.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1705 *
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1706 * @param data A PurpleConnection pointer.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1707 * @param source File descriptor.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1708 * @param error_message
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1709 */
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
1710 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
1711 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1712 PurpleConnection *gc;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1713 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1714
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1715 g_return_if_fail(data != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1716
17906
f87472f223aa Stylistic improvements - use type *name instead of type* name for pointers
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17903
diff changeset
1717 gc = (PurpleConnection *)data;
17960
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1718 session = (MsimSession *)gc->proto_data;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1719
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1720 if (source < 0)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1721 {
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
1722 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
1723 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
1724 error_message, source));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1725 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1726 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1727
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1728 session->fd = source;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1729
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1730 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
1731 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1732
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1733 /* Session methods */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1734
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1735 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1736 * Create a new MSIM session.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1737 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1738 * @param acct The account to create the session from.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1739 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1740 * @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
1741 */
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
1742 MsimSession *msim_session_new(PurpleAccount *acct)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1743 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1744 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1745
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1746 g_return_val_if_fail(acct != NULL, NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1747
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1748 session = g_new0(MsimSession, 1);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1749
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1750 session->magic = MSIM_SESSION_STRUCT_MAGIC;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1751 session->account = acct;
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1752 session->gc = purple_account_get_connection(acct);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1753 session->fd = -1;
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1754
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1755 /* TODO: Remove. */
16335
0c2b32acc27a Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16334
diff changeset
1756 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
1757 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
1758 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
1759 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
1760 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
1761 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
1762 Figure this out, once free cache. */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1763 session->rxoff = 0;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1764 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
1765 session->next_rid = 1;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1766
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1767 return session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1768 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1769
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1770 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1771 * Free a session.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1772 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1773 * @param session The session to destroy.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1774 */
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
1775 void msim_session_destroy(MsimSession *session)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1776 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1777 g_return_if_fail(MSIM_SESSION_VALID(session));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1778
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1779 session->magic = -1;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1780
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1781 g_free(session->rxbuf);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1782
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1783 /* TODO: Remove. */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1784 g_hash_table_destroy(session->user_lookup_cb);
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1785 g_hash_table_destroy(session->user_lookup_cb_data);
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1786
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1787 g_free(session);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1788 }
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1789
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1790
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 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1793 * Close the connection.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1794 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1795 * @param gc The connection.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1796 */
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
1797 void msim_close(PurpleConnection *gc)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1798 {
17958
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1799 MsimSession *session;
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1800
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1801 purple_debug_info("msim", "msim_close: destroying session\n");
17958
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1802
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1803 session = (MsimSession *)gc->proto_data;
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1804
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1805 g_return_if_fail(gc != NULL);
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1806 g_return_if_fail(session != NULL);
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1807 g_return_if_fail(MSIM_SESSION_VALID(session));
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1808
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1809
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1810 purple_input_remove(session->fd);
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1811 msim_session_destroy(session);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1812 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1813
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1814
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1815 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1816 * Check if a string is a userid (all numeric).
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1817 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1818 * @param user The user id, email, or name.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1819 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1820 * @return TRUE if is userid, FALSE if not.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1821 */
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
1822 gboolean msim_is_userid(const gchar *user)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1823 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1824 g_return_val_if_fail(user != NULL, FALSE);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1825
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1826 return strspn(user, "0123456789") == strlen(user);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1827 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1828
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1829 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1830 * Check if a string is an email address (contains an @).
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1831 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1832 * @param user The user id, email, or name.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1833 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1834 * @return TRUE if is an email, FALSE if not.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1835 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1836 * 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
1837 * means of validating email addresses, but to distinguish
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1838 * between a user represented by an email address from
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1839 * other forms of identification.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1840 */
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
1841 gboolean msim_is_email(const gchar *user)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1842 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1843 g_return_val_if_fail(user != NULL, FALSE);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1844
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1845 return strchr(user, '@') != NULL;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1846 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1847
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1848
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1849 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1850 * Asynchronously lookup user information, calling callback when receive result.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1851 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1852 * @param session
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1853 * @param user The user id, email address, or username.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1854 * @param cb Callback, called with user information when available.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1855 * @param data An arbitray data pointer passed to the callback.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1856 */
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
1857 /* 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
1858 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
1859 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1860 gchar *field_name;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1861 guint rid, cmd, dsn, lid;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1862
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1863 g_return_if_fail(MSIM_SESSION_VALID(session));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1864 g_return_if_fail(user != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1865 g_return_if_fail(cb != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1866
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
1867 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
1868 "asynchronously looking up <%s>\n", user);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1869
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1870 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
1871
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1872 /* 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
1873 #if 0
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1874 /* If already know userid, then call callback immediately */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1875 cached_userid = g_hash_table_lookup(session->userid_cache, who);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1876 if (cached_userid && !by_userid)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1877 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1878 cb(cached_userid, NULL, NULL, data);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1879 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1880 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1881 #endif
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1882
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1883 /* Setup callback. Response will be associated with request using 'rid'. */
17960
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1884 rid = msim_new_reply_callback(session, cb, data);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1885
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1886 /* Send request */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1887
17930
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
1888 cmd = MSIM_CMD_GET;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1889
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1890 if (msim_is_userid(user))
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1891 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1892 field_name = "UserID";
17930
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
1893 dsn = MG_MYSPACE_INFO_BY_ID_DSN;
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
1894 lid = MG_MYSPACE_INFO_BY_ID_LID;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1895 } else if (msim_is_email(user)) {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1896 field_name = "Email";
17930
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
1897 dsn = MG_MYSPACE_INFO_BY_STRING_DSN;
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
1898 lid = MG_MYSPACE_INFO_BY_STRING_LID;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1899 } else {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1900 field_name = "UserName";
17930
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
1901 dsn = MG_MYSPACE_INFO_BY_STRING_DSN;
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
1902 lid = MG_MYSPACE_INFO_BY_STRING_LID;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1903 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1904
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1905
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1906 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
1907 "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
1908 "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
1909 "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
1910 "dsn", MSIM_TYPE_INTEGER, dsn,
17961
16c5545a0a95 Remove msim_get_own_uid{,_cb}() - it is not needed, since the login
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17960
diff changeset
1911 "uid", MSIM_TYPE_INTEGER, session->userid,
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
1912 "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
1913 "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
1914 /* 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
1915 "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
1916 NULL));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1917 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1918
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1919
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1920 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1921 * Obtain the status text for a buddy.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1922 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1923 * @param buddy The buddy to obtain status text for.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1924 *
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
1925 * @return Status text, or NULL if error.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1926 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1927 */
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
1928 char *msim_status_text(PurpleBuddy *buddy)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1929 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1930 MsimSession *session;
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1931 gchar *display_name;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1932
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1933 g_return_val_if_fail(buddy != NULL, NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1934
17906
f87472f223aa Stylistic improvements - use type *name instead of type* name for pointers
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17903
diff changeset
1935 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
1936 g_return_val_if_fail(MSIM_SESSION_VALID(session), NULL);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1937
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1938 /* TODO: const correctness */
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1939 /* TODO: show Headline, or DisplayName, or selectable, or both? */
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1940 display_name = (gchar *)purple_blist_node_get_string(&buddy->node, "DisplayName");
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1941
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1942 if (display_name)
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1943 {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1944 return g_strdup(display_name);
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1945 } else {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1946 return NULL;
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1947 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1948 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1949
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1950 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1951 * Obtain the tooltip text for a buddy.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1952 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1953 * @param buddy Buddy to obtain tooltip text on.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1954 * @param user_info Variable modified to have the tooltip text.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1955 * @param full TRUE if should obtain full tooltip text.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1956 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1957 */
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
1958 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
1959 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1960 g_return_if_fail(buddy != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1961 g_return_if_fail(user_info != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1962
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1963 if (PURPLE_BUDDY_IS_ONLINE(buddy))
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1964 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1965 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1966
17906
f87472f223aa Stylistic improvements - use type *name instead of type* name for pointers
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17903
diff changeset
1967 session = (MsimSession *)buddy->account->gc->proto_data;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1968
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
1969 g_return_if_fail(MSIM_SESSION_VALID(session));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1970
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1971 /* TODO: if (full), do something different */
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1972
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1973 /* TODO: move to buddy profile
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1974 purple_notify_user_info_add_pair(user_info, "User ID",
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1975 g_strdup_printf("%d", purple_blist_node_get_int(&buddy->node, "UserID")));
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1976 */
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1977
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1978 /* Already shown in status text.
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1979 purple_notify_user_info_add_pair(user_info, "Display Name",
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1980 purple_blist_node_get_string(&buddy->node, "DisplayName")); */
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1981
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1982 /* Useful to identify the account the tooltip refers to. Other prpls show this. */
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1983 purple_notify_user_info_add_pair(user_info, "Account",
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1984 purple_blist_node_get_string(&buddy->node, "UserName"));
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1985
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1986
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1987 /* a/s/l...the vitals */
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1988 purple_notify_user_info_add_pair(user_info, "Age",
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1989 g_strdup_printf("%d", purple_blist_node_get_int(&buddy->node, "Age")));
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1990
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1991 purple_notify_user_info_add_pair(user_info, "Gender",
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1992 purple_blist_node_get_string(&buddy->node, "Gender"));
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1993
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1994 purple_notify_user_info_add_pair(user_info, "Location",
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1995 purple_blist_node_get_string(&buddy->node, "Location"));
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1996
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1997 /* Other information */
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1998 if (purple_blist_node_get_string(&buddy->node, "Headline"))
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1999 purple_notify_user_info_add_pair(user_info, "Headline",
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2000 purple_blist_node_get_string(&buddy->node, "Headline"));
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2001
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2002 purple_notify_user_info_add_pair(user_info, "Song",
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2003 g_strdup_printf("%s - %s",
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2004 purple_blist_node_get_string(&buddy->node, "BandName"),
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2005 purple_blist_node_get_string(&buddy->node, "SongName")));
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2006
17966
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
2007 purple_notify_user_info_add_pair(user_info, "Total Friends",
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
2008 g_strdup_printf("%d", purple_blist_node_get_int(&buddy->node, "TotalFriends")));
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
2009
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2010 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2011 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2012
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2013 /** 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
2014 PurplePluginProtocolInfo prpl_info =
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2015 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2016 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
2017 NULL, /* user_splits */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2018 NULL, /* protocol_options */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2019 NO_BUDDY_ICONS, /* icon_spec - TODO: eventually should add this */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2020 msim_list_icon, /* list_icon */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2021 NULL, /* list_emblems */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2022 msim_status_text, /* status_text */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2023 msim_tooltip_text, /* tooltip_text */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2024 msim_status_types, /* status_types */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2025 NULL, /* blist_node_menu */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2026 NULL, /* chat_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2027 NULL, /* chat_info_defaults */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2028 msim_login, /* login */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2029 msim_close, /* close */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2030 msim_send_im, /* send_im */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2031 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
2032 msim_send_typing, /* send_typing */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2033 NULL, /* get_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2034 NULL, /* set_away */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2035 NULL, /* set_idle */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2036 NULL, /* change_passwd */
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2037 msim_add_buddy, /* add_buddy */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2038 NULL, /* add_buddies */
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2039 msim_remove_buddy, /* remove_buddy */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2040 NULL, /* remove_buddies */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2041 NULL, /* add_permit */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2042 NULL, /* add_deny */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2043 NULL, /* rem_permit */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2044 NULL, /* rem_deny */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2045 NULL, /* set_permit_deny */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2046 NULL, /* join_chat */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2047 NULL, /* reject chat invite */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2048 NULL, /* get_chat_name */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2049 NULL, /* chat_invite */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2050 NULL, /* chat_leave */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2051 NULL, /* chat_whisper */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2052 NULL, /* chat_send */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2053 NULL, /* keepalive */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2054 NULL, /* register_user */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2055 NULL, /* get_cb_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2056 NULL, /* get_cb_away */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2057 NULL, /* alias_buddy */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2058 NULL, /* group_buddy */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2059 NULL, /* rename_group */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2060 NULL, /* buddy_free */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2061 NULL, /* convo_closed */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2062 NULL, /* normalize */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2063 NULL, /* set_buddy_icon */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2064 NULL, /* remove_group */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2065 NULL, /* get_cb_real_name */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2066 NULL, /* set_chat_topic */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2067 NULL, /* find_blist_chat */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2068 NULL, /* roomlist_get_list */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2069 NULL, /* roomlist_cancel */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2070 NULL, /* roomlist_expand_category */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2071 NULL, /* can_receive_file */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2072 NULL, /* send_file */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2073 NULL, /* new_xfer */
17968
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
2074 msim_offline_message, /* offline_message */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2075 NULL, /* whiteboard_prpl_ops */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2076 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
2077 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
2078 NULL, /* _purple_reserved1 */
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2079 NULL, /* _purple_reserved2 */
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2080 NULL, /* _purple_reserved3 */
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2081 NULL /* _purple_reserved4 */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2082 };
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2083
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2084
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2085
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2086 /** 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
2087 PurplePluginInfo info =
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2088 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2089 PURPLE_PLUGIN_MAGIC,
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2090 PURPLE_MAJOR_VERSION,
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2091 PURPLE_MINOR_VERSION,
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
2092 PURPLE_PLUGIN_PROTOCOL, /**< type */
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
2093 NULL, /**< ui_requirement */
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
2094 0, /**< flags */
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
2095 NULL, /**< dependencies */
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
2096 PURPLE_PRIORITY_DEFAULT, /**< priority */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2097
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2098 "prpl-myspace", /**< id */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2099 "MySpaceIM", /**< name */
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
2100 "0.6", /**< version */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2101 /** summary */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2102 "MySpaceIM Protocol Plugin",
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2103 /** description */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2104 "MySpaceIM Protocol Plugin",
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2105 "Jeff Connelly <myspaceim@xyzzy.cjb.net>", /**< author */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2106 "http://developer.pidgin.im/wiki/MySpaceIM/", /**< homepage */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2107
17893
308a27332b57 Check for RC4 in libpurple on plugin initialization.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17892
diff changeset
2108 msim_load, /**< load */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2109 NULL, /**< unload */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2110 NULL, /**< destroy */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2111 NULL, /**< ui_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2112 &prpl_info, /**< extra_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2113 NULL, /**< prefs_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2114
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2115 /* msim_actions */
17890
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2116 NULL,
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2117
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2118 NULL, /**< reserved1 */
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2119 NULL, /**< reserved2 */
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2120 NULL, /**< reserved3 */
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2121 NULL /**< reserved4 */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2122 };
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2123
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
2124 void init_plugin(PurplePlugin *plugin)
17900
402fdc925e30 Clean up a few TODO's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17898
diff changeset
2125 {
402fdc925e30 Clean up a few TODO's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17898
diff changeset
2126 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
2127 #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
2128 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
2129 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
2130
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
2131 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
2132 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
2133 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
2134 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
2135 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
2136 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
2137 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
2138 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
2139 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
2140 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
2141 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
2142 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
2143 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
2144 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
2145 }
17902
8e0b1d066efb Add partial implementation of MsimMessage (not used anywhere yet).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17901
diff changeset
2146 #endif
17900
402fdc925e30 Clean up a few TODO's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17898
diff changeset
2147
402fdc925e30 Clean up a few TODO's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17898
diff changeset
2148 /* 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
2149 * 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
2150 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
2151 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
2152
402fdc925e30 Clean up a few TODO's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17898
diff changeset
2153 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
2154 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
2155 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2156
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2157 PURPLE_INIT_PLUGIN(myspace, init_plugin, info);

mercurial