libpurple/protocols/myspace/myspace.c

Tue, 26 Jun 2007 05:53:52 +0000

author
Jeff Connelly <jeff2@soc.pidgin.im>
date
Tue, 26 Jun 2007 05:53:52 +0000
branch
soc.2007.msimprpl
changeset 18003
fb399e32e44c
parent 18002
ba63892ad307
child 18005
f8992f7ce49b
permissions
-rw-r--r--

Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
one's own user account always being online. This is needed because msim does
not allow adding yourself to your buddy list. (Other prpls do this too, btw.)

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 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
43 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
44 msim_load(PurplePlugin *plugin)
17893
308a27332b57 Check for RC4 in libpurple on plugin initialization.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17892
diff changeset
45 {
308a27332b57 Check for RC4 in libpurple on plugin initialization.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17892
diff changeset
46 #ifdef MSIM_USE_PURPLE_RC4
308a27332b57 Check for RC4 in libpurple on plugin initialization.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17892
diff changeset
47 /* 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
48 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
49 {
308a27332b57 Check for RC4 in libpurple on plugin initialization.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17892
diff changeset
50 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
51 purple_notify_error(plugin, _("Missing Cipher"),
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
52 _("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
53 _("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
54 "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
55 "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
56 return FALSE;
308a27332b57 Check for RC4 in libpurple on plugin initialization.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17892
diff changeset
57 }
308a27332b57 Check for RC4 in libpurple on plugin initialization.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17892
diff changeset
58 #endif
308a27332b57 Check for RC4 in libpurple on plugin initialization.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17892
diff changeset
59 return TRUE;
16322
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 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
63 * Get possible user status types. Based on mockprpl.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
64 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
65 * @return GList of status types.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
66 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
67 GList *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
68 msim_status_types(PurpleAccount *acct)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
69 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
70 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
71 PurpleStatusType *status;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
72
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
73 purple_debug_info("myspace", "returning status types\n");
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
74
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
75 types = NULL;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
76
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
77 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
78 types = g_list_append(types, status);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
79
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
80 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
81 types = g_list_append(types, status);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
82
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
83 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
84 types = g_list_append(types, status);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
85
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
86 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
87 types = g_list_append(types, status);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
88
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
89 return types;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
90 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
91
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
92 /**
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
93 * 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
94 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
95 * @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
96 * @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
97 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
98 * @return The base icon name string.
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
99 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
100 const gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
101 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
102 {
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
103 /* Use a MySpace icon submitted by hbons at
17900
402fdc925e30 Clean up a few TODO's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17898
diff changeset
104 * 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
105 return "myspace";
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
106 }
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
107
17982
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
108 /* Replacement codes to be replaced with associated replacement text,
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
109 * used for protocol message escaping / unescaping. */
17981
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
110 static gchar* msim_replacement_code[] = { "/1", "/2", NULL };
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
111 static gchar* msim_replacement_text[] = { "/", "\\", NULL };
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
112
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
113 /**
17982
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
114 * Unescape or escape a protocol message.
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
115 *
17982
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
116 * @param msg The message to be unescaped or escaped. WILL BE FREED.
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
117 * @param escape TRUE to escape, FALSE to unescape.
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
118 *
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
119 * @return The unescaped or escaped message. Caller must g_free().
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
120 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
121 gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
122 msim_unescape_or_escape(gchar *msg, gboolean escape)
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
123 {
17982
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
124 gchar *tmp, *code, *text;
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
125 guint i;
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
126
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
127 /* Replace each code in msim_replacement_code with
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
128 * corresponding entry in msim_replacement_text. */
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
129 for (i = 0; (code = msim_replacement_code[i])
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
130 && (text = msim_replacement_text[i]); ++i)
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
131 {
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
132 if (escape)
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
133 {
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
134 tmp = str_replace(msg, text, code);
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
135 }
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
136 else
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
137 {
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
138 tmp = str_replace(msg, code, text);
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
139 }
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
140 g_free(msg);
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
141 msg = tmp;
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
142 }
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
143
17982
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
144 return msg;
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
145 }
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 * Escape a protocol message.
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
149 *
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
150 * @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
151 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
152 gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
153 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
154 {
17982
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
155 return msim_unescape_or_escape(g_strdup(msg), TRUE);
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
156 }
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
157
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
158 gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
159 msim_unescape(const gchar *msg)
17982
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
160 {
7c2fe89250cd Refactor msim_escape() & msim_unescape().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17981
diff changeset
161 return msim_unescape_or_escape(g_strdup(msg), FALSE);
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
162 }
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 /**
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
165 * 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
166 *
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
167 * @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
168 * @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
169 * @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
170 *
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
171 * @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
172 * 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
173 *
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
174 * 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
175 * 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
176 *
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
177 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
178 gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
179 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
180 {
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
181 gchar **items;
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
182 gchar *ret;
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
183
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
184 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
185 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
186 g_free(items);
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
187 return ret;
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
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
190 #ifdef MSIM_DEBUG_MSG
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
191 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
192 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
193 {
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
194 purple_debug_info("msim", "%s=%s\n", (gchar *)key, (gchar *)value);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
195 }
16335
0c2b32acc27a Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16334
diff changeset
196 #endif
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
197
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
198 /**
17993
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
199 * Send raw data (given as a NUL-terminated string) to the server.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
200 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
201 * @param session
17993
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
202 * @param msg The raw data to send, in a NUL-terminated string.
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
203 *
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
204 * @return TRUE if succeeded, FALSE if not.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
205 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
206 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
207 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
208 msim_send_raw(MsimSession *session, const gchar *msg)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
209 {
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
210 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
211
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
212 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
213 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
214
17993
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
215 return msim_send_really_raw(session->gc, msg, strlen(msg)) ==
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
216 strlen(msg);
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
217 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
218
17993
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
219 /** Send raw data to the server, possibly with embedded NULs.
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
220 *
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
221 * Used in prpl_info struct, so that plugins can have the most possible
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
222 * control of what is sent over the connection. Inside this prpl,
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
223 * msim_send_raw() is used, since it sends NUL-terminated strings (easier).
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
224 *
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
225 * @param gc PurpleConnection
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
226 * @param buf Buffer to send
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
227 * @param total_bytes Size of buffer to send
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
228 *
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
229 * @return Bytes successfully sent.
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
230 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
231 int
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
232 msim_send_really_raw(PurpleConnection *gc, const char *buf, int total_bytes)
17993
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
233 {
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
234 int total_bytes_sent;
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
235
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
236 /* 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
237 total_bytes_sent = 0;
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
238 do
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
239 {
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
240 int bytes_sent;
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
241
17993
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
242 bytes_sent = send(((MsimSession*)(gc->proto_data))->fd,
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
243 buf + total_bytes_sent, total_bytes - total_bytes_sent, 0);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
244
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
245 if (bytes_sent < 0)
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
246 {
17890
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
247 purple_debug_info("msim", "msim_send_raw(%s): send() failed: %s\n",
17993
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
248 buf, g_strerror(errno));
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
249 return total_bytes_sent;
16337
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
250 }
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
251 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
252
ba0ded418e6a Add escaping and unescaping functions (for /1 and /2).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16335
diff changeset
253 } while(total_bytes_sent < total_bytes);
17993
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
254
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
255 return total_bytes_sent;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
256 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
257
17993
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
258
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
259 /**
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
260 * 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
261 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
262 * @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
263 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
264 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
265 msim_login(PurpleAccount *acct)
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
266 {
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
267 PurpleConnection *gc;
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
268 const gchar *host;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
269 int port;
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
270
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
271 g_return_if_fail(acct != NULL);
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
272
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
273 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
274
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
275 gc = purple_account_get_connection(acct);
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
276 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
277
17998
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
278 if (strlen(acct->password) > MSIM_MAX_PASSWORD_LENGTH)
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
279 {
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
280 gchar *str;
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
281
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
282
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
283 /* TODO: Find out why >8 is problematic. The web site lets you have
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
284 * long passwords, but reportedly the official IM client does not
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
285 * allow more than 8 characters to be entered. Just entering the first
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
286 * 8 does not, on first try, appear to work. */
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
287 str = g_strdup_printf(_("Sorry, passwords over %d characters in length (yours is %d) are "
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
288 "currently not supported by the MySpaceIM plugin."), MSIM_MAX_PASSWORD_LENGTH,
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
289 (int)strlen(acct->password));
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
290
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
291 /* Notify an error message also, because this is important! */
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
292 purple_notify_error(acct, g_strdup(_("MySpaceIM Error")), str, NULL);
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
293
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
294 purple_connection_error(gc, str);
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
295
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
296 g_free(str);
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
297 }
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
298
e739eb3e0567 Fail with our own error message if an entered password is greater than 8
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17997
diff changeset
299
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
300 /* 1. connect to server */
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
301 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
302 0, /* which connection step this is */
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
303 4); /* total number of steps */
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
304
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
305 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
306 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
307
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
308 /* From purple.sf.net/api:
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
309 * """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
310 * "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
311 * whether through a proxy or not.""" */
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
312
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
313 /* Calls msim_connect_cb when connected. */
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
314 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
315 {
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
316 /* 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
317 * 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
318 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
319 return;
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
320 }
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
321 }
17993
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
322
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
323 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
324 * Process a login challenge, sending a response.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
325 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
326 * @param session
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
327 * @param msg Login challenge message.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
328 *
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
329 * @return TRUE if successful, FALSE if not
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
330 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
331 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
332 msim_login_challenge(MsimSession *session, MsimMessage *msg)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
333 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
334 PurpleAccount *account;
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
335 const gchar *response;
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
336 guint response_len;
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
337 gchar *nc;
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
338 gsize nc_len;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
339
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
340 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
341 g_return_val_if_fail(msg != NULL, FALSE);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
342
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
343 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
344
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
345 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
346
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
347 g_return_val_if_fail(account != NULL, FALSE);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
348
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
349 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
350
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
351 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
352
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
353 if (nc_len != 0x40)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
354 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
355 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
356 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
357 return FALSE;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
358 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
359
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
360 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
361
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
362 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
363
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
364 g_free(nc);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
365
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
366 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
367 "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
368 /* 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
369 "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
370 /* 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
371 "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
372 "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
373 "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
374 "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
375 "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
376 NULL);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
377 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
378
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
379 #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
380 /* 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
381
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
382 /*
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 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
384
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 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
386 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
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 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
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 $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
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 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
393 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
394 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
395 (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
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 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
398 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
399 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
400 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
401
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 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
403 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
404 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
405
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
406
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 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
408 */
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
409
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 #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
411 #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
412
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 /* 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
414 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
415 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
416 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
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 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
419 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
420 */
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
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
422 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
423 crypt_rc4_init(rc4_state_struct *rc4_state,
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
424 const guchar *key, int key_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
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 int ind;
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
427 unsigned gchar j = 0;
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
428 unsigned gchar *s_box;
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
429
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
430 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
431 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
432
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
433 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
434 {
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
435 s_box[ind] = (guchar)ind;
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
436 }
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
437
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
438 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
439 {
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
440 guchar tc;
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
441
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
442 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
443
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
444 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
445 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
446 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
447 }
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
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
449 }
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
450
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
451 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
452 crypt_rc4(rc4_state_struct *rc4_state, guchar *data, int 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
453 {
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
454 guchar *s_box;
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
455 guchar index_i;
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
456 guchar index_j;
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 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
458
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
459 /* 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
460 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
461 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
462 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
463 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
464
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
465 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
466 {
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
467 guchar tc;
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
468 guchar t;
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
469
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
470 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
471 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
472
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
473 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
474 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
475 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
476
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
477 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
478 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
479 }
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
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
481 /* 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
482 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
483 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
484 }
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
485
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
486 #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
487
66984c1aac79 Re-add RC4 code from Samba, whose use is enabled by not defining
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17890
diff changeset
488
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
489 /**
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
490 * 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
491 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
492 * @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
493 * @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
494 * @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
495 * @param response_len Will be written with response length.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
496 *
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
497 * @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
498 * when finished.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
499 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
500 const gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
501 msim_compute_login_response(const gchar nonce[2 * NONCE_SIZE],
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
502 const gchar *email, const gchar *password, guint *response_len)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
503 {
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
504 PurpleCipherContext *key_context;
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
505 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
506 #ifdef MSIM_USE_PURPLE_RC4
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
507 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
508 #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
509 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
510 #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
511
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
512 guchar hash_pw[HASH_SIZE];
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
513 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
514 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
515 guchar *data;
f87472f223aa Stylistic improvements - use type *name instead of type* name for pointers
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17903
diff changeset
516 guchar *data_out;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
517 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
518 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
519 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
520 #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
521 int i;
0c2b32acc27a Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16334
diff changeset
522 #endif
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
523
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
524 /* 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
525 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
526 conv_error = NULL;
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
527 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
528 &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
529 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
530 if (conv_error != NULL)
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
531 {
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
532 purple_debug_error("msim",
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
533 "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
534 conv_error->message);
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
535 g_error_free(conv_error);
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
536 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
537
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
538 /* 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
539 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
540 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
541 g_free(password_utf16le);
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
542
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
543 #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
544 purple_debug_info("msim", "pwhash = ");
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
545 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
546 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
547 purple_debug_info("msim", "\n");
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
548 #endif
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
549
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
550 /* key = sha1(sha1(pw) + nonce2) */
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
551 sha1 = purple_ciphers_find_cipher("sha1");
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
552 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
553 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
554 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
555 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
556
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
557 #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
558 purple_debug_info("msim", "key = ");
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
559 for (i = 0; i < sizeof(key); i++)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
560 {
16335
0c2b32acc27a Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16334
diff changeset
561 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
562 }
16335
0c2b32acc27a Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16334
diff changeset
563 purple_debug_info("msim", "\n");
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
564 #endif
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
565
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
566 #ifdef MSIM_USE_PURPLE_RC4
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
567 rc4 = purple_cipher_context_new_by_name("rc4", NULL);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
568
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
569 /* 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
570 * 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
571 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
572 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
573 #endif
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
574
17985
930a05d4e86f Use constants for IP address list, defined in myspace.h.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17984
diff changeset
575 /* TODO: obtain IPs of network interfaces */
930a05d4e86f Use constants for IP address list, defined in myspace.h.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17984
diff changeset
576
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
577 /* rc4 encrypt:
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
578 * nonce1+email+IP list */
17985
930a05d4e86f Use constants for IP address list, defined in myspace.h.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17984
diff changeset
579
930a05d4e86f Use constants for IP address list, defined in myspace.h.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17984
diff changeset
580 data_len = NONCE_SIZE + strlen(email) + MSIM_LOGIN_IP_LIST_LEN;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
581 data = g_new0(guchar, data_len);
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
582 memcpy(data, nonce, NONCE_SIZE);
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
583 memcpy(data + NONCE_SIZE, email, strlen(email));
17985
930a05d4e86f Use constants for IP address list, defined in myspace.h.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17984
diff changeset
584 memcpy(data + NONCE_SIZE + strlen(email), MSIM_LOGIN_IP_LIST, MSIM_LOGIN_IP_LIST_LEN);
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
585
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
586 #ifdef MSIM_USE_PURPLE_RC4
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
587 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
588
17906
f87472f223aa Stylistic improvements - use type *name instead of type* name for pointers
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17903
diff changeset
589 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
590 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
591 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
592 #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
593 /* 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
594 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
595 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
596 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
597 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
598 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
599 #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
600
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
601 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
602
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
603 #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
604 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
605 #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
606
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
607 *response_len = data_out_len;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
608
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
609 return (const gchar *)data_out;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
610 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
611
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
612 /**
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
613 * 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
614 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
615 * @param gc Connection.
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
616 * @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
617 * @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
618 * @param flags Flags.
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
619 *
17954
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
620 * @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
621 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
622 * 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
623 * 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
624 * 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
625 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
626 int
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
627 msim_send_im(PurpleConnection *gc, const gchar *who, const gchar *message,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
628 PurpleMessageFlags flags)
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
629 {
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
630 MsimSession *session;
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
631
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
632 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
633 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
634 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
635
17944
62750b952935 Remove 'flags' from send_im_cb_struct - it was never needed.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17943
diff changeset
636 /* '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
637
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
638 session = gc->proto_data;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
639
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
640 if (msim_send_bm(session, who, 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
641 {
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
642 /* 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
643 * 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
644 * 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
645 * 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
646 */
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
647 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
648 } else {
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
649 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
650 }
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
651 /*
17984
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
652 * In MySpace, you login with your email address, but don't talk to other
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
653 * 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
654 * IM windows when using this plugin:
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
655 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
656 * you@example.com: hello
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
657 * 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
658 * 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
659 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
660 * 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
661 * 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
662 */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
663 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
664
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
665 /** Send a buddy message of a given type.
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
666 *
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
667 * @param session
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
668 * @param who Username to send message to.
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
669 * @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
670 * @param type A MSIM_BM_* constant.
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
671 *
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
672 * 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
673 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
674 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
675 msim_send_bm(MsimSession *session, const gchar *who, const gchar *text,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
676 int type)
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
677 {
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
678 gboolean rc;
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
679 MsimMessage *msg;
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
680 const gchar *from_username;
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
681
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
682 from_username = session->account->username;
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
683
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
684 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
685 type, from_username, who, text);
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
686
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
687 msg = msim_msg_new(TRUE,
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
688 "bm", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(type),
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
689 "sesskey", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(session->sesskey),
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
690 /* 't' will be inserted here */
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
691 "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
692 "msg", MSIM_TYPE_STRING, g_strdup(text),
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
693 NULL);
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
694
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
695 rc = msim_postprocess_outgoing(session, msg, who, "t", "cv");
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
696
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
697 msim_msg_free(msg);
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
698
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
699 return rc;
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
700 }
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
701
17995
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
702 /** Convert a font point size to purple's HTML font size.
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
703 *
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
704 * Based on libpurple/protocols/bonjour/jabber.c.
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
705 */
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
706 static guint
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
707 msim_font_size_to_purple(int size)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
708 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
709 if (size > 24) {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
710 return 7;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
711 } else if (size >= 21) {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
712 return 6;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
713 } else if (size >= 17) {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
714 return 5;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
715 } else if (size >= 14) {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
716 return 4;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
717 } else if (size >= 12) {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
718 return 3;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
719 } else if (size >= 10) {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
720 return 2;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
721 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
722
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
723 return 1;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
724 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
725
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
726 /** Convert a msim markup font height to points. */
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
727 static guint
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
728 msim_font_height_to_point(guint height)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
729 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
730 /* See also: libpurple/protocols/bonjour/jabber.c
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
731 * _font_size_ichat_to_purple */
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
732 switch (height)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
733 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
734 case 11: return 8;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
735 case 12: return 9;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
736 case 13: return 10;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
737 case 14:
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
738 case 15: return 11;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
739 case 16: return 12;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
740 case 17:
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
741 case 18: return 13;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
742 case 19: return 14;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
743 case 20: return 15;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
744 case 21: return 16;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
745 default: return 12;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
746 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
747 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
748
18001
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
749 /** Convert the msim markup <f> (font) tag into HTML. */
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
750 static void msim_markup_f_to_html(xmlnode *root, gchar **begin, gchar **end)
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
751 {
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
752 const gchar *face, *height_str, *decor_str;
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
753 GString *gs_end, *gs_begin;
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
754 guint decor, height;
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
755
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
756 face = xmlnode_get_attrib(root, "n");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
757 height_str = xmlnode_get_attrib(root, "h");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
758 decor_str = xmlnode_get_attrib(root, "s");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
759
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
760 if (height_str)
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
761 height = atol(height_str);
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
762 else
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
763 height = 12;
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
764
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
765 if (decor_str)
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
766 decor = atol(decor_str);
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
767 else
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
768 decor = 0;
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
769
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
770 gs_begin = g_string_new("");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
771 g_string_printf(gs_begin, "<font face='%s' size='%d'>", face,
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
772 msim_font_size_to_purple(msim_font_height_to_point(height)));
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
773 /* No support for font-size CSS? */
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
774 /* g_string_printf(gs_begin, "<span style='font-family: %s; font-size: %dpt'>", face,
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
775 msim_font_height_to_point(height)); */
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
776
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
777 gs_end = g_string_new("</font>");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
778
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
779 if (decor & 1)
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
780 {
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
781 g_string_append(gs_begin, "<b>");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
782 g_string_prepend(gs_end, "</b>");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
783 }
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
784
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
785 if (decor & 2)
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
786 {
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
787 g_string_append(gs_begin, "<i>");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
788 g_string_append(gs_end, "</i>");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
789 }
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
790
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
791 if (decor & 4)
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
792 {
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
793 g_string_append(gs_begin, "<u>");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
794 g_string_append(gs_end, "</u>");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
795 }
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
796
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
797
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
798 *begin = gs_begin->str;
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
799 *end = gs_end->str;
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
800 }
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
801
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
802 /** Convert the msim markup <p> (paragraph) tag into HTML. */
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
803 static void msim_markup_p_to_html(xmlnode *root, gchar **begin, gchar **end)
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
804 {
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
805 /* Just pass through unchanged.
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
806 *
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
807 * Note: attributes currently aren't passed, if there are any. */
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
808 *begin = g_strdup("<p>");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
809 *end = g_strdup("</p>");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
810 }
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
811
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
812 /** Convert the msim markup <c> tag (text color) into HTML. TODO: Test */
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
813 static void msim_markup_c_to_html(xmlnode *root, gchar **begin, gchar **end)
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
814 {
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
815 const gchar *color;
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
816
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
817 color = xmlnode_get_attrib(root, "v");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
818
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
819 /* TODO: parse rgb(255,0,0) into #FF0000, etc.
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
820 * And do something about rgba (alpha) and transparent.
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
821 */
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
822 /* *begin = g_strdup_printf("<font color='%s'>", color); */
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
823 *begin = g_strdup_printf("<span style='color: %s'>", color);
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
824 *end = g_strdup("</p>");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
825 }
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
826
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
827 /** Convert the msim markup <b> tag (background color) into HTML. TODO: Test */
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
828 static void msim_markup_b_to_html(xmlnode *root, gchar **begin, gchar **end)
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
829 {
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
830 const gchar *color;
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
831
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
832 color = xmlnode_get_attrib(root, "v");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
833
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
834 /* TODO: parse color same as msim_markup_c_to_html(). */
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
835 *begin = g_strdup_printf("<span style='background-color: %s'>", color);
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
836 *end = g_strdup("</p>");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
837 }
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
838
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
839 /** Convert the msim markup <i> tag (emoticon image) into HTML. TODO: Test */
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
840 static void msim_markup_i_to_html(xmlnode *root, gchar **begin, gchar **end)
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
841 {
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
842 const gchar *name;
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
843
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
844 name = xmlnode_get_attrib(root, "n");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
845
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
846 /* TODO: Support these emoticons:
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
847 *
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
848 * bigsmile growl mad scared tongue devil happy messed sidefrown upset
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
849 * frazzled heart nerd sinister wink geek laugh oops smirk worried
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
850 * googles mohawk pirate straight kiss
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
851 */
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
852
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
853 *begin = g_strdup_printf("<img id='%s'>", name);
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
854 *end = g_strdup("</p>");
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
855 }
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
856
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
857
17995
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
858 /** Convert an xmlnode of msim markup to an HTML string.
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
859 * @return An HTML string. Caller frees.
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
860 */
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
861 static gchar *msim_markup_xmlnode_to_html(xmlnode *root)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
862 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
863 xmlnode *node;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
864 gchar *begin, *inner, *end;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
865 gchar *final;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
866
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
867 if (!root)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
868 return g_strdup("");
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
869
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
870 purple_debug_info("msim", "msim_markup_xmlnode_to_html: got root=%s\n",
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
871 root->name);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
872
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
873 begin = inner = end = NULL;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
874
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
875 if (!strcmp(root->name, "f"))
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
876 {
18001
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
877 msim_markup_f_to_html(root, &begin, &end);
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
878 } else if (!strcmp(root->name, "p")) {
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
879 msim_markup_p_to_html(root, &begin, &end);
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
880 } else if (!strcmp(root->name, "c")) {
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
881 msim_markup_c_to_html(root, &begin, &end);
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
882 } else if (!strcmp(root->name, "b")) {
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
883 msim_markup_b_to_html(root, &begin, &end);
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
884 } else if (!strcmp(root->name, "i")) {
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
885 msim_markup_i_to_html(root, &begin, &end);
17995
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
886 } else {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
887 purple_debug_info("msim", "msim_markup_xmlnode_to_html: "
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
888 "unknown tag name=%s, ignoring", root->name);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
889 begin = g_strdup("");
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
890 end = g_strdup("");
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
891 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
892
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
893 /* Loop over all child nodes. */
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
894 for (node = root->child; node != NULL; node = node->next)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
895 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
896 switch (node->type)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
897 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
898 case XMLNODE_TYPE_ATTRIB:
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
899 /* Attributes handled above. */
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
900 break;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
901
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
902 case XMLNODE_TYPE_TAG:
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
903 /* A tag or tag with attributes. Recursively descend. */
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
904 inner = msim_markup_xmlnode_to_html(node);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
905
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
906 purple_debug_info("msim", " ** node name=%s\n", node->name);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
907 break;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
908
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
909
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
910 case XMLNODE_TYPE_DATA:
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
911 /* Literal text. */
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
912 inner = g_new0(char, node->data_sz + 1);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
913 strncpy(inner, node->data, node->data_sz);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
914 inner[node->data_sz + 1] = 0;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
915
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
916 purple_debug_info("msim", " ** node data=%s (%s)\n", inner,
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
917 node->data);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
918 break;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
919
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
920 default:
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
921 purple_debug_info("msim",
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
922 "msim_markup_xmlnode_to_html: strange node\n");
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
923 inner = g_strdup("");
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
924 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
925 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
926
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
927 final = g_strconcat(begin, inner, end, NULL);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
928 g_free(begin);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
929 g_free(inner);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
930 g_free(end);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
931
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
932 purple_debug_info("msim", "msim_markup_xmlnode_to_gtkhtml: RETURNING %s\n",
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
933 final);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
934
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
935 return final;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
936 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
937
18001
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
938 /** Convert MySpaceIM markup to Purple (HTML) markup.
17995
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
939 *
18001
cb5747cb6992 Add (at least placeholder) functions to process p, f, c, b, and i markup tags
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17998
diff changeset
940 * @return Purple markup string, must be g_free()'d. */
17995
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
941 gchar *
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
942 msim_markup_to_html(const gchar *raw)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
943 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
944 xmlnode *root;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
945 gchar *str;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
946
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
947 root = xmlnode_from_str(raw, -1);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
948 if (!root)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
949 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
950 purple_debug_info("msim", "msim_markup_to_html: couldn't parse "
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
951 "%s as XML, returning raw\n", raw);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
952 return g_strdup(raw);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
953 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
954
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
955 str = msim_markup_xmlnode_to_html(root);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
956 purple_debug_info("msim", "msim_markup_to_html: returning %s\n", str);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
957
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
958 xmlnode_free(root);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
959
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
960 return g_strdup(str);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
961 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
962
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
963 /**
17934
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
964 * Handle an incoming instant message.
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
965 *
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
966 * @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
967 * @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
968 * 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
969 *
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
970 * @return TRUE if successful.
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
971 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
972 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
973 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
974 {
17995
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
975 gchar *username, *msg_msim_markup, *msg_purple_markup;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
976
17951
313b994beb1d Transition msim_incoming_im() to the callbackless infrastructure. Remove
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17950
diff changeset
977 username = msim_msg_get_string(msg, "_username");
17995
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
978 msg_msim_markup = msim_msg_get_string(msg, "msg");
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
979
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
980 msg_purple_markup = msim_markup_to_html(msg_msim_markup);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
981 g_free(msg_msim_markup);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
982
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
983 serv_got_im(session->gc, username, msg_purple_markup,
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
984 PURPLE_MESSAGE_RECV, time(NULL));
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
985
17951
313b994beb1d Transition msim_incoming_im() to the callbackless infrastructure. Remove
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17950
diff changeset
986 g_free(username);
17995
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
987 g_free(msg_purple_markup);
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
988
17951
313b994beb1d Transition msim_incoming_im() to the callbackless infrastructure. Remove
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17950
diff changeset
989 return TRUE;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
990 }
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
991
17934
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
992 /**
17984
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
993 * Handle an unrecognized message.
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
994 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
995 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
996 msim_unrecognized(MsimSession *session, MsimMessage *msg, gchar *note)
17984
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
997 {
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
998 /* TODO: Some more context, outwardly equivalent to a backtrace, for helping figure
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
999 * out what this msg is for. But not too much information so that a user
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1000 * posting this dump reveals confidential information.
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1001 */
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1002 /* TODO: dump unknown msgs to file, so user can send them to me
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1003 * if they wish, to help add support for new messages (inspired
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1004 * by Alexandr Shutko, who maintains OSCAR protocol documentation). */
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1005
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1006 purple_debug_info("msim", "Unrecognized message on account for %s\n", session->account->username);
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1007 if (note)
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1008 {
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1009 purple_debug_info("msim", "(Note: %s)\n", note);
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1010 }
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1011
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1012 msim_msg_dump("Unrecognized message dump: %s\n", msg);
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1013 }
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1014
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1015 /**
17934
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1016 * 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
1017 *
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1018 * @param session
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1019 * @param msg
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1020 *
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1021 * @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
1022 *
17952
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1023 * UNTESTED
17934
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1024 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1025 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1026 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
1027 {
17952
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1028 gchar *msg_text, *username;
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1029 gboolean rc;
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1030
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1031 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
1032 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
1033
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1034 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
1035
17952
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1036 if (strcmp(msg_text, "%typing%") == 0)
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1037 {
17984
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1038 /* TODO: find out if msim repeatedly sends typing messages, so we can give it a timeout.
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1039 * Right now, there does seem to be an inordinately amount of time between typing/
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1040 * stopped-typing notifications. */
17952
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1041 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
1042 rc = TRUE;
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1043 } 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
1044 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
1045 rc = TRUE;
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1046 } else {
17984
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1047 msim_unrecognized(session, msg, "got to msim_incoming_action but unrecognized value for 'msg'");
17952
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1048 rc = FALSE;
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1049 }
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1050
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1051
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1052 g_free(msg_text);
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1053 g_free(username);
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1054
4f2723ecd15a Add untested implementation of msim_incoming_action().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17951
diff changeset
1055 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
1056 }
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1057
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1058 /**
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1059 * 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
1060 *
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1061 * @param gc
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1062 * @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
1063 * @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
1064 *
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1065 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1066 unsigned int
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1067 msim_send_typing(PurpleConnection *gc, const gchar *name, PurpleTypingState state)
17934
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1068 {
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
1069 const gchar *typing_str;
17959
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
1070 MsimSession *session;
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
1071
cfbe7f9e5200 Send typing notifications (tested).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17958
diff changeset
1072 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
1073
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1074 switch (state)
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1075 {
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1076 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
1077 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
1078 break;
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1079
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1080 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
1081 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
1082 default:
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1083 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
1084 break;
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1085 }
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1086
17953
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1087 purple_debug_info("msim", "msim_send_typing(%s): %d (%s)\n", name, state, typing_str);
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
1088 msim_send_bm(session, 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
1089 return 0;
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1090 }
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1091
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1092 /** Callback for msim_get_info(), for when user info is received. */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1093 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1094 msim_get_info_cb(MsimSession *session, MsimMessage *user_info_msg, gpointer data)
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1095 {
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1096 GHashTable *body;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1097 gchar *body_str;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1098 MsimMessage *msg;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1099 gchar *user;
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1100 PurpleNotifyUserInfo *user_info;
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1101 PurpleBuddy *buddy;
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1102 gchar *song;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1103
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1104
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1105 /* Get user{name,id} from msim_get_info, passed as an MsimMessage for orthogonality. */
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1106 msg = (MsimMessage *)data;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1107 user = g_strdup(msim_msg_get_string(msg, "user"));
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1108 purple_debug_info("msim", "msim_get_info_cb: got for user: %s\n", user);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1109 msim_msg_free(msg);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1110
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1111
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1112 body_str = msim_msg_get_string(user_info_msg, "body");
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1113 body = msim_parse_body(body_str);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1114 g_free(body_str);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1115
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1116 buddy = purple_find_buddy(session->account, user);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1117 /* Note: don't assume buddy is non-NULL; will be if lookup random user not on blist. */
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1118
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1119 user_info = purple_notify_user_info_new();
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1120
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1121 /* Identification */
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1122 purple_notify_user_info_add_pair(user_info, _("User"), user);
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1123
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1124 /* note: g_hash_table_lookup does not create a new string! */
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1125 purple_notify_user_info_add_pair(user_info, _("User ID"),
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1126 g_strdup(g_hash_table_lookup(body, "UserID")));
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1127
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1128 /* a/s/l...the vitals */
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1129 purple_notify_user_info_add_pair(user_info, _("Age"),
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1130 g_strdup(g_hash_table_lookup(body, "Age")));
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1131
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1132 purple_notify_user_info_add_pair(user_info, _("Gender"),
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1133 g_strdup(g_hash_table_lookup(body, "Gender")));
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1134
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1135 purple_notify_user_info_add_pair(user_info, _("Location"),
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1136 g_strdup(g_hash_table_lookup(body, "Location")));
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1137
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1138 /* Other information */
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1139
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1140 /* Headline comes from buddy status messages */
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1141 if (buddy && purple_blist_node_get_string(&buddy->node, "Headline"))
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1142 purple_notify_user_info_add_pair(user_info, "Headline",
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1143 purple_blist_node_get_string(&buddy->node, "Headline"));
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1144
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1145 song = g_strdup_printf("%s - %s",
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1146 (gchar *)g_hash_table_lookup(body, "BandName"),
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1147 (gchar *)g_hash_table_lookup(body, "SongName"));
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1148
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1149
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1150 purple_notify_user_info_add_pair(user_info, _("Song"), song);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1151 /* Do not free song - used by user_info. */
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1152
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1153 /* Total friends only available if looked up by uid, not username. */
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1154 if (g_hash_table_lookup(body, "TotalFriends"))
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1155 purple_notify_user_info_add_pair(user_info, _("Total Friends"),
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1156 g_strdup(g_hash_table_lookup(body, "TotalFriends")));
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1157
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1158 purple_notify_userinfo(session->gc, user, user_info, NULL, NULL);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1159 purple_debug_info("msim", "msim_get_info_cb: username=%s\n", user);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1160 //purple_notify_user_info_destroy(user_info);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1161 /* Do not free username, since it will be used by user_info. */
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1162
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1163 //g_hash_table_destroy(body);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1164 }
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1165
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1166 /** Retrieve a user's profile. */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1167 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1168 msim_get_info(PurpleConnection *gc, const gchar *user)
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1169 {
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1170 PurpleBuddy *buddy;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1171 MsimSession *session;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1172 guint uid;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1173 gchar *user_to_lookup;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1174 MsimMessage *user_msg;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1175
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1176 session = (MsimSession *)gc->proto_data;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1177
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1178 /* Obtain uid of buddy. */
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1179 buddy = purple_find_buddy(session->account, user);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1180 if (buddy)
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1181 {
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1182 uid = purple_blist_node_get_int(&buddy->node, "UserID");
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1183 if (!uid)
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1184 {
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1185 PurpleNotifyUserInfo *user_info;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1186
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1187 user_info = purple_notify_user_info_new();
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1188 purple_notify_user_info_add_pair(user_info, NULL,
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1189 _("This buddy appears to not have a userid stored in the buddy list, can't look up. Is the user really on the buddy list?"));
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1190
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1191 purple_notify_userinfo(session->gc, user, user_info, NULL, NULL);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1192 purple_notify_user_info_destroy(user_info);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1193 return;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1194 }
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1195
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1196 user_to_lookup = g_strdup_printf("%d", uid);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1197 } else {
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1198
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1199 /* Looking up buddy not on blist. Lookup by whatever user entered. */
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1200 user_to_lookup = g_strdup(user);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1201 }
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1202
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1203 /* Pass the username to msim_get_info_cb(), because since we lookup
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1204 * by userid, the userinfo message will only contain the uid (not
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1205 * the username).
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1206 */
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1207 user_msg = msim_msg_new(TRUE,
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1208 "user", MSIM_TYPE_STRING, g_strdup(user),
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1209 NULL);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1210 purple_debug_info("msim", "msim_get_info, setting up lookup, user=%s\n", user);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1211
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1212 msim_lookup_user(session, user_to_lookup, msim_get_info_cb, user_msg);
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1213
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1214 g_free(user_to_lookup);
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1215 }
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
1216
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1217 /** 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
1218 *
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1219 * @param session
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1220 * @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
1221 * @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
1222 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1223 static void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1224 msim_incoming_resolved(MsimSession *session, MsimMessage *userinfo,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1225 gpointer data)
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1226 {
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1227 gchar *body_str;
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1228 GHashTable *body;
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1229 gchar *username;
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1230 MsimMessage *msg;
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1231
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1232 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
1233 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
1234 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
1235 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
1236 g_free(body_str);
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1237
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1238 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
1239 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
1240
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1241 msg = (MsimMessage *)data;
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1242 /* 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
1243 * 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
1244 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
1245
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1246 msim_process(session, msg);
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1247
17951
313b994beb1d Transition msim_incoming_im() to the callbackless infrastructure. Remove
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17950
diff changeset
1248 /* 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
1249 //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
1250 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
1251 }
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1252
18002
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1253 #if 0
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1254 /* 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
1255 *
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1256 * @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
1257 *
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1258 * @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
1259 *
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1260 * 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
1261 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1262 static const gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1263 msim_uid2username_from_blist(MsimSession *session, guint wanted_uid)
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1264 {
18002
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1265 GSList *buddies, *cur;
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1266
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1267 buddies = purple_find_buddies(session->account, NULL);
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1268
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1269 if (!buddies)
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1270 {
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1271 purple_debug_info("msim", "msim_uid2username_from_blist: no buddies?");
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1272 return NULL;
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1273 }
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1274
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1275 for (cur = buddies; cur != NULL; cur = g_slist_next(cur))
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1276 {
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1277 PurpleBuddy *buddy;
18002
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1278 //PurpleBlistNode *node;
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1279 guint uid;
18002
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1280 const gchar *name;
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1281
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1282
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1283 /* See finch/gnthistory.c */
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1284 buddy = cur->data;
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1285 //node = cur->data;
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1286
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
1287 uid = purple_blist_node_get_int(&buddy->node, "UserID");
18002
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1288 //uid = purple_blist_node_get_int(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
1289
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1290 /* 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
1291 /* 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
1292
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1293 /* 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
1294 * 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
1295 name = purple_buddy_get_name(buddy); /* crash */
18002
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1296 //name = purple_buddy_get_name((PurpleBuddy *)node); /* crash */
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1297 /* 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
1298
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1299 /* 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
1300 /* 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
1301
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1302 /* crash =
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1303 *** 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
1304 ======= Backtrace: =========
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1305 /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
1306 /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
1307 /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
1308 /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
1309 /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
1310 /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
1311 /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
1312 /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
1313 /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
1314 /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
1315 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
1316 /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
1317 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
1318
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1319 or:
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1320 *** 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
1321 (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
1322 #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
1323 #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
1324 #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
1325 #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
1326 #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
1327 #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
1328 #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
1329 #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
1330 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
1331 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
1332 #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
1333 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
1334
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1335
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1336 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
1337 */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1338 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
1339 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
1340
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1341 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
1342 {
18002
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1343 gchar *ret;
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1344
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1345 ret = g_strdup(name);
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1346
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1347 g_slist_free(buddies);
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1348
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1349 return ret;
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1350 }
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1351 }
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1352
18002
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1353 g_slist_free(buddies);
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1354 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
1355 }
17958
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1356 #endif
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1357
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1358 /** 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
1359 *
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1360 * @param session
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1361 * @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
1362 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1363 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1364 msim_preprocess_incoming(MsimSession *session, MsimMessage *msg)
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1365 {
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1366 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
1367 {
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1368 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
1369 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
1370
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1371 /* '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
1372 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
1373
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1374 /* 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
1375 * it crashes for unknown reasons, memory realloc error. */
18002
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1376 #if 0
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1377 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
1378 #else
18002
ba63892ad307 Change around msim_uid2username_from_blist() to try to get it to work
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18001
diff changeset
1379 username = NULL;
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1380 #endif
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1381
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1382 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
1383 {
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1384 /* 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
1385 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
1386 username);
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1387 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
1388 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
1389
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1390 } else {
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1391 gchar *from;
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1392
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1393 /* 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
1394 /* 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
1395 purple_debug_info("msim", "msim_incoming: sending lookup, setting up callback\n");
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1396 from = msim_msg_get_string(msg, "f");
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1397 msim_lookup_user(session, from, msim_incoming_resolved, msim_msg_clone(msg));
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
1398 g_free(from);
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1399
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1400 /* indeterminate */
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
1401 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
1402 }
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1403 } else {
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1404 /* 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
1405 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
1406 }
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1407 }
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1408
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1409 /**
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1410 * Process a message.
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1411 *
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1412 * @param session
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1413 * @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
1414 *
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1415 * @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
1416 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1417 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1418 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
1419 {
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1420 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
1421 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
1422
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
1423 #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
1424 {
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
1425 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
1426 }
16335
0c2b32acc27a Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16334
diff changeset
1427 #endif
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1428
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1429 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
1430 {
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1431 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
1432 } else if (msim_msg_get(msg, "sesskey")) {
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1433 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
1434
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
1435 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
1436 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
1437
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1438 /* 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
1439 * 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
1440 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
1441
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1442
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1443 purple_connection_set_state(session->gc, PURPLE_CONNECTED);
18003
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1444
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1445
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1446 /* We now know are our own username, only after we're logged in..
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1447 * which is weird, but happens because you login with your email
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1448 * address and not username. Will be freed in msim_session_destroy(). */
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1449 session->username = msim_msg_get_string(msg, "uniquenick");
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1450
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1451 #ifdef MSIM_FAKE_SELF_ONLINE
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1452 /* Fake our self coming online. */
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1453 purple_prpl_got_user_status(session->account, session->username, purple_primitive_get_id_from_type(PURPLE_STATUS_AVAILABLE), NULL);
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1454 #endif
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1455
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1456 return TRUE;
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1457 } 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
1458 guint bm;
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1459
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1460 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
1461 switch (bm)
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1462 {
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1463 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
1464 return msim_status(session, msg);
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1465 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
1466 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
1467 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
1468 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
1469 default:
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1470 /* 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
1471 * purposes during development. */
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1472 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
1473 }
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1474 } 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
1475 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
1476 } 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
1477 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
1478 } else if (msim_msg_get(msg, "ka")) {
17983
ab605d563943 Add TODO for msimprpl to timeout (handling keep-alives).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17982
diff changeset
1479 /* TODO: Setup a timer, if keep-alive is not received within ~3 minutes, then
ab605d563943 Add TODO for msimprpl to timeout (handling keep-alives).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17982
diff changeset
1480 * disconnect the user. As it stands, if Internet connection goes out (this
ab605d563943 Add TODO for msimprpl to timeout (handling keep-alives).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17982
diff changeset
1481 * just happened here), msimprpl will appear to be connected forever, while
ab605d563943 Add TODO for msimprpl to timeout (handling keep-alives).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17982
diff changeset
1482 * other plugins (oscar, etc.) will time out. Msimprpl should timeout too. */
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1483 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
1484 return TRUE;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1485 } else {
17984
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
1486 msim_unrecognized(session, msg, "in msim_process");
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1487 return FALSE;
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1488 }
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1489 }
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
1490
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
1491 /** Store an field of information about a buddy. */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1492 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1493 msim_store_buddy_info_each(gpointer key, gpointer value, gpointer user_data)
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
1494 {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1495 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
1496 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
1497
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1498 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
1499 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
1500 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
1501
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1502 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
1503 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
1504 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
1505 {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1506 /* 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
1507 * 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
1508 * 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
1509 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
1510 } 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
1511 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
1512 }
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1513 }
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1514
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1515 /** 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
1516 *
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1517 * @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
1518 * @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
1519 *
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1520 * 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
1521 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1522 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1523 msim_store_buddy_info(MsimSession *session, MsimMessage *msg)
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
1524 {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1525 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
1526 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
1527 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
1528 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
1529
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1530 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
1531
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1532 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
1533
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1534 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
1535 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
1536 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
1537 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
1538
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1539 /* 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
1540 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
1541
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1542 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
1543 {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1544 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
1545 "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
1546 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
1547 }
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1548
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1549 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
1550 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
1551
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1552 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
1553
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1554 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
1555 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
1556 {
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1557 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
1558 }
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1559
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1560 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
1561 }
e2bdcbb55218 Show buddy information in tooltip text, and the display name for status text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17964
diff changeset
1562
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
1563 /**
17934
d163dde3aff1 Add, but do not use, incomplete functions for using typing notifications.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17933
diff changeset
1564 * Process a persistance message reply from the server.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1565 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1566 * @param session
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1567 * @param msg Message reply from server.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1568 *
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1569 * @return TRUE if successful.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1570 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1571 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1572 msim_process_reply(MsimSession *session, MsimMessage *msg)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1573 {
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1574 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
1575 g_return_val_if_fail(msg != NULL, FALSE);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1576
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1577 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
1578 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1579 MSIM_USER_LOOKUP_CB cb;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1580 gpointer data;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1581 guint rid;
17958
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
1582
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
1583 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
1584
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
1585 rid = msim_msg_get_integer(msg, "rid");
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1586
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1587 /* 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
1588 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
1589 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
1590
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1591 if (cb)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1592 {
16332
f0e987f024e0 Use g_convert for UTF-16LE conversion instead of converting manually.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16330
diff changeset
1593 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
1594 "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
1595 /* 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
1596 cb(session, msim_msg_clone(msg), data);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1597 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
1598 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
1599 } else {
16332
f0e987f024e0 Use g_convert for UTF-16LE conversion instead of converting manually.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16330
diff changeset
1600 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
1601 "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
1602 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1603 }
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1604
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1605 return TRUE;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1606 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1607
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1608 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1609 * Handle an error from the server.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1610 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1611 * @param session
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1612 * @param msg The message.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1613 *
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1614 * @return TRUE if successfully reported error.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1615 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1616 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1617 msim_error(MsimSession *session, MsimMessage *msg)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1618 {
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1619 gchar *errmsg, *full_errmsg;
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1620 guint err;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1621
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1622 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
1623 g_return_val_if_fail(msg != NULL, FALSE);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1624
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1625 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
1626 errmsg = msim_msg_get_string(msg, "errmsg");
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1627
17924
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1628 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
1629
191c78db42ae Use MsimMessage for receiving messages everywhere, instead of GHashTable.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
1630 g_free(errmsg);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1631
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1632 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
1633
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
1634 purple_notify_error(session->account, g_strdup(_("MySpaceIM Error")),
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1635 full_errmsg, NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1636
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1637 /* 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
1638 if (msim_msg_get(msg, "fatal"))
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1639 {
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1640 purple_debug_info("msim", "fatal error, closing\n");
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1641 purple_connection_error(session->gc, full_errmsg);
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
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1644 return TRUE;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1645 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1646
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1647 /**
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1648 * Process incoming status messages.
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1649 *
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1650 * @param session
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1651 * @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
1652 *
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1653 * @return TRUE if successful.
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1654 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1655 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1656 msim_status(MsimSession *session, MsimMessage *msg)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1657 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1658 PurpleBuddyList *blist;
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1659 PurpleBuddy *buddy;
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1660 //PurpleStatus *status;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1661 gchar **status_array;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1662 GList *list;
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1663 gchar *status_headline;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1664 gchar *status_str;
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1665 gint i, status_code, purple_status_code;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1666 gchar *username;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1667
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1668 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
1669 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
1670
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
1671 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
1672 g_return_val_if_fail(status_str != NULL, FALSE);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1673
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1674 msim_msg_dump("msim_status msg=%s\n", msg);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1675
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1676 /* 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
1677 username = msim_msg_get_string(msg, "_username");
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1678 /* 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
1679 * 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
1680
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1681 if (username == NULL)
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1682 {
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1683 g_free(status_str);
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
1684 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
1685 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1686
16332
f0e987f024e0 Use g_convert for UTF-16LE conversion instead of converting manually.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16330
diff changeset
1687 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
1688 "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
1689 username, status_str);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1690
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1691 /* 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
1692 status_array = g_strsplit(status_str, "|", 0);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1693 for (list = NULL, i = 0;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1694 status_array[i];
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1695 i++)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1696 {
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1697 /* 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
1698 * 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
1699 */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1700 list = g_list_append(list, status_array[i]);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1701 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1702
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1703 /* Example fields:
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1704 * |s|0|ss|Offline
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1705 * |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
1706 *
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1707 * 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
1708 */
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1709
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1710 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
1711 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
1712 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
1713
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1714 blist = purple_get_blist();
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1715
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1716 /* Add buddy if not found */
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1717 buddy = purple_find_buddy(session->account, username);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1718 if (!buddy)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1719 {
16332
f0e987f024e0 Use g_convert for UTF-16LE conversion instead of converting manually.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16330
diff changeset
1720 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
1721 "msim_status: making new buddy for %s\n", username);
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1722 buddy = purple_buddy_new(session->account, username, NULL);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1723
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1724 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
1725
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
1726 /* 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
1727 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
1728
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1729 msim_store_buddy_info(session, msg);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1730 } else {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
1731 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
1732 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1733
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
1734 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
1735
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1736 /* Set user status */
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1737 switch (status_code)
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1738 {
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1739 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
1740 break;
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1741 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
1742 break;
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1743 default:
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1744 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
1745 username, status_code);
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
1746 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
1747 }
18003
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1748
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1749 #ifdef MSIM_FAKE_SELF_ONLINE
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1750 if (!strcmp(username, session->username) && purple_status_code == PURPLE_STATUS_OFFLINE)
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1751 {
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1752 /* Hack to ignore offline status notices on self. */
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1753 } else {
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1754 #endif
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1755 purple_prpl_got_user_status(session->account, username, purple_primitive_get_id_from_type(purple_status_code), NULL);
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1756 #ifdef MSIM_FAKE_SELF_ONLINE
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1757 }
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
1758 #endif
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1759
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1760 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
1761 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
1762 g_free(username);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1763 g_list_free(list);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1764
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
1765 return TRUE;
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
17975
1404d3846cd4 Update several outdated TODO comments.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17974
diff changeset
1768 /** Add a buddy to user's buddy list. */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1769 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1770 msim_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group)
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1771 {
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1772 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
1773 MsimMessage *msg;
17987
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1774 /* MsimMessage *msg_blocklist; */
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1775
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1776 session = (MsimSession *)gc->proto_data;
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1777 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
1778 group ? group->name : "(no group)");
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1779
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1780 msg = msim_msg_new(TRUE,
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1781 "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
1782 "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
1783 /* "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
1784 "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
1785 NULL);
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1786
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1787 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
1788 {
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1789 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
1790 msim_msg_free(msg);
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1791 return;
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1792 }
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1793 msim_msg_free(msg);
17987
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1794
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1795 /* TODO: if addbuddy fails ('error' message is returned), delete added buddy from
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1796 * buddy list since Purple adds it locally. */
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1797
17987
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1798 /* TODO: Update blocklist. */
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1799 #if 0
17987
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1800 msg_blocklist = msim_msg_new(TRUE,
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1801 "persist", MSIM_TYPE_INTEGER, 1,
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1802 "sesskey", MSIM_TYPE_INTEGER, session->sesskey,
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1803 "cmd", MSIM_TYPE_INTEGER, MSIM_CMD_BIT_ACTION | MSIM_CMD_PUT,
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1804 "dsn", MSIM_TYPE_INTEGER, MC_CONTACT_INFO_DSN,
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1805 "lid", MSIM_TYPE_INTEGER, MC_CONTACT_INFO_LID,
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1806 /* TODO: Use msim_new_reply_callback to get rid. */
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1807 "rid", MSIM_TYPE_INTEGER, session->next_rid++,
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1808 "body", MSIM_TYPE_STRING,
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1809 g_strdup_printf("ContactID=<uid>\034"
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1810 "GroupName=%s\034"
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1811 "Position=1000\034"
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1812 "Visibility=1\034"
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1813 "NickName=\034"
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1814 "NameSelect=0",
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1815 "Friends" /*group->name*/ ));
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1816
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1817 if (!msim_postprocess_outgoing(session, msg, buddy->name, "body", NULL))
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1818 {
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1819 purple_notify_error(NULL, NULL, _("Failed to add buddy"), _("persist command failed"));
17987
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1820 msim_msg_free(msg_blocklist);
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
1821 return;
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1822 }
17987
a0baf4e80ee9 Rework addbuddy, but leave it commented-out (non-functional). Add TODO for
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17986
diff changeset
1823 msim_msg_free(msg_blocklist);
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1824 #endif
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1825 }
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
1826
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1827 /** 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
1828 *
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1829 * @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
1830 * @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
1831 * @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
1832 * @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
1833 *
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1834 * 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
1835 * 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
1836 *
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1837 * 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
1838 * 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
1839 *
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1840 * 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
1841 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1842 MsimMessage *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1843 msim_do_postprocessing(MsimMessage *msg, const gchar *uid_before,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1844 const gchar *uid_field_name, guint uid)
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1845 {
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1846 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
1847 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
1848 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
1849
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1850 /* 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
1851 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
1852 {
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1853 MsimMessageElement *elem;
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1854 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
1855 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
1856
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1857 /* 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
1858
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1859 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
1860 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
1861
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1862 /* 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
1863 * 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
1864 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
1865
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1866 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
1867 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
1868 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
1869 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
1870
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1871 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
1872 elem->data);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1873
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1874 } else {
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1875 /* 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
1876 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
1877 }
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1878
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1879 return msg;
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1880 }
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1881
17960
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1882 /** 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
1883 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1884 * @param session
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1885 * @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
1886 * @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
1887 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1888 * 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
1889 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1890 * _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
1891 * _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
1892 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
1893 *
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1894 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1895 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1896 msim_postprocess_outgoing_cb(MsimSession *session, MsimMessage *userinfo, gpointer data)
17953
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1897 {
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1898 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
1899 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
1900 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
1901 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
1902
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1903 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
1904
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1905 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
1906
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1907 /* 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
1908 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
1909 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
1910 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
1911 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
1912
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1913 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
1914 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
1915
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1916 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
1917 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
1918
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1919 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
1920
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1921 /* Send */
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1922 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
1923 {
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1924 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
1925 }
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1926
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1927
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1928 /* 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
1929 * 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
1930 */
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1931 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
1932 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
1933
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1934 //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
1935 }
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1936
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1937 /** 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
1938 *
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1939 * @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
1940 * @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
1941 * @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
1942 * @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
1943 * @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
1944 *
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1945 * @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
1946 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1947 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1948 msim_postprocess_outgoing(MsimSession *session, MsimMessage *msg,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1949 const gchar *username, const gchar *uid_field_name,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
1950 const gchar *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
1951 {
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1952 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
1953 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
1954 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
1955
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17954
diff changeset
1956 /* 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
1957 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
1958 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
1959 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
1960 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
1961 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
1962 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
1963
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1964 /* 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
1965 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
1966 {
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1967 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
1968 } else {
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1969 /* 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
1970 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
1971 if (buddy)
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1972 {
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
1973 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
1974 } else {
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1975 uid = 0;
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1976 }
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1977
b5d62ba24136 Change msim_send_im() to use msim_postprocess_outgoing(), eliminating the
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17953
diff changeset
1978 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
1979 {
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1980 /* 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
1981 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
1982 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
1983 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
1984 /* 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
1985 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
1986 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
1987 }
17953
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1988 }
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
1989
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1990 /* 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
1991 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
1992 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
1993
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1994 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
1995
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
1996 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
1997
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
1998 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
1999
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
2000 //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
2001
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
2002 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
2003 }
c76e16c7cf0a Add, but do not use, two new functions to postprocess outgoing messages
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17952
diff changeset
2004
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2005 /** Remove a buddy from the user's buddy list. */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2006 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2007 msim_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group)
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2008 {
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2009 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
2010 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
2011 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
2012 MsimMessage *blocklist_msg;
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2013
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2014 session = (MsimSession *)gc->proto_data;
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2015
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
2016 delbuddy_msg = msim_msg_new(TRUE,
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2017 "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
2018 "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
2019 /* '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
2020 NULL);
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
2021 /* 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
2022 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
2023 {
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2024 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
2025 return;
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2026 }
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2027
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
2028 persist_msg = msim_msg_new(TRUE,
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2029 "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
2030 "sesskey", MSIM_TYPE_INTEGER, session->sesskey,
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2031 "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
2032 "dsn", MSIM_TYPE_INTEGER, MD_DELETE_BUDDY_DSN,
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2033 "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
2034 "uid", MSIM_TYPE_INTEGER, session->userid,
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2035 "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
2036 /* <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
2037 "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
2038 NULL);
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2039
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2040 /* 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
2041 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
2042 {
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2043 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
2044 return;
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2045 }
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2046
17963
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
2047 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
2048 "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
2049 "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
2050 /* 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
2051 "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
2052 NULL);
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
2053
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
2054 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
2055 {
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
2056 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
2057 return;
07e61fbc0abe Make msim_remove_buddy() functional. It now sends the delbuddy, persist,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17961
diff changeset
2058 }
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2059 }
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2060
17968
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
2061 /** 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
2062 *
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2063 * The protocol supports offline messages in just the same way as online
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2064 * messages.
17968
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
2065 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2066 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2067 msim_offline_message(const PurpleBuddy *buddy)
17968
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
2068 {
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
2069 return TRUE;
c29352b95fa6 Add msim_offline_message() for offline message status. Always return TRUE,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17967
diff changeset
2070 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2071
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2072 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2073 * Callback when input available.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2074 *
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2075 * @param gc_uncasted A PurpleConnection pointer.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2076 * @param source File descriptor.
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2077 * @param cond PURPLE_INPUT_READ
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2078 *
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
2079 * 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
2080 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2081 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2082 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
2083 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2084 PurpleConnection *gc;
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2085 PurpleAccount *account;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2086 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2087 gchar *end;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2088 int n;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2089
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2090 g_return_if_fail(gc_uncasted != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2091 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
2092
17906
f87472f223aa Stylistic improvements - use type *name instead of type* name for pointers
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17903
diff changeset
2093 gc = (PurpleConnection *)(gc_uncasted);
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2094 account = purple_connection_get_account(gc);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2095 session = gc->proto_data;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2096
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
2097 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
2098 g_return_if_fail(MSIM_SESSION_VALID(session));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2099
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2100 /* Only can handle so much data at once...
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2101 * 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
2102 * Should be large enough to hold the largest protocol message.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2103 */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2104 if (session->rxoff == MSIM_READ_BUF_SIZE)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2105 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2106 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
2107 MSIM_READ_BUF_SIZE);
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
2108 purple_connection_error(gc, _("Read buffer full"));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2109 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2110 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2111
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2112 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
2113 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
2114 MSIM_READ_BUF_SIZE - session->rxoff);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2115
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2116 /* 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
2117 * 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
2118 */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2119 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
2120
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2121 if (n < 0 && errno == EAGAIN)
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 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2124 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2125 else if (n < 0)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2126 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2127 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
2128 "error=%s, source=%d, fd=%d (%X))\n",
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2129 n, strerror(errno), source, session->fd, session->fd);
17996
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2130 purple_connection_error(gc, _("Read error"));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2131 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2132 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2133 else if (n == 0)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2134 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2135 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
2136 purple_connection_error(gc, _("Server has disconnected"));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2137 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2138 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2139
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2140 /* Null terminate */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2141 session->rxbuf[session->rxoff + n] = 0;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2142
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2143 /* 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
2144 if (strlen(session->rxbuf + session->rxoff) != n)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2145 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2146 /* Occurs after login, but it is not a null byte. */
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2147 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
2148 "--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
2149 strlen(session->rxbuf + session->rxoff), n);
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2150 //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
2151 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2152 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2153
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2154 session->rxoff += n;
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2155 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
2156
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
2157 #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
2158 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
2159 #endif
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2160
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2161 /* Look for \\final\\ end markers. If found, process message. */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2162 while((end = strstr(session->rxbuf, MSIM_FINAL_STRING)))
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2163 {
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
2164 MsimMessage *msg;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2165
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
2166 #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
2167 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
2168 #endif
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2169 *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
2170 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
2171 if (!msg)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2172 {
16332
f0e987f024e0 Use g_convert for UTF-16LE conversion instead of converting manually.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16330
diff changeset
2173 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
2174 session->rxbuf);
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
2175 purple_connection_error(gc, _("Unparseable message"));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2176 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2177 else
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2178 {
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
2179 /* 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
2180 * 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
2181 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
2182 {
17950
c146721d0ca7 Add message preprocessing in msim_preprocess_incoming(), to resolve
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17949
diff changeset
2183 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
2184 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
2185 msim_msg_free(msg);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2186 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2187
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2188 /* Move remaining part of buffer to beginning. */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2189 session->rxoff -= strlen(session->rxbuf) + strlen(MSIM_FINAL_STRING);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2190 memmove(session->rxbuf, end + strlen(MSIM_FINAL_STRING),
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2191 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
2192
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2193 /* Clear end of buffer */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2194 //memset(end, 0, MSIM_READ_BUF_SIZE - (end - session->rxbuf));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2195 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2196 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2197
17960
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2198 /* 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
2199 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2200 * @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
2201 * @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
2202 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2203 * @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
2204 *
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2205 * 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
2206 * 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
2207 * 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
2208 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2209 guint
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2210 msim_new_reply_callback(MsimSession *session, MSIM_USER_LOOKUP_CB cb,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2211 gpointer data)
17960
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2212 {
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2213 guint rid;
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2214
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2215 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
2216
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2217 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
2218 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
2219
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2220 return rid;
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2221 }
0c7d41bbf8d7 Several small changes to work towards a working msim_remove_buddy():
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17959
diff changeset
2222
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2223 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2224 * Callback when connected. Sets up input handlers.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2225 *
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2226 * @param data A PurpleConnection pointer.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2227 * @param source File descriptor.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2228 * @param error_message
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2229 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2230 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2231 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
2232 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2233 PurpleConnection *gc;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2234 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2235
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2236 g_return_if_fail(data != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2237
17906
f87472f223aa Stylistic improvements - use type *name instead of type* name for pointers
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17903
diff changeset
2238 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
2239 session = (MsimSession *)gc->proto_data;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2240
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2241 if (source < 0)
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2242 {
17895
6c2facc6c33b Use _ for translations in msimprpl. See #648.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17894
diff changeset
2243 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
2244 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
2245 error_message, source));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2246 return;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2247 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2248
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2249 session->fd = source;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2250
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2251 gc->inpa = purple_input_add(source, PURPLE_INPUT_READ, msim_input_cb, gc);
18003
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
2252
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
2253
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2254 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2255
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2256 /* Session methods */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2257
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2258 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2259 * Create a new MSIM session.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2260 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2261 * @param acct The account to create the session from.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2262 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2263 * @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
2264 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2265 MsimSession *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2266 msim_session_new(PurpleAccount *acct)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2267 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2268 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2269
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2270 g_return_val_if_fail(acct != NULL, NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2271
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2272 session = g_new0(MsimSession, 1);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2273
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2274 session->magic = MSIM_SESSION_STRUCT_MAGIC;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2275 session->account = acct;
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2276 session->gc = purple_account_get_connection(acct);
18003
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
2277 session->sesskey = 0;
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
2278 session->userid = 0;
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
2279 session->username = NULL;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2280 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
2281
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
2282 /* TODO: Remove. */
16335
0c2b32acc27a Replace printf() in MySpaceIM prpl with purple_debug_info().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16334
diff changeset
2283 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
2284 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
2285 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
2286 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
2287 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
2288 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
2289 Figure this out, once free cache. */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2290 session->rxoff = 0;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2291 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
2292 session->next_rid = 1;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2293
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2294 return session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2295 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2296
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2297 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2298 * Free a session.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2299 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2300 * @param session The session to destroy.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2301 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2302 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2303 msim_session_destroy(MsimSession *session)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2304 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2305 g_return_if_fail(MSIM_SESSION_VALID(session));
17996
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2306
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2307 session->magic = -1;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2308
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2309 g_free(session->rxbuf);
18003
fb399e32e44c Add MSIM_FAKE_SELF_ONLINE preprocessor definition (which I define) to fake
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18002
diff changeset
2310 g_free(session->username);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2311
17957
bc5874ed7a09 Add msim_uid2username_from_blist() to lookup a username by userid, by
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17956
diff changeset
2312 /* 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
2313 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
2314 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
2315
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2316 g_free(session);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2317 }
16333
0fdea8ad21cb Add MySpaceIM header file and reorganize functions.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16332
diff changeset
2318
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2319 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2320 * Close the connection.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2321 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2322 * @param gc The connection.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2323 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2324 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2325 msim_close(PurpleConnection *gc)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2326 {
17958
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
2327 MsimSession *session;
17937
0f30d74fcd9c Add incomplete msim_add_buddy() implementation.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
2328
17996
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2329 if (gc == NULL)
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2330 return;
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2331
17958
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
2332 session = (MsimSession *)gc->proto_data;
17996
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2333 if (session == NULL)
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2334 return;
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2335
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2336 gc->proto_data = NULL;
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2337
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2338 if (!MSIM_SESSION_VALID(session))
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2339 return;
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2340
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2341 if (session->gc->inpa)
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2342 purple_input_remove(session->gc->inpa);
d419619280db Add a bunch of debugging to help fix #193.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17995
diff changeset
2343
17958
9f809365230b Add TODO in order to fix msim_tooltip_text.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17957
diff changeset
2344 msim_session_destroy(session);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2345 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2346
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2347
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2348 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2349 * Check if a string is a userid (all numeric).
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2350 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2351 * @param user The user id, email, or name.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2352 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2353 * @return TRUE if is userid, FALSE if not.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2354 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2355 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2356 msim_is_userid(const gchar *user)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2357 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2358 g_return_val_if_fail(user != NULL, FALSE);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2359
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2360 return strspn(user, "0123456789") == strlen(user);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2361 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2362
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2363 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2364 * Check if a string is an email address (contains an @).
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2365 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2366 * @param user The user id, email, or name.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2367 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2368 * @return TRUE if is an email, FALSE if not.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2369 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2370 * 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
2371 * means of validating email addresses, but to distinguish
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2372 * between a user represented by an email address from
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2373 * other forms of identification.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2374 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2375 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2376 msim_is_email(const gchar *user)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2377 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2378 g_return_val_if_fail(user != NULL, FALSE);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2379
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2380 return strchr(user, '@') != NULL;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2381 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2382
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2383
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2384 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2385 * Asynchronously lookup user information, calling callback when receive result.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2386 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2387 * @param session
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
2388 * @param user The user id, email address, or username. Not freed.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2389 * @param cb Callback, called with user information when available.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2390 * @param data An arbitray data pointer passed to the callback.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2391 */
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
2392 /* TODO: change to not use callbacks */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2393 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2394 msim_lookup_user(MsimSession *session, const gchar *user,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2395 MSIM_USER_LOOKUP_CB cb, gpointer data)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2396 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2397 gchar *field_name;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2398 guint rid, cmd, dsn, lid;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2399
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2400 g_return_if_fail(MSIM_SESSION_VALID(session));
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2401 g_return_if_fail(user != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2402 g_return_if_fail(cb != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2403
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17906
diff changeset
2404 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
2405 "asynchronously looking up <%s>\n", user);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2406
17956
0b3393767f6d Use msim_postprocess_outgoing() to resolve uid for adding and deleting buddies.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
2407 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
2408
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2409 /* 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
2410 rid = msim_new_reply_callback(session, cb, data);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2411
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2412 /* Send request */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2413
17930
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
2414 cmd = MSIM_CMD_GET;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2415
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2416 if (msim_is_userid(user))
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2417 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2418 field_name = "UserID";
17930
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
2419 dsn = MG_MYSPACE_INFO_BY_ID_DSN;
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
2420 lid = MG_MYSPACE_INFO_BY_ID_LID;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2421 } else if (msim_is_email(user)) {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2422 field_name = "Email";
17930
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
2423 dsn = MG_MYSPACE_INFO_BY_STRING_DSN;
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
2424 lid = MG_MYSPACE_INFO_BY_STRING_LID;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2425 } else {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2426 field_name = "UserName";
17930
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
2427 dsn = MG_MYSPACE_INFO_BY_STRING_DSN;
d8908611bf64 Use symbolic constants for persist messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
2428 lid = MG_MYSPACE_INFO_BY_STRING_LID;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2429 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2430
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2431
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17934
diff changeset
2432 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
2433 "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
2434 "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
2435 "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
2436 "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
2437 "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
2438 "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
2439 "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
2440 /* 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
2441 "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
2442 NULL));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2443 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2444
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2445
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2446 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2447 * Obtain the status text for a buddy.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2448 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2449 * @param buddy The buddy to obtain status text for.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2450 *
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17969
diff changeset
2451 * @return Status text, or NULL if error. Caller g_free()'s.
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2452 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2453 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2454 char *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2455 msim_status_text(PurpleBuddy *buddy)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2456 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2457 MsimSession *session;
17976
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2458 const gchar *display_name, *headline;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2459
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2460 g_return_val_if_fail(buddy != NULL, NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2461
17906
f87472f223aa Stylistic improvements - use type *name instead of type* name for pointers
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17903
diff changeset
2462 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
2463 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
2464
17976
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2465 display_name = headline = NULL;
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2466
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2467 /* Retrieve display name and/or headline, depending on user preference. */
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2468 if (purple_account_get_bool(session->account, "show_display_name", TRUE))
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2469 {
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2470 display_name = purple_blist_node_get_string(&buddy->node, "DisplayName");
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2471 }
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2472
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2473 if (purple_account_get_bool(session->account, "show_headline", FALSE))
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2474 {
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2475 headline = purple_blist_node_get_string(&buddy->node, "Headline");
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2476 }
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2477
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2478 /* Return appropriate combination of display name and/or headline, or neither. */
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2479
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2480 if (display_name && headline)
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2481 return g_strconcat(display_name, " ", headline, NULL);
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2482
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
2483 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
2484 return g_strdup(display_name);
17976
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2485
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2486 if (headline)
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2487 return g_strdup(headline);
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2488
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2489 return NULL;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2490 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2491
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2492 /**
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2493 * Obtain the tooltip text for a buddy.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2494 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2495 * @param buddy Buddy to obtain tooltip text on.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2496 * @param user_info Variable modified to have the tooltip text.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2497 * @param full TRUE if should obtain full tooltip text.
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2498 *
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2499 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2500 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2501 msim_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2502 gboolean full)
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2503 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2504 g_return_if_fail(buddy != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2505 g_return_if_fail(user_info != NULL);
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2506
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2507 if (PURPLE_BUDDY_IS_ONLINE(buddy))
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2508 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2509 MsimSession *session;
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2510
17906
f87472f223aa Stylistic improvements - use type *name instead of type* name for pointers
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17903
diff changeset
2511 session = (MsimSession *)buddy->account->gc->proto_data;
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2512
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
2513 g_return_if_fail(MSIM_SESSION_VALID(session));
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2514
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
2515 /* 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
2516
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2517 /* Useful to identify the account the tooltip refers to. Other prpls show this. */
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
2518 purple_notify_user_info_add_pair(user_info, _("User Name"),
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
2519 (purple_blist_node_get_string(&buddy->node, "UserName")));
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2520
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2521 /* a/s/l...the vitals */
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
2522 purple_notify_user_info_add_pair(user_info, _("Age"),
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2523 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
2524
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
2525 purple_notify_user_info_add_pair(user_info, _("Gender"),
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
2526 (purple_blist_node_get_string(&buddy->node, "Gender")));
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2527
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
2528 purple_notify_user_info_add_pair(user_info, _("Location"),
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
2529 (purple_blist_node_get_string(&buddy->node, "Location")));
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2530
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2531 /* Other information */
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2532 if (purple_blist_node_get_string(&buddy->node, "Headline"))
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
2533 purple_notify_user_info_add_pair(user_info, _("Headline"),
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
2534 (purple_blist_node_get_string(&buddy->node, "Headline")));
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2535
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
2536 purple_notify_user_info_add_pair(user_info, _("Song"),
17967
a16d7668ab43 Reorganize the tooltip text, to show more useful information.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17966
diff changeset
2537 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
2538 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
2539 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
2540
17989
48499e10fac3 Retrieve information for profile ("Get Info") from server, instead of from
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17988
diff changeset
2541 purple_notify_user_info_add_pair(user_info, _("Total Friends"),
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
2542 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
2543
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2544 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2545 }
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2546
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2547 /** 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
2548 PurplePluginProtocolInfo prpl_info =
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2549 {
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2550 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
2551 NULL, /* user_splits */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2552 NULL, /* protocol_options */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2553 NO_BUDDY_ICONS, /* icon_spec - TODO: eventually should add this */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2554 msim_list_icon, /* list_icon */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2555 NULL, /* list_emblems */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2556 msim_status_text, /* status_text */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2557 msim_tooltip_text, /* tooltip_text */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2558 msim_status_types, /* status_types */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2559 NULL, /* blist_node_menu */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2560 NULL, /* chat_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2561 NULL, /* chat_info_defaults */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2562 msim_login, /* login */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2563 msim_close, /* close */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2564 msim_send_im, /* send_im */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2565 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
2566 msim_send_typing, /* send_typing */
17969
9a043ea6bc44 Implement msim_get_info() for users on the user's buddy list.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17968
diff changeset
2567 msim_get_info, /* get_info */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2568 NULL, /* set_away */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2569 NULL, /* set_idle */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2570 NULL, /* change_passwd */
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2571 msim_add_buddy, /* add_buddy */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2572 NULL, /* add_buddies */
17940
46246b04b219 Add (incomplete) msim_remove_buddy().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
2573 msim_remove_buddy, /* remove_buddy */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2574 NULL, /* remove_buddies */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2575 NULL, /* add_permit */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2576 NULL, /* add_deny */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2577 NULL, /* rem_permit */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2578 NULL, /* rem_deny */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2579 NULL, /* set_permit_deny */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2580 NULL, /* join_chat */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2581 NULL, /* reject chat invite */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2582 NULL, /* get_chat_name */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2583 NULL, /* chat_invite */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2584 NULL, /* chat_leave */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2585 NULL, /* chat_whisper */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2586 NULL, /* chat_send */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2587 NULL, /* keepalive */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2588 NULL, /* register_user */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2589 NULL, /* get_cb_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2590 NULL, /* get_cb_away */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2591 NULL, /* alias_buddy */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2592 NULL, /* group_buddy */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2593 NULL, /* rename_group */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2594 NULL, /* buddy_free */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2595 NULL, /* convo_closed */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2596 NULL, /* normalize */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2597 NULL, /* set_buddy_icon */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2598 NULL, /* remove_group */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2599 NULL, /* get_cb_real_name */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2600 NULL, /* set_chat_topic */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2601 NULL, /* find_blist_chat */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2602 NULL, /* roomlist_get_list */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2603 NULL, /* roomlist_cancel */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2604 NULL, /* roomlist_expand_category */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2605 NULL, /* can_receive_file */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2606 NULL, /* send_file */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2607 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
2608 msim_offline_message, /* offline_message */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2609 NULL, /* whiteboard_prpl_ops */
17993
d11321258152 Add a send_raw function, msim_send_really_raw, into the prpl_info struct,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17992
diff changeset
2610 msim_send_really_raw, /* send_raw */
17890
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2611 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
2612 NULL, /* _purple_reserved1 */
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2613 NULL, /* _purple_reserved2 */
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2614 NULL, /* _purple_reserved3 */
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2615 NULL /* _purple_reserved4 */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2616 };
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2617
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2618
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2619
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2620 /** 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
2621 PurplePluginInfo info =
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2622 {
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2623 PURPLE_PLUGIN_MAGIC,
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2624 PURPLE_MAJOR_VERSION,
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2625 PURPLE_MINOR_VERSION,
17933
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
2626 PURPLE_PLUGIN_PROTOCOL, /**< type */
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
2627 NULL, /**< ui_requirement */
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
2628 0, /**< flags */
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
2629 NULL, /**< dependencies */
03228b5c78b5 Show online buddies on buddy list as online.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17931
diff changeset
2630 PURPLE_PRIORITY_DEFAULT, /**< priority */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2631
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2632 "prpl-myspace", /**< id */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2633 "MySpaceIM", /**< name */
17980
a455980c81a8 Add script to produce tarballs and zip archives for releases, for v0.8.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17976
diff changeset
2634 "0.8", /**< version */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2635 /** summary */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2636 "MySpaceIM Protocol Plugin",
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2637 /** description */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2638 "MySpaceIM Protocol Plugin",
17988
54b762751673 Update author email address.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17987
diff changeset
2639 "Jeff Connelly <jeff2@homing.pidgin.im>", /**< author */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2640 "http://developer.pidgin.im/wiki/MySpaceIM/", /**< homepage */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2641
17893
308a27332b57 Check for RC4 in libpurple on plugin initialization.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17892
diff changeset
2642 msim_load, /**< load */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2643 NULL, /**< unload */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2644 NULL, /**< destroy */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2645 NULL, /**< ui_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2646 &prpl_info, /**< extra_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2647 NULL, /**< prefs_info */
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2648
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2649 /* msim_actions */
17890
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2650 NULL,
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2651
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2652 NULL, /**< reserved1 */
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2653 NULL, /**< reserved2 */
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2654 NULL, /**< reserved3 */
6926ed504a9a Add initializers for reserved fields in plugin and prpl structures.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16337
diff changeset
2655 NULL /**< reserved4 */
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2656 };
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2657
17981
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2658
17984
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
2659 #ifdef MSIM_SELF_TEST
17981
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2660 /** Test functions.
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2661 * Used to test or try out the internal workings of msimprpl. If you're reading
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2662 * this code for the first time, these functions can be instructive in how
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2663 * msimprpl is architected.
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2664 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2665 void
17995
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2666 msim_test_all(void)
17981
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2667 {
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2668 guint failures;
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2669
17995
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2670
17981
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2671 failures = 0;
17995
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2672 failures += msim_test_xml();
17981
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2673 failures += msim_test_msg();
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2674 failures += msim_test_escaping();
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2675
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2676 if (failures)
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2677 {
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2678 purple_debug_info("msim", "msim_test_all HAD FAILURES: %d\n", failures);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2679 }
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2680 else
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2681 {
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2682 purple_debug_info("msim", "msim_test_all - all tests passed!\n");
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2683 }
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2684 exit(0);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2685 }
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2686
17995
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2687 int
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2688 msim_test_xml(void)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2689 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2690 gchar *msg_text;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2691 xmlnode *root, *n;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2692 guint failures;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2693 char *s;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2694 int len;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2695
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2696 failures = 0;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2697
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2698 msg_text = "<p><f n=\"Arial\" h=\"12\">woo!</f>xxx<c v='black'>yyy</c></p>";
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2699
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2700 purple_debug_info("msim", "msim_test_xml: msg_text=%s\n", msg_text);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2701
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2702 root = xmlnode_from_str(msg_text, -1);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2703 if (!root)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2704 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2705 purple_debug_info("msim", "there is no root\n");
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2706 exit(0);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2707 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2708
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2709 purple_debug_info("msim", "root name=%s, child name=%s\n", root->name,
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2710 root->child->name);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2711
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2712 purple_debug_info("msim", "last child name=%s\n", root->lastchild->name);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2713 purple_debug_info("msim", "Root xml=%s\n",
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2714 xmlnode_to_str(root, &len));
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2715 purple_debug_info("msim", "Child xml=%s\n",
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2716 xmlnode_to_str(root->child, &len));
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2717 purple_debug_info("msim", "Lastchild xml=%s\n",
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2718 xmlnode_to_str(root->lastchild, &len));
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2719 purple_debug_info("msim", "Next xml=%s\n",
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2720 xmlnode_to_str(root->next, &len));
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2721 purple_debug_info("msim", "Next data=%s\n",
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2722 xmlnode_get_data(root->next));
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2723 purple_debug_info("msim", "Child->next xml=%s\n",
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2724 xmlnode_to_str(root->child->next, &len));
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2725
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2726 for (n = root->child; n; n = n->next)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2727 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2728 if (n->name)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2729 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2730 purple_debug_info("msim", " ** n=%s\n",n->name);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2731 } else {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2732 purple_debug_info("msim", " ** n data=%s\n", n->data);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2733 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2734 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2735
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2736 purple_debug_info("msim", "root data=%s, child data=%s, child 'h'=%s\n",
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2737 xmlnode_get_data(root),
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2738 xmlnode_get_data(root->child),
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2739 xmlnode_get_attrib(root->child, "h"));
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2740
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2741
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2742 for (n = root->child;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2743 n != NULL;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2744 n = n->next)
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2745 {
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2746 purple_debug_info("msim", "next name=%s\n", n->name);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2747 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2748
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2749 s = xmlnode_to_str(root, &len);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2750 s[len] = 0;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2751
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2752 purple_debug_info("msim", "str: %s\n", s);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2753 g_free(s);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2754
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2755 xmlnode_free(root);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2756
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2757 exit(0);
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2758
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2759 return failures;
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2760 }
8ca08f4eface Add msim_markup_to_html() to convert MySpaceIM-style markup to Purple-compatible
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
2761
17981
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2762 /** Test MsimMessage for basic functionality. */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2763 int
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2764 msim_test_msg(void)
17981
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2765 {
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2766 MsimMessage *msg, *msg_cloned;
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2767 gchar *packed, *packed_expected, *packed_cloned;
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2768 guint failures;
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2769
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2770 failures = 0;
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2771
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2772 purple_debug_info("msim", "\n\nTesting MsimMessage\n");
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2773 msg = msim_msg_new(FALSE); /* Create a new, empty message. */
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2774
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2775 /* Append some new elements. */
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2776 msg = msim_msg_append(msg, "bx", MSIM_TYPE_BINARY, g_string_new_len(g_strdup("XXX"), 3));
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2777 msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v1"));
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2778 msg = msim_msg_append(msg, "k1", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(42));
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2779 msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v43"));
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2780 msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v52/xxx\\yyy"));
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2781 msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v7"));
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2782 msim_msg_dump("msg debug str=%s\n", msg);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2783 packed = msim_msg_pack(msg);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2784
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2785 purple_debug_info("msim", "msg packed=%s\n", packed);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2786
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2787 packed_expected = "\\bx\\WFhY\\k1\\v1\\k1\\42\\k1"
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2788 "\\v43\\k1\\v52/1xxx/2yyy\\k1\\v7\\final\\";
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2789
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2790 if (0 != strcmp(packed, packed_expected))
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2791 {
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2792 purple_debug_info("msim", "!!!(%d), msim_msg_pack not what expected: %s != %s\n",
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2793 ++failures, packed, packed_expected);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2794 }
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2795
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2796
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2797 msg_cloned = msim_msg_clone(msg);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2798 packed_cloned = msim_msg_pack(msg_cloned);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2799
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2800 purple_debug_info("msim", "msg cloned=%s\n", packed_cloned);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2801 if (0 != strcmp(packed, packed_cloned))
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2802 {
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2803 purple_debug_info("msim", "!!!(%d), msim_msg_pack on cloned message not equal to original: %s != %s\n",
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2804 ++failures, packed_cloned, packed);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2805 }
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2806
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2807 g_free(packed);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2808 g_free(packed_cloned);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2809 msim_msg_free(msg_cloned);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2810 msim_msg_free(msg);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2811
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2812 return failures;
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2813 }
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2814
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2815 /** Test protocol-level escaping/unescaping. */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2816 int
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2817 msim_test_escaping(void)
17981
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2818 {
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2819 guint failures;
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2820 gchar *raw, *escaped, *unescaped, *expected;
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2821
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2822 failures = 0;
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2823
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2824 purple_debug_info("msim", "\n\nTesting escaping\n");
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2825
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2826 raw = "hello/world\\hello/world";
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2827
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2828 escaped = msim_escape(raw);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2829 purple_debug_info("msim", "msim_test_escaping: raw=%s, escaped=%s\n", raw, escaped);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2830 expected = "hello/1world/2hello/1world";
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2831 if (0 != strcmp(escaped, expected))
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2832 {
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2833 purple_debug_info("msim", "!!!(%d), msim_escape failed: %s != %s\n",
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2834 ++failures, escaped, expected);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2835 }
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2836
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2837
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2838 unescaped = msim_unescape(escaped);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2839 g_free(escaped);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2840 purple_debug_info("msim", "msim_test_escaping: unescaped=%s\n", unescaped);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2841 if (0 != strcmp(raw, unescaped))
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2842 {
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2843 purple_debug_info("msim", "!!!(%d), msim_unescape failed: %s != %s\n",
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2844 ++failures, raw, unescaped);
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2845 }
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2846
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2847 return failures;
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2848 }
17984
9a53a8583bba Add msim_unrecognized() to handle unhandled messages.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17983
diff changeset
2849 #endif
17981
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2850
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2851 /** Initialize plugin. */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2852 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17993
diff changeset
2853 init_plugin(PurplePlugin *plugin)
17900
402fdc925e30 Clean up a few TODO's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17898
diff changeset
2854 {
402fdc925e30 Clean up a few TODO's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17898
diff changeset
2855 PurpleAccountOption *option;
17981
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2856 #ifdef MSIM_SELF_TEST
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2857 msim_test_all();
2e330f731690 Add msim_test_all() and related procedures, to perform basic functionality
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17980
diff changeset
2858 #endif /* MSIM_SELF_TEST */
17900
402fdc925e30 Clean up a few TODO's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17898
diff changeset
2859
402fdc925e30 Clean up a few TODO's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17898
diff changeset
2860 /* 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
2861 * 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
2862 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
2863 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
2864
402fdc925e30 Clean up a few TODO's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17898
diff changeset
2865 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
2866 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
17976
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2867
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2868 option = purple_account_option_bool_new(_("Show display name in status text"), "show_display_name", TRUE);
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2869 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2870
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2871 option = purple_account_option_bool_new(_("Show headline in status text"), "show_headline", TRUE);
4fe92c2fa5af Add two boolean options to account dialog, to allow displaying of
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17975
diff changeset
2872 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
17900
402fdc925e30 Clean up a few TODO's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17898
diff changeset
2873 }
16322
0477a4e03cab Import msimprpl 0.4.
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2874
16324
e92b151723f9 Gaim -> Purple
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 16322
diff changeset
2875 PURPLE_INIT_PLUGIN(myspace, init_plugin, info);

mercurial