Sun, 19 Nov 2006 07:00:25 +0000
[gaim-migrate @ 17779]
I'm committing this to get it out of my tree...
As mentioned on gaim-devel, this normalizes some stuff. Mark wants to standardize on "username" instead. For recognition purposes, I'd prefer that, but using "screen name" is potentially useful in that users might not enter their OS username. In any case, it's not a huge deal to me either way. I believe the consensus before was for "screen name", and barring a consensus to change, "screen name" is the status quo anyway, so I'm making things consistent.
| 8675 | 1 | /* |
| 2 | * nmuser.c | |
| 3 | * | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
4 | * Copyright (c) 2004 Novell, Inc. All Rights Reserved. |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
5 | * |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
6 | * This program is free software; you can redistribute it and/or modify |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
7 | * it under the terms of the GNU General Public License as published by |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
8 | * the Free Software Foundation; version 2 of the License. |
| 8675 | 9 | * |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
13 | * GNU General Public License for more details. |
|
8684
7ec649752daa
[gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents:
8675
diff
changeset
|
14 | * |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
16 | * along with this program; if not, write to the Free Software |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 8675 | 18 | * |
| 19 | */ | |
| 20 | ||
| 21 | #include <glib.h> | |
| 22 | #include <string.h> | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
23 | #include "internal.h" |
| 8675 | 24 | #include "nmfield.h" |
| 25 | #include "nmuser.h" | |
| 26 | #include "nmconn.h" | |
| 27 | #include "nmcontact.h" | |
| 28 | #include "nmuserrecord.h" | |
| 29 | #include "util.h" | |
| 30 | ||
|
8684
7ec649752daa
[gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents:
8675
diff
changeset
|
31 | /* This is the template that we wrap outgoing messages in, since the other |
| 8675 | 32 | * GW Messenger clients expect messages to be in RTF. |
| 33 | */ | |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
34 | #define RTF_TEMPLATE "{\\rtf1\\ansi\n"\ |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
35 | "{\\fonttbl{\\f0\\fnil Unknown;}}\n"\ |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
36 | "{\\colortbl ;\\red0\\green0\\blue0;}\n"\ |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
37 | "\\uc1\\cf1\\f0\\fs24 %s\\par\n}" |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
38 | #define NM_MAX_MESSAGE_SIZE 2048 |
| 8675 | 39 | |
| 40 | static NMERR_T nm_process_response(NMUser * user); | |
| 41 | static void _update_contact_list(NMUser * user, NMField * fields); | |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
42 | static void _handle_multiple_get_details_login_cb(NMUser * user, NMERR_T ret_code, |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
43 | gpointer resp_data, gpointer user_data); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
44 | static char * nm_rtfize_text(char *text); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
45 | |
| 8675 | 46 | /** |
| 47 | * See header for comments on on "public" functions | |
| 48 | */ | |
| 49 | ||
| 50 | NMUser * | |
| 51 | nm_initialize_user(const char *name, const char *server_addr, | |
| 52 | int port, gpointer data, nm_event_cb event_callback) | |
| 53 | { | |
| 8782 | 54 | NMUser *user; |
| 8675 | 55 | if (name == NULL || server_addr == NULL || event_callback == NULL) |
| 56 | return NULL; | |
| 57 | ||
| 8782 | 58 | user = g_new0(NMUser, 1); |
| 8675 | 59 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
60 | |
| 8675 | 61 | |
| 62 | user->contacts = | |
| 63 | g_hash_table_new_full(g_str_hash, nm_utf8_str_equal, | |
| 64 | g_free, (GDestroyNotify) nm_release_contact); | |
| 65 | ||
| 66 | user->user_records = | |
| 67 | g_hash_table_new_full(g_str_hash, nm_utf8_str_equal, g_free, | |
| 68 | (GDestroyNotify) nm_release_user_record); | |
| 69 | ||
| 70 | user->display_id_to_dn = g_hash_table_new_full(g_str_hash, nm_utf8_str_equal, | |
| 71 | g_free, g_free); | |
| 72 | ||
| 73 | user->name = g_strdup(name); | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
74 | user->conn = nm_create_conn(server_addr, port); |
| 8675 | 75 | user->conn->addr = g_strdup(server_addr); |
| 76 | user->conn->port = port; | |
| 77 | user->evt_callback = event_callback; | |
| 78 | user->client_data = data; | |
| 79 | ||
| 80 | return user; | |
| 81 | } | |
| 82 | ||
| 83 | ||
| 84 | void | |
| 85 | nm_deinitialize_user(NMUser * user) | |
| 86 | { | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
87 | nm_release_conn(user->conn); |
| 8675 | 88 | |
| 89 | if (user->contacts) { | |
| 90 | g_hash_table_destroy(user->contacts); | |
| 91 | } | |
| 92 | ||
| 93 | if (user->user_records) { | |
| 94 | g_hash_table_destroy(user->user_records); | |
| 95 | } | |
| 96 | ||
| 97 | if (user->display_id_to_dn) { | |
| 98 | g_hash_table_destroy(user->display_id_to_dn); | |
| 99 | } | |
| 100 | ||
| 101 | if (user->name) { | |
| 102 | g_free(user->name); | |
| 103 | } | |
| 104 | ||
| 105 | if (user->user_record) { | |
| 106 | nm_release_user_record(user->user_record); | |
| 107 | } | |
| 108 | ||
| 109 | nm_conference_list_free(user); | |
| 110 | nm_destroy_contact_list(user); | |
| 111 | ||
| 112 | g_free(user); | |
| 113 | } | |
| 114 | ||
| 115 | NMERR_T | |
| 116 | nm_send_login(NMUser * user, const char *pwd, const char *my_addr, | |
| 117 | const char *user_agent, nm_response_cb callback, gpointer data) | |
| 118 | { | |
| 119 | NMERR_T rc = NM_OK; | |
| 120 | NMField *fields = NULL; | |
| 121 | ||
| 122 | if (user == NULL || pwd == NULL || user_agent == NULL) { | |
| 123 | return NMERR_BAD_PARM; | |
| 124 | } | |
| 125 | ||
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
126 | fields = nm_field_add_pointer(fields, NM_A_SZ_USERID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
127 | g_strdup(user->name), NMFIELD_TYPE_UTF8); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
128 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
129 | fields = nm_field_add_pointer(fields, NM_A_SZ_CREDENTIALS, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
130 | g_strdup(pwd), NMFIELD_TYPE_UTF8); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
131 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
132 | fields = nm_field_add_pointer(fields, NM_A_SZ_USER_AGENT, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
133 | g_strdup(user_agent), NMFIELD_TYPE_UTF8); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
134 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
135 | fields = nm_field_add_number(fields, NM_A_UD_BUILD, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
136 | NM_PROTOCOL_VERSION, NMFIELD_TYPE_UDWORD); |
| 8675 | 137 | if (my_addr) { |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
138 | fields = nm_field_add_pointer(fields, NM_A_IP_ADDRESS, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
139 | g_strdup(my_addr), NMFIELD_TYPE_UTF8); |
| 8675 | 140 | } |
| 141 | ||
| 142 | /* Send the login */ | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
143 | rc = nm_send_request(user->conn, "login", fields, callback, data, NULL); |
| 8675 | 144 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
145 | nm_free_fields(&fields); |
| 8675 | 146 | return rc; |
| 147 | } | |
| 148 | ||
| 149 | NMERR_T | |
| 150 | nm_send_set_status(NMUser * user, int status, const char *text, | |
| 151 | const char *auto_resp, nm_response_cb callback, gpointer data) | |
| 152 | { | |
| 153 | NMERR_T rc = NM_OK; | |
| 154 | NMField *fields = NULL; | |
| 155 | ||
| 156 | if (user == NULL) | |
| 157 | return NMERR_BAD_PARM; | |
| 158 | ||
| 159 | /* Add the status */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
160 | fields = nm_field_add_pointer(fields, NM_A_SZ_STATUS, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
161 | g_strdup_printf("%d", status), NMFIELD_TYPE_UTF8); |
| 8675 | 162 | |
| 163 | /* Add the status text and auto reply text if there is any */ | |
| 164 | if (text) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
165 | fields = nm_field_add_pointer(fields, NM_A_SZ_STATUS_TEXT, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
166 | NMFIELD_METHOD_VALID, 0, g_strdup(text), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
167 | NMFIELD_TYPE_UTF8); |
| 8675 | 168 | } |
| 169 | ||
| 170 | if (auto_resp) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
171 | fields = nm_field_add_pointer(fields, NM_A_SZ_MESSAGE_BODY, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
172 | NMFIELD_METHOD_VALID, 0, g_strdup(auto_resp), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
173 | NMFIELD_TYPE_UTF8); |
| 8675 | 174 | } |
| 175 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
176 | rc = nm_send_request(user->conn, "setstatus", fields, callback, data, NULL); |
| 8675 | 177 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
178 | nm_free_fields(&fields); |
| 8675 | 179 | return rc; |
| 180 | } | |
| 181 | ||
| 182 | NMERR_T | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
183 | nm_send_multiple_get_details(NMUser * user, GSList *names, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
184 | nm_response_cb callback, gpointer data) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
185 | { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
186 | NMERR_T rc = NM_OK; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
187 | NMField *fields = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
188 | GSList *node; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
189 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
190 | if (user == NULL || names == NULL) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
191 | return NMERR_BAD_PARM; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
192 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
193 | /* Add in DN or display id */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
194 | for (node = names; node; node = node->next) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
195 | fields = nm_field_add_pointer(fields, NM_A_SZ_USERID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
196 | g_strdup(node->data), NMFIELD_TYPE_UTF8); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
197 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
198 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
199 | rc = nm_send_request(user->conn, "getdetails", fields, callback, data, NULL); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
200 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
201 | nm_free_fields(&fields); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
202 | return rc; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
203 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
204 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
205 | NMERR_T |
| 8675 | 206 | nm_send_get_details(NMUser * user, const char *name, |
| 207 | nm_response_cb callback, gpointer data) | |
| 208 | { | |
| 209 | NMERR_T rc = NM_OK; | |
| 210 | NMField *fields = NULL; | |
| 211 | ||
| 212 | if (user == NULL || name == NULL) | |
| 213 | return NMERR_BAD_PARM; | |
| 214 | ||
| 215 | /* Add in DN or display id */ | |
| 216 | if (strstr("=", name)) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
217 | fields = nm_field_add_pointer(fields, NM_A_SZ_DN, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
218 | g_strdup(name), NMFIELD_TYPE_DN); |
| 8675 | 219 | } else { |
| 220 | ||
| 221 | const char *dn = nm_lookup_dn(user, name); | |
| 222 | if (dn) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
223 | fields = nm_field_add_pointer(fields, NM_A_SZ_DN, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
224 | g_strdup(name), NMFIELD_TYPE_DN); |
| 8675 | 225 | } else { |
| 226 | fields = | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
227 | nm_field_add_pointer(fields, NM_A_SZ_USERID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
228 | g_strdup(name), NMFIELD_TYPE_UTF8); |
| 8675 | 229 | } |
| 230 | ||
| 231 | } | |
| 232 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
233 | rc = nm_send_request(user->conn, "getdetails", fields, callback, data, NULL); |
| 8675 | 234 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
235 | nm_free_fields(&fields); |
| 8675 | 236 | return rc; |
| 237 | } | |
| 238 | ||
| 239 | NMERR_T | |
| 240 | nm_send_create_conference(NMUser * user, NMConference * conference, | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
241 | nm_response_cb callback, gpointer data) |
| 8675 | 242 | { |
| 243 | NMERR_T rc = NM_OK; | |
| 244 | NMField *fields = NULL; | |
| 245 | NMField *tmp = NULL; | |
| 246 | NMField *field = NULL; | |
| 247 | NMRequest *req = NULL; | |
| 248 | int count, i; | |
| 249 | ||
| 250 | if (user == NULL || conference == NULL) | |
| 251 | return NMERR_BAD_PARM; | |
| 252 | ||
| 253 | /* Add in a blank guid */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
254 | tmp = nm_field_add_pointer(tmp, NM_A_SZ_OBJECT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
255 | g_strdup(BLANK_GUID), NMFIELD_TYPE_UTF8); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
256 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
257 | fields = nm_field_add_pointer(fields, NM_A_FA_CONVERSATION, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
258 | NMFIELD_METHOD_VALID, 0, tmp, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
259 | NMFIELD_TYPE_ARRAY); |
| 8675 | 260 | tmp = NULL; |
| 261 | ||
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
262 | |
| 8675 | 263 | /* Add participants in */ |
| 264 | count = nm_conference_get_participant_count(conference); | |
| 265 | for (i = 0; i < count; i++) { | |
| 266 | NMUserRecord *user_record = nm_conference_get_participant(conference, i); | |
| 267 | ||
| 268 | if (user_record) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
269 | fields = nm_field_add_pointer(fields, NM_A_SZ_DN, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
270 | 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
271 | g_strdup(nm_user_record_get_dn(user_record)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
272 | NMFIELD_TYPE_DN); |
| 8675 | 273 | } |
| 274 | } | |
| 275 | ||
| 276 | /* Add our user in */ | |
| 277 | field = nm_locate_field(NM_A_SZ_DN, user->fields); | |
| 278 | if (field) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
279 | fields = nm_field_add_pointer(fields, NM_A_SZ_DN, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
280 | 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
281 | g_strdup((char *) field->ptr_value), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
282 | NMFIELD_TYPE_DN); |
| 8675 | 283 | } |
| 284 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
285 | rc = nm_send_request(user->conn, "createconf", fields, callback, data, &req); |
| 8675 | 286 | if (rc == NM_OK && req) { |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
287 | nm_conference_add_ref(conference); |
| 8675 | 288 | nm_request_set_data(req, conference); |
| 289 | } | |
| 290 | ||
| 291 | if (req) | |
| 292 | nm_release_request(req); | |
| 293 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
294 | nm_free_fields(&fields); |
| 8675 | 295 | return rc; |
| 296 | } | |
| 297 | ||
| 298 | NMERR_T | |
| 299 | nm_send_leave_conference(NMUser * user, NMConference * conference, | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
300 | nm_response_cb callback, gpointer data) |
| 8675 | 301 | { |
| 302 | NMERR_T rc = NM_OK; | |
| 303 | NMField *fields = NULL; | |
| 304 | NMField *tmp = NULL; | |
| 305 | NMRequest *req = NULL; | |
| 306 | ||
| 307 | if (user == NULL || conference == NULL) | |
| 308 | return NMERR_BAD_PARM; | |
| 309 | ||
| 310 | /* Add in the conference guid */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
311 | tmp = nm_field_add_pointer(tmp, NM_A_SZ_OBJECT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
312 | g_strdup(nm_conference_get_guid(conference)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
313 | NMFIELD_TYPE_UTF8); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
314 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
315 | fields = nm_field_add_pointer(fields, NM_A_FA_CONVERSATION, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
316 | NMFIELD_METHOD_VALID, 0, tmp, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
317 | NMFIELD_TYPE_ARRAY); |
| 8675 | 318 | tmp = NULL; |
|
8684
7ec649752daa
[gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents:
8675
diff
changeset
|
319 | |
| 8675 | 320 | /* Send the request to the server */ |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
321 | rc = nm_send_request(user->conn, "leaveconf", fields, callback, data, &req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
322 | if (rc == NM_OK && req) |
| 8675 | 323 | nm_request_set_data(req, conference); |
| 324 | ||
| 325 | if (req) | |
| 326 | nm_release_request(req); | |
| 327 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
328 | nm_free_fields(&fields); |
| 8675 | 329 | return rc; |
| 330 | } | |
| 331 | ||
| 332 | NMERR_T | |
| 333 | nm_send_join_conference(NMUser * user, NMConference * conference, | |
| 334 | nm_response_cb callback, gpointer data) | |
| 335 | { | |
| 336 | NMERR_T rc = NM_OK; | |
| 337 | NMField *fields = NULL, *tmp = NULL; | |
| 338 | NMRequest *req = NULL; | |
| 339 | ||
| 340 | if (user == NULL || conference == NULL) | |
| 341 | return NMERR_BAD_PARM; | |
| 342 | ||
| 343 | /* Add in the conference guid */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
344 | tmp = nm_field_add_pointer(tmp, NM_A_SZ_OBJECT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
345 | g_strdup(nm_conference_get_guid(conference)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
346 | NMFIELD_TYPE_UTF8); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
347 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
348 | fields = nm_field_add_pointer(fields, NM_A_FA_CONVERSATION, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
349 | NMFIELD_METHOD_VALID, 0, tmp, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
350 | NMFIELD_TYPE_ARRAY); |
| 8675 | 351 | tmp = NULL; |
| 352 | ||
| 353 | /* Send the request to the server */ | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
354 | rc = nm_send_request(user->conn, "joinconf", fields, callback, data, &req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
355 | if (rc == NM_OK && req) |
| 8675 | 356 | nm_request_set_data(req, conference); |
| 357 | ||
| 358 | if (req) | |
| 359 | nm_release_request(req); | |
| 360 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
361 | nm_free_fields(&fields); |
| 8675 | 362 | return rc; |
| 363 | } | |
| 364 | ||
| 365 | NMERR_T | |
| 366 | nm_send_reject_conference(NMUser * user, NMConference * conference, | |
| 367 | nm_response_cb callback, gpointer data) | |
| 368 | { | |
| 369 | NMERR_T rc = NM_OK; | |
| 370 | NMField *fields = NULL; | |
| 371 | NMField *tmp = NULL; | |
| 372 | NMRequest *req = NULL; | |
| 373 | ||
| 374 | if (user == NULL || conference == NULL) | |
| 375 | return NMERR_BAD_PARM; | |
| 376 | ||
| 377 | /* Add in the conference guid */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
378 | tmp = nm_field_add_pointer(tmp, NM_A_SZ_OBJECT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
379 | g_strdup(nm_conference_get_guid(conference)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
380 | NMFIELD_TYPE_UTF8); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
381 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
382 | fields = nm_field_add_pointer(fields, NM_A_FA_CONVERSATION, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
383 | NMFIELD_METHOD_VALID, 0, tmp, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
384 | NMFIELD_TYPE_ARRAY); |
| 8675 | 385 | tmp = NULL; |
| 386 | ||
| 387 | /* Send the request to the server */ | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
388 | rc = nm_send_request(user->conn, "rejectconf", fields, callback, data, &req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
389 | if (rc == NM_OK && req) |
| 8675 | 390 | nm_request_set_data(req, conference); |
| 391 | ||
| 392 | if (req) | |
| 393 | nm_release_request(req); | |
| 394 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
395 | nm_free_fields(&fields); |
| 8675 | 396 | return rc; |
| 397 | } | |
| 398 | ||
| 399 | NMERR_T | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
400 | nm_send_conference_invite(NMUser *user, NMConference *conference, NMUserRecord *user_record, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
401 | const char *message, nm_response_cb callback, gpointer data) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
402 | { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
403 | NMERR_T rc = NM_OK; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
404 | NMField *fields = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
405 | NMField *tmp = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
406 | NMRequest *req = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
407 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
408 | if (user == NULL || conference == NULL || user_record == NULL) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
409 | return NMERR_BAD_PARM; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
410 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
411 | /* Add in the conference guid */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
412 | tmp = nm_field_add_pointer(tmp, NM_A_SZ_OBJECT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
413 | g_strdup(nm_conference_get_guid(conference)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
414 | NMFIELD_TYPE_UTF8); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
415 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
416 | fields = nm_field_add_pointer(fields, NM_A_FA_CONVERSATION, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
417 | NMFIELD_METHOD_VALID, 0, tmp, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
418 | NMFIELD_TYPE_ARRAY); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
419 | tmp = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
420 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
421 | /* Add in DN of user to invite */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
422 | fields = nm_field_add_pointer(fields, NM_A_SZ_DN, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
423 | g_strdup(nm_user_record_get_dn(user_record)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
424 | NMFIELD_TYPE_DN); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
425 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
426 | /* Add the invite message if there is one */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
427 | if (message) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
428 | fields = nm_field_add_pointer(fields, NM_A_SZ_MESSAGE_BODY, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
429 | g_strdup(message), NMFIELD_TYPE_UTF8); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
430 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
431 | /* Send the request to the server */ |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
432 | rc = nm_send_request(user->conn, "sendinvite", fields, callback, data, &req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
433 | if (rc == NM_OK && req) |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
434 | nm_request_set_data(req, conference); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
435 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
436 | if (req) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
437 | nm_release_request(req); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
438 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
439 | nm_free_fields(&fields); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
440 | return rc; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
441 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
442 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
443 | NMERR_T |
| 8675 | 444 | nm_send_message(NMUser * user, NMMessage * message, nm_response_cb callback) |
| 445 | { | |
| 446 | NMERR_T rc = NM_OK; | |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
447 | char *text, *rtfized; |
| 8675 | 448 | NMField *fields = NULL, *tmp = NULL; |
| 449 | NMConference *conf; | |
| 450 | NMUserRecord *user_record; | |
| 451 | int count, i; | |
| 452 | ||
| 453 | if (user == NULL || message == NULL) { | |
| 454 | return NMERR_BAD_PARM; | |
| 455 | } | |
| 456 | ||
| 457 | conf = nm_message_get_conference(message); | |
| 458 | if (!nm_conference_is_instantiated(conf)) { | |
| 459 | rc = NMERR_CONFERENCE_NOT_INSTANTIATED; | |
| 460 | } else { | |
| 461 | ||
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
462 | tmp = nm_field_add_pointer(tmp, NM_A_SZ_OBJECT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
463 | g_strdup(nm_conference_get_guid(conf)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
464 | NMFIELD_TYPE_UTF8); |
| 8675 | 465 | |
| 466 | fields = | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
467 | nm_field_add_pointer(fields, NM_A_FA_CONVERSATION, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
468 | tmp, NMFIELD_TYPE_ARRAY); |
| 8675 | 469 | tmp = NULL; |
| 470 | ||
| 471 | /* Add RTF and plain text versions of the message */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
472 | text = g_strdup(nm_message_get_text(message)); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
473 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
474 | /* Truncate if necessary */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
475 | if (strlen(text) > NM_MAX_MESSAGE_SIZE) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
476 | text[NM_MAX_MESSAGE_SIZE] = 0; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
477 | |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
478 | rtfized = nm_rtfize_text(text); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
479 | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
480 | gaim_debug_info("novell", "message text is: %s\n", text); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
481 | gaim_debug_info("novell", "message rtf is: %s\n", rtfized); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
482 | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
483 | tmp = nm_field_add_pointer(tmp, NM_A_SZ_MESSAGE_BODY, 0, NMFIELD_METHOD_VALID, 0, |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
484 | rtfized, NMFIELD_TYPE_UTF8); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
485 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
486 | tmp = nm_field_add_number(tmp, NM_A_UD_MESSAGE_TYPE, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
487 | 0, NMFIELD_TYPE_UDWORD); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
488 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
489 | tmp = nm_field_add_pointer(tmp, NM_A_SZ_MESSAGE_TEXT, 0, NMFIELD_METHOD_VALID, 0, |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
490 | text, NMFIELD_TYPE_UTF8); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
491 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
492 | fields = nm_field_add_pointer(fields, NM_A_FA_MESSAGE, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
493 | tmp, NMFIELD_TYPE_ARRAY); |
| 8675 | 494 | tmp = NULL; |
| 495 | ||
| 496 | /* Add participants */ | |
| 497 | count = nm_conference_get_participant_count(conf); | |
| 498 | for (i = 0; i < count; i++) { | |
| 499 | user_record = nm_conference_get_participant(conf, i); | |
| 500 | if (user_record) { | |
| 501 | fields = | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
502 | nm_field_add_pointer(fields, NM_A_SZ_DN, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
503 | g_strdup(nm_user_record_get_dn(user_record)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
504 | NMFIELD_TYPE_DN); |
| 8675 | 505 | } |
| 506 | } | |
| 507 | ||
| 508 | /* Send the request */ | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
509 | rc = nm_send_request(user->conn, "sendmessage", fields, callback, NULL, NULL); |
| 8675 | 510 | } |
| 511 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
512 | nm_free_fields(&fields); |
| 8675 | 513 | return rc; |
| 514 | } | |
| 515 | ||
| 516 | NMERR_T | |
| 517 | nm_send_typing(NMUser * user, NMConference * conf, | |
| 518 | gboolean typing, nm_response_cb callback) | |
| 519 | { | |
| 520 | NMERR_T rc = NM_OK; | |
| 521 | char *str = NULL; | |
| 522 | NMField *fields = NULL, *tmp = NULL; | |
| 523 | ||
| 524 | if (user == NULL || conf == NULL) { | |
| 525 | return NMERR_BAD_PARM; | |
| 526 | } | |
| 527 | ||
| 528 | if (!nm_conference_is_instantiated(conf)) { | |
| 529 | rc = NMERR_CONFERENCE_NOT_INSTANTIATED; | |
| 530 | } else { | |
| 531 | /* Add the conference GUID */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
532 | tmp = nm_field_add_pointer(tmp, NM_A_SZ_OBJECT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
533 | g_strdup(nm_conference_get_guid(conf)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
534 | NMFIELD_TYPE_UTF8); |
| 8675 | 535 | |
| 536 | /* Add typing type */ | |
| 537 | str = g_strdup_printf("%d", | |
| 538 | (typing ? NMEVT_USER_TYPING : | |
| 539 | NMEVT_USER_NOT_TYPING)); | |
| 540 | ||
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
541 | tmp = nm_field_add_pointer(tmp, NM_A_SZ_TYPE, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
542 | str, NMFIELD_TYPE_UTF8); |
| 8675 | 543 | |
| 544 | fields = | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
545 | nm_field_add_pointer(fields, NM_A_FA_CONVERSATION, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
546 | tmp, NMFIELD_TYPE_ARRAY); |
| 8675 | 547 | tmp = NULL; |
| 548 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
549 | rc = nm_send_request(user->conn, "sendtyping", fields, callback, NULL, NULL); |
| 8675 | 550 | } |
| 551 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
552 | nm_free_fields(&fields); |
| 8675 | 553 | return rc; |
| 554 | } | |
| 555 | ||
| 556 | NMERR_T | |
| 557 | nm_send_create_contact(NMUser * user, NMFolder * folder, | |
| 558 | NMContact * contact, nm_response_cb callback, | |
| 559 | gpointer data) | |
| 560 | { | |
| 561 | NMERR_T rc = NM_OK; | |
| 562 | NMField *fields = NULL; | |
| 563 | NMRequest *req = NULL; | |
| 564 | const char *name = NULL; | |
| 565 | const char *display_name = NULL; | |
| 566 | ||
| 567 | if (user == NULL || folder == NULL || contact == NULL) { | |
| 568 | return NMERR_BAD_PARM; | |
| 569 | } | |
| 570 | ||
| 571 | /* Add parent ID */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
572 | fields = nm_field_add_pointer(fields, NM_A_SZ_PARENT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
573 | g_strdup_printf("%d", nm_folder_get_id(folder)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
574 | NMFIELD_TYPE_UTF8); |
| 8675 | 575 | |
| 576 | /* Check to see if userid is current user and return an error? */ | |
| 577 | ||
| 578 | /* Check to see if contact already exists and return an error? */ | |
| 579 | ||
| 580 | /* Add userid or dn */ | |
| 581 | name = nm_contact_get_dn(contact); | |
| 582 | if (name == NULL) | |
| 583 | return NMERR_BAD_PARM; | |
| 584 | ||
| 585 | if (strstr("=", name)) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
586 | fields = nm_field_add_pointer(fields, NM_A_SZ_DN, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
587 | g_strdup(name), NMFIELD_TYPE_DN); |
| 8675 | 588 | } else { |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
589 | fields = nm_field_add_pointer(fields, NM_A_SZ_USERID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
590 | g_strdup(name), NMFIELD_TYPE_UTF8); |
| 8675 | 591 | } |
| 592 | ||
| 593 | /* Add display name */ | |
| 594 | display_name = nm_contact_get_display_name(contact); | |
| 595 | if (display_name) | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
596 | fields = nm_field_add_pointer(fields, NM_A_SZ_DISPLAY_NAME, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
597 | g_strdup(display_name), NMFIELD_TYPE_UTF8); |
|
8684
7ec649752daa
[gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents:
8675
diff
changeset
|
598 | |
| 8675 | 599 | /* Dispatch the request */ |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
600 | rc = nm_send_request(user->conn, "createcontact", fields, callback, data, &req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
601 | if (rc == NM_OK && req) |
| 8675 | 602 | nm_request_set_data(req, contact); |
| 603 | ||
| 604 | if (req) | |
| 605 | nm_release_request(req); | |
| 606 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
607 | nm_free_fields(&fields); |
| 8675 | 608 | return rc; |
| 609 | } | |
| 610 | ||
| 611 | NMERR_T | |
| 612 | nm_send_remove_contact(NMUser * user, NMFolder * folder, | |
| 613 | NMContact * contact, nm_response_cb callback, | |
| 614 | gpointer data) | |
| 615 | { | |
| 616 | NMERR_T rc = NM_OK; | |
| 617 | NMField *fields = NULL; | |
| 618 | NMRequest *req = NULL; | |
| 619 | ||
| 620 | if (user == NULL || folder == NULL || contact == NULL) { | |
| 621 | return NMERR_BAD_PARM; | |
| 622 | } | |
| 623 | ||
| 624 | /* Add parent id */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
625 | fields = nm_field_add_pointer(fields, NM_A_SZ_PARENT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
626 | g_strdup_printf("%d", nm_folder_get_id(folder)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
627 | NMFIELD_TYPE_UTF8); |
| 8675 | 628 | |
| 629 | /* Add object id */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
630 | fields = nm_field_add_pointer(fields, NM_A_SZ_OBJECT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
631 | g_strdup_printf("%d", nm_contact_get_id(contact)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
632 | NMFIELD_TYPE_UTF8); |
| 8675 | 633 | |
| 634 | /* Dispatch the request */ | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
635 | rc = nm_send_request(user->conn, "deletecontact", fields, callback, data, &req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
636 | if (rc == NM_OK && req) |
| 8675 | 637 | nm_request_set_data(req, contact); |
| 638 | ||
| 639 | if (req) | |
| 640 | nm_release_request(req); | |
| 641 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
642 | nm_free_fields(&fields); |
| 8675 | 643 | return rc; |
| 644 | } | |
| 645 | ||
| 646 | NMERR_T | |
| 647 | nm_send_create_folder(NMUser * user, const char *name, | |
| 648 | nm_response_cb callback, gpointer data) | |
| 649 | { | |
| 650 | NMERR_T rc = NM_OK; | |
| 651 | NMField *fields = NULL; | |
| 652 | NMRequest *req = NULL; | |
| 653 | ||
| 654 | if (user == NULL || name == NULL) { | |
| 655 | return NMERR_BAD_PARM; | |
| 656 | } | |
| 657 | ||
| 658 | /* Add parent ID */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
659 | fields = nm_field_add_pointer(fields, NM_A_SZ_PARENT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
660 | g_strdup("0"), NMFIELD_TYPE_UTF8); |
| 8675 | 661 | |
| 662 | /* Add name of the folder to add */ | |
| 663 | fields = | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
664 | nm_field_add_pointer(fields, NM_A_SZ_DISPLAY_NAME, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
665 | g_strdup(name), NMFIELD_TYPE_UTF8); |
| 8675 | 666 | |
| 667 | /* Add sequence, for now just put it at the bottom */ | |
| 668 | fields = | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
669 | nm_field_add_pointer(fields, NM_A_SZ_SEQUENCE_NUMBER, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
670 | g_strdup("-1"), NMFIELD_TYPE_UTF8); |
| 8675 | 671 | |
| 672 | /* Dispatch the request */ | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
673 | rc = nm_send_request(user->conn, "createfolder", fields, callback, data, &req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
674 | if (rc == NM_OK && req) |
| 8675 | 675 | nm_request_set_data(req, g_strdup(name)); |
| 676 | ||
| 677 | if (req) | |
| 678 | nm_release_request(req); | |
| 679 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
680 | nm_free_fields(&fields); |
| 8675 | 681 | return rc; |
| 682 | } | |
| 683 | ||
| 684 | NMERR_T | |
| 685 | nm_send_remove_folder(NMUser * user, NMFolder * folder, | |
| 686 | nm_response_cb callback, gpointer data) | |
| 687 | { | |
| 688 | NMERR_T rc = NM_OK; | |
| 689 | NMField *fields = NULL; | |
| 690 | NMRequest *req = NULL; | |
| 691 | ||
| 692 | if (user == NULL || folder == NULL) { | |
| 693 | return NMERR_BAD_PARM; | |
| 694 | } | |
| 695 | ||
| 696 | /* Add the object id */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
697 | fields = nm_field_add_pointer(fields, NM_A_SZ_OBJECT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
698 | g_strdup_printf("%d", nm_folder_get_id(folder)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
699 | NMFIELD_TYPE_UTF8); |
| 8675 | 700 | |
| 701 | /* Dispatch the request */ | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
702 | rc = nm_send_request(user->conn, "deletecontact", fields, callback, data, &req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
703 | if (rc == NM_OK && req) |
| 8675 | 704 | nm_request_set_data(req, folder); |
| 705 | ||
| 706 | if (req) | |
| 707 | nm_release_request(req); | |
| 708 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
709 | nm_free_fields(&fields); |
| 8675 | 710 | return rc; |
| 711 | } | |
| 712 | ||
| 713 | NMERR_T | |
| 714 | nm_send_get_status(NMUser * user, NMUserRecord * user_record, | |
| 715 | nm_response_cb callback, gpointer data) | |
| 716 | { | |
| 717 | NMERR_T rc = NM_OK; | |
| 718 | NMField *fields = NULL; | |
| 719 | NMRequest *req = NULL; | |
| 720 | const char *dn; | |
| 721 | ||
| 722 | if (user == NULL || user_record == NULL) | |
| 723 | return NMERR_BAD_PARM; | |
| 724 | ||
| 725 | /* Add DN to field list */ | |
| 726 | dn = nm_user_record_get_dn(user_record); | |
| 727 | if (dn == NULL) | |
| 728 | return (NMERR_T) -1; | |
| 729 | ||
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
730 | fields = nm_field_add_pointer(fields, NM_A_SZ_DN, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
731 | g_strdup(dn), NMFIELD_TYPE_UTF8); |
| 8675 | 732 | |
| 733 | /* Dispatch the request */ | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
734 | rc = nm_send_request(user->conn, "getstatus", fields, callback, data, &req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
735 | if (rc == NM_OK && req) |
| 8675 | 736 | nm_request_set_data(req, user_record); |
| 737 | ||
| 738 | if (req) | |
| 739 | nm_release_request(req); | |
| 740 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
741 | nm_free_fields(&fields); |
| 8675 | 742 | return rc; |
| 743 | } | |
| 744 | ||
| 745 | NMERR_T | |
| 746 | nm_send_rename_contact(NMUser * user, NMContact * contact, | |
| 747 | const char *new_name, nm_response_cb callback, | |
| 748 | gpointer data) | |
| 749 | { | |
| 750 | NMERR_T rc = NM_OK; | |
| 751 | NMField *field = NULL, *fields = NULL, *list = NULL; | |
| 752 | NMRequest *req = NULL; | |
| 753 | ||
| 754 | if (user == NULL || contact == NULL || new_name == NULL) | |
| 755 | return NMERR_BAD_PARM; | |
| 756 | ||
| 757 | /* Create field list for current contact */ | |
| 758 | field = nm_contact_to_fields(contact); | |
| 759 | if (field) { | |
| 760 | ||
| 761 | fields = | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
762 | nm_field_add_pointer(fields, NM_A_FA_CONTACT, 0, NMFIELD_METHOD_DELETE, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
763 | field, NMFIELD_TYPE_ARRAY); |
| 8675 | 764 | field = NULL; |
| 765 | ||
| 766 | /* Update the contacts display name locally */ | |
| 767 | nm_contact_set_display_name(contact, new_name); | |
| 768 | ||
| 769 | /* Create field list for updated contact */ | |
| 770 | field = nm_contact_to_fields(contact); | |
| 771 | if (field) { | |
| 772 | fields = | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
773 | nm_field_add_pointer(fields, NM_A_FA_CONTACT, 0, NMFIELD_METHOD_ADD, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
774 | field, NMFIELD_TYPE_ARRAY); |
| 8675 | 775 | field = NULL; |
| 776 | ||
| 777 | /* Package it up */ | |
| 778 | list = | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
779 | nm_field_add_pointer(list, NM_A_FA_CONTACT_LIST, 0, NMFIELD_METHOD_VALID, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
780 | 0, fields, NMFIELD_TYPE_ARRAY); |
| 8675 | 781 | fields = NULL; |
| 782 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
783 | rc = nm_send_request(user->conn, "updateitem", list, callback, data, &req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
784 | if (rc == NM_OK && req) |
| 8675 | 785 | nm_request_set_data(req, contact); |
| 786 | } | |
| 787 | } | |
| 788 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
789 | if (req) |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
790 | nm_release_request(req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
791 | |
| 8675 | 792 | if (list) |
| 793 | nm_free_fields(&list); | |
| 794 | ||
| 795 | return rc; | |
| 796 | } | |
| 797 | ||
| 798 | NMERR_T | |
| 799 | nm_send_rename_folder(NMUser * user, NMFolder * folder, const char *new_name, | |
| 800 | nm_response_cb callback, gpointer data) | |
| 801 | { | |
| 802 | NMERR_T rc = NM_OK; | |
| 803 | NMField *field = NULL, *fields = NULL, *list = NULL; | |
| 804 | NMRequest *req = NULL; | |
| 805 | ||
| 806 | if (user == NULL || folder == NULL || new_name == NULL) | |
| 807 | return NMERR_BAD_PARM; | |
| 808 | ||
| 809 | /* Make sure folder does not already exist!? */ | |
| 810 | if (nm_find_folder(user, new_name)) | |
| 811 | return NMERR_FOLDER_EXISTS; | |
| 812 | ||
| 813 | /* Create field list for current folder */ | |
| 814 | field = nm_folder_to_fields(folder); | |
| 815 | if (field) { | |
| 816 | ||
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
817 | fields = nm_field_add_pointer(fields, NM_A_FA_FOLDER, 0, NMFIELD_METHOD_DELETE, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
818 | field, NMFIELD_TYPE_ARRAY); |
| 8675 | 819 | field = NULL; |
| 820 | ||
| 821 | /* Update the folders display name locally */ | |
| 822 | nm_folder_set_name(folder, new_name); | |
| 823 | ||
| 824 | /* Create field list for updated folder */ | |
| 825 | field = nm_folder_to_fields(folder); | |
| 826 | if (field) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
827 | fields = nm_field_add_pointer(fields, NM_A_FA_FOLDER, 0, NMFIELD_METHOD_ADD, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
828 | field, NMFIELD_TYPE_ARRAY); |
| 8675 | 829 | field = NULL; |
| 830 | ||
| 831 | /* Package it up */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
832 | list = nm_field_add_pointer(list, NM_A_FA_CONTACT_LIST, 0, NMFIELD_METHOD_VALID, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
833 | 0, fields, NMFIELD_TYPE_ARRAY); |
| 8675 | 834 | fields = NULL; |
| 835 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
836 | rc = nm_send_request(user->conn, "updateitem", list, callback, data, &req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
837 | if (rc == NM_OK && req) |
| 8675 | 838 | nm_request_set_data(req, folder); |
| 839 | } | |
| 840 | } | |
| 841 | ||
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
842 | if (req) |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
843 | nm_release_request(req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
844 | |
| 8675 | 845 | if (list) |
| 846 | nm_free_fields(&list); | |
| 847 | ||
| 848 | return rc; | |
| 849 | } | |
| 850 | ||
| 851 | NMERR_T | |
| 852 | nm_send_move_contact(NMUser * user, NMContact * contact, NMFolder * folder, | |
| 853 | nm_response_cb callback, gpointer data) | |
| 854 | { | |
| 855 | NMERR_T rc = NM_OK; | |
| 856 | NMField *field = NULL, *fields = NULL, *list = NULL; | |
| 857 | NMRequest *req = NULL; | |
| 858 | ||
| 859 | if (user == NULL || contact == NULL || folder == NULL) | |
| 860 | return NMERR_BAD_PARM; | |
| 861 | ||
| 862 | /* Create field list for the contact */ | |
| 863 | field = nm_contact_to_fields(contact); | |
| 864 | if (field) { | |
| 865 | ||
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
866 | fields = nm_field_add_pointer(fields, NM_A_FA_CONTACT, 0, NMFIELD_METHOD_DELETE, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
867 | field, NMFIELD_TYPE_ARRAY); |
| 8675 | 868 | field = NULL; |
| 869 | ||
| 870 | /* Wrap the contact up and add it to the request field list */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
871 | list = nm_field_add_pointer(list, NM_A_FA_CONTACT_LIST, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
872 | fields, NMFIELD_TYPE_ARRAY); |
| 8675 | 873 | fields = NULL; |
| 874 | ||
| 875 | /* Add sequence number */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
876 | list = nm_field_add_pointer(list, NM_A_SZ_SEQUENCE_NUMBER, 0, NMFIELD_METHOD_VALID, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
877 | 0, g_strdup("-1"), NMFIELD_TYPE_UTF8); |
| 8675 | 878 | |
| 879 | /* Add parent ID */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
880 | list = nm_field_add_pointer(list, NM_A_SZ_PARENT_ID, 0, NMFIELD_METHOD_VALID, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
881 | g_strdup_printf("%d", nm_folder_get_id(folder)), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
882 | NMFIELD_TYPE_UTF8); |
| 8675 | 883 | |
| 884 | /* Dispatch the request */ | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
885 | rc = nm_send_request(user->conn, "movecontact", list, callback, data, &req); |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
886 | if (rc == NM_OK && req) |
| 8675 | 887 | nm_request_set_data(req, contact); |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
888 | |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
889 | } |
| 8675 | 890 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
891 | if (req) |
|
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
892 | nm_release_request(req); |
| 8675 | 893 | |
| 894 | if (list) | |
| 895 | nm_free_fields(&list); | |
| 896 | ||
| 897 | return rc; | |
| 898 | } | |
| 899 | ||
| 900 | ||
| 901 | NMERR_T | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
902 | nm_send_create_privacy_item(NMUser *user, const char *who, gboolean allow_list, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
903 | nm_response_cb callback, gpointer data) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
904 | { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
905 | NMERR_T rc = NM_OK; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
906 | NMField *fields = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
907 | const char *tag; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
908 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
909 | if (user == NULL || who == NULL) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
910 | return NMERR_BAD_PARM; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
911 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
912 | if (allow_list) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
913 | tag = NM_A_SZ_BLOCKING_ALLOW_ITEM; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
914 | else |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
915 | tag = NM_A_SZ_BLOCKING_DENY_ITEM; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
916 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
917 | fields = nm_field_add_pointer(fields, tag, 0, NMFIELD_METHOD_ADD, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
918 | g_strdup(who), NMFIELD_TYPE_UTF8); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
919 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
920 | rc = nm_send_request(user->conn, "createblock", fields, callback, data, NULL); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
921 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
922 | nm_free_fields(&fields); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
923 | return rc; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
924 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
925 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
926 | NMERR_T |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
927 | nm_send_remove_privacy_item(NMUser *user, const char *dn, gboolean allow_list, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
928 | nm_response_cb callback, gpointer data) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
929 | { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
930 | NMERR_T rc = NM_OK; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
931 | NMField *fields = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
932 | const char *tag; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
933 | GSList **list_ptr, *node; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
934 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
935 | if (user == NULL || dn == NULL) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
936 | return NMERR_BAD_PARM; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
937 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
938 | if (allow_list) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
939 | tag = NM_A_BLOCKING_ALLOW_LIST; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
940 | list_ptr = &user->allow_list; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
941 | } else { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
942 | tag = NM_A_BLOCKING_DENY_LIST; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
943 | list_ptr = &user->deny_list; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
944 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
945 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
946 | /* Remove item from the cached list */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
947 | if ((node = g_slist_find_custom(*list_ptr, dn, (GCompareFunc)nm_utf8_strcasecmp))) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
948 | *list_ptr = g_slist_remove_link(*list_ptr, node); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
949 | g_slist_free_1(node); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
950 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
951 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
952 | fields = nm_field_add_pointer(fields, tag, 0, NMFIELD_METHOD_DELETE, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
953 | g_strdup(dn), NMFIELD_TYPE_DN); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
954 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
955 | rc = nm_send_request(user->conn, "updateblocks", fields, callback, data, NULL); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
956 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
957 | nm_free_fields(&fields); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
958 | return rc; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
959 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
960 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
961 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
962 | NMERR_T |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
963 | nm_send_set_privacy_default(NMUser *user, gboolean default_deny, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
964 | nm_response_cb callback, gpointer data) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
965 | { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
966 | NMERR_T rc = NM_OK; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
967 | NMField *fields = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
968 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
969 | if (user == NULL) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
970 | return NMERR_BAD_PARM; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
971 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
972 | fields = nm_field_add_pointer(fields, NM_A_BLOCKING, 0, NMFIELD_METHOD_UPDATE, 0, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
973 | (default_deny ? g_strdup("1") : g_strdup("0")), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
974 | NMFIELD_TYPE_UTF8); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
975 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
976 | rc = nm_send_request(user->conn, "updateblocks", fields, callback, data, NULL); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
977 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
978 | nm_free_fields(&fields); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
979 | return rc; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
980 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
981 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
982 | NMERR_T |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
983 | nm_send_keepalive(NMUser *user, nm_response_cb callback, gpointer data) |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
984 | { |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
985 | NMERR_T rc = NM_OK; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
986 | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
987 | if (user == NULL) |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
988 | return NMERR_BAD_PARM; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
989 | |
|
9360
c40bc951573a
[gaim-migrate @ 10168]
Mike Stoddard <mistoddard@novell.com>
parents:
9268
diff
changeset
|
990 | rc = nm_send_request(user->conn, "ping", NULL, callback, data, NULL); |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
991 | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
992 | return rc; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
993 | } |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
994 | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
995 | NMERR_T |
| 8675 | 996 | nm_process_new_data(NMUser * user) |
| 997 | { | |
| 998 | NMConn *conn; | |
| 999 | NMERR_T rc = NM_OK; | |
| 1000 | guint32 val; | |
| 1001 | ||
| 1002 | if (user == NULL) | |
| 1003 | return NMERR_BAD_PARM; | |
| 1004 | ||
| 1005 | conn = user->conn; | |
| 1006 | ||
| 1007 | /* Check to see if this is an event or a response */ | |
|
14656
b570e4d43082
[gaim-migrate @ 17319]
Mike Stoddard <mistoddard@novell.com>
parents:
14254
diff
changeset
|
1008 | rc = nm_read_all(conn, (char *) &val, sizeof(val)); |
|
b570e4d43082
[gaim-migrate @ 17319]
Mike Stoddard <mistoddard@novell.com>
parents:
14254
diff
changeset
|
1009 | if (rc == NM_OK) { |
| 8675 | 1010 | if (strncmp((char *) &val, "HTTP", strlen("HTTP")) == 0) |
| 1011 | rc = nm_process_response(user); | |
| 1012 | else | |
|
8874
6dda85680808
[gaim-migrate @ 9643]
Mike Stoddard <mistoddard@novell.com>
parents:
8782
diff
changeset
|
1013 | rc = nm_process_event(user, GUINT32_FROM_LE(val)); |
| 8675 | 1014 | |
| 1015 | } else { | |
|
14656
b570e4d43082
[gaim-migrate @ 17319]
Mike Stoddard <mistoddard@novell.com>
parents:
14254
diff
changeset
|
1016 | if (errno == EAGAIN) |
|
b570e4d43082
[gaim-migrate @ 17319]
Mike Stoddard <mistoddard@novell.com>
parents:
14254
diff
changeset
|
1017 | rc = NM_OK; |
|
b570e4d43082
[gaim-migrate @ 17319]
Mike Stoddard <mistoddard@novell.com>
parents:
14254
diff
changeset
|
1018 | else |
|
b570e4d43082
[gaim-migrate @ 17319]
Mike Stoddard <mistoddard@novell.com>
parents:
14254
diff
changeset
|
1019 | rc = NMERR_PROTOCOL; |
| 8675 | 1020 | } |
| 1021 | ||
| 1022 | return rc; | |
| 1023 | } | |
| 1024 | ||
| 1025 | NMConference * | |
| 1026 | nm_find_conversation(NMUser * user, const char *who) | |
| 1027 | { | |
| 1028 | NMConference *conference = NULL; | |
| 1029 | NMConference *tmp; | |
| 1030 | GSList *cnode; | |
| 1031 | ||
| 1032 | if (user && user->conferences) { | |
| 1033 | for (cnode = user->conferences; cnode; cnode = cnode->next) { | |
| 1034 | tmp = cnode->data; | |
| 1035 | if (nm_conference_get_participant_count(tmp) == 1) { | |
| 1036 | NMUserRecord *ur = nm_conference_get_participant(tmp, 0); | |
| 1037 | ||
| 1038 | if (ur) { | |
| 1039 | if (nm_utf8_str_equal(nm_user_record_get_dn(ur), who)) { | |
| 1040 | conference = tmp; | |
| 1041 | break; | |
| 1042 | } | |
| 1043 | } | |
| 1044 | } | |
| 1045 | } | |
| 1046 | } | |
| 1047 | ||
| 1048 | return conference; | |
| 1049 | } | |
| 1050 | ||
| 1051 | void | |
| 1052 | nm_conference_list_add(NMUser * user, NMConference * conf) | |
| 1053 | { | |
| 1054 | if (user == NULL || conf == NULL) | |
| 1055 | return; | |
| 1056 | ||
| 1057 | nm_conference_add_ref(conf); | |
| 1058 | user->conferences = g_slist_append(user->conferences, conf); | |
| 1059 | } | |
| 1060 | ||
| 1061 | void | |
| 1062 | nm_conference_list_remove(NMUser * user, NMConference * conf) | |
| 1063 | { | |
| 1064 | if (user == NULL || conf == NULL) | |
| 1065 | return; | |
| 1066 | ||
| 1067 | if (g_slist_find(user->conferences, conf)) { | |
| 1068 | user->conferences = g_slist_remove(user->conferences, conf); | |
| 1069 | nm_release_conference(conf); | |
| 1070 | } | |
| 1071 | } | |
| 1072 | ||
| 1073 | void | |
| 1074 | nm_conference_list_free(NMUser * user) | |
| 1075 | { | |
| 1076 | GSList *cnode; | |
| 1077 | NMConference *conference; | |
| 1078 | ||
| 1079 | if (user == NULL) | |
| 1080 | return; | |
| 1081 | ||
| 1082 | if (user->conferences) { | |
| 1083 | for (cnode = user->conferences; cnode; cnode = cnode->next) { | |
| 1084 | conference = cnode->data; | |
| 1085 | cnode->data = NULL; | |
| 1086 | nm_release_conference(conference); | |
| 1087 | } | |
| 1088 | ||
| 1089 | g_slist_free(user->conferences); | |
| 1090 | user->conferences = NULL; | |
| 1091 | } | |
| 1092 | } | |
| 1093 | ||
| 1094 | NMConference * | |
| 1095 | nm_conference_list_find(NMUser * user, const char *guid) | |
| 1096 | { | |
| 1097 | GSList *cnode; | |
| 1098 | NMConference *conference = NULL, *tmp; | |
| 1099 | ||
| 1100 | if (user == NULL || guid == NULL) | |
| 1101 | return NULL; | |
| 1102 | ||
| 1103 | if (user->conferences) { | |
| 1104 | for (cnode = user->conferences; cnode; cnode = cnode->next) { | |
| 1105 | tmp = cnode->data; | |
| 1106 | if (nm_are_guids_equal(nm_conference_get_guid(tmp), guid)) { | |
| 1107 | conference = tmp; | |
| 1108 | break; | |
| 1109 | } | |
| 1110 | } | |
| 1111 | } | |
| 1112 | ||
| 1113 | return conference; | |
| 1114 | } | |
| 1115 | ||
| 1116 | gboolean | |
| 1117 | nm_are_guids_equal(const char *guid1, const char *guid2) | |
| 1118 | { | |
| 1119 | if (guid1 == NULL || guid2 == NULL) | |
| 1120 | return FALSE; | |
| 1121 | ||
| 1122 | return (strncmp(guid1, guid2, CONF_GUID_END) == 0); | |
| 1123 | } | |
| 1124 | ||
| 1125 | void | |
| 1126 | nm_user_add_contact(NMUser * user, NMContact * contact) | |
| 1127 | { | |
| 1128 | if (user == NULL || contact == NULL) | |
| 1129 | return; | |
| 1130 | ||
| 1131 | nm_contact_add_ref(contact); | |
| 1132 | ||
| 1133 | g_hash_table_insert(user->contacts, | |
| 1134 | g_utf8_strdown(nm_contact_get_dn(contact), -1), contact); | |
| 1135 | } | |
| 1136 | ||
| 1137 | void | |
| 1138 | nm_user_add_user_record(NMUser * user, NMUserRecord * user_record) | |
| 1139 | { | |
|
14721
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1140 | const char *display_id; |
|
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1141 | const char *dn; |
|
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1142 | |
|
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1143 | if (!user || !user_record) |
|
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1144 | return; |
|
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1145 | |
|
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1146 | display_id = nm_user_record_get_display_id(user_record); |
|
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1147 | dn = nm_user_record_get_dn(user_record); |
|
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1148 | |
|
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1149 | if (!dn || !display_id) |
|
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1150 | return; |
|
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1151 | |
| 8675 | 1152 | nm_user_record_add_ref(user_record); |
| 1153 | ||
| 1154 | g_hash_table_insert(user->user_records, | |
|
14721
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1155 | g_utf8_strdown(dn, -1), |
| 8675 | 1156 | user_record); |
| 1157 | ||
| 1158 | g_hash_table_insert(user->display_id_to_dn, | |
|
14721
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1159 | g_utf8_strdown(display_id, -1), |
|
76871a6afba7
[gaim-migrate @ 17405]
Mike Stoddard <mistoddard@novell.com>
parents:
14656
diff
changeset
|
1160 | g_utf8_strdown(dn, -1)); |
| 8675 | 1161 | } |
| 1162 | ||
| 1163 | nm_event_cb | |
| 1164 | nm_user_get_event_callback(NMUser * user) | |
| 1165 | { | |
| 1166 | if (user == NULL) | |
| 1167 | return NULL; | |
| 1168 | ||
| 1169 | return user->evt_callback; | |
| 1170 | } | |
| 1171 | ||
| 1172 | NMConn * | |
| 1173 | nm_user_get_conn(NMUser * user) | |
| 1174 | { | |
| 1175 | if (user == NULL) | |
| 1176 | return NULL; | |
| 1177 | ||
| 1178 | return user->conn; | |
| 1179 | } | |
| 1180 | ||
| 1181 | NMERR_T | |
| 1182 | nm_create_contact_list(NMUser * user) | |
| 1183 | { | |
| 1184 | NMERR_T rc = NM_OK; | |
| 1185 | NMField *locate = NULL; | |
| 1186 | ||
| 1187 | if (user == NULL || user->fields == NULL) { | |
| 1188 | return NMERR_BAD_PARM; | |
| 1189 | } | |
| 1190 | ||
| 1191 | /* Create the root folder */ | |
| 1192 | user->root_folder = nm_create_folder(""); | |
| 1193 | ||
| 1194 | /* Find the contact list in the login fields */ | |
| 1195 | locate = nm_locate_field(NM_A_FA_CONTACT_LIST, user->fields); | |
| 1196 | if (locate != NULL) { | |
| 1197 | ||
| 1198 | /* Add the folders and then the contacts */ | |
| 1199 | nm_folder_add_contacts_and_folders(user, user->root_folder, | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1200 | (NMField *) (locate->ptr_value)); |
| 8675 | 1201 | |
| 1202 | } | |
| 1203 | ||
| 1204 | return rc; | |
| 1205 | } | |
| 1206 | ||
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1207 | gboolean nm_user_is_privacy_locked(NMUser *user) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1208 | { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1209 | if (user) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1210 | return user->privacy_locked; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1211 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1212 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1213 | return FALSE; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1214 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1215 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1216 | static gboolean |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1217 | _create_privacy_list(NMUser * user, NMRequest *request) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1218 | { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1219 | NMField *locate = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1220 | GSList *need_details = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1221 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1222 | /* Are the privacy settings locked */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1223 | locate = nm_locate_field(NM_A_LOCKED_ATTR_LIST, user->fields); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1224 | if (locate && locate->ptr_value) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1225 | if (locate->type == NMFIELD_TYPE_UTF8 && |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1226 | (nm_utf8_strcasecmp(locate->ptr_value, NM_A_BLOCKING) == 0)) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1227 | user->privacy_locked = TRUE; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1228 | } else if (locate->type == NMFIELD_TYPE_MV || |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1229 | locate->type == NMFIELD_TYPE_ARRAY) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1230 | NMField *tmp = (NMField *)locate->ptr_value; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1231 | while (tmp && tmp->tag) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1232 | if (nm_utf8_strcasecmp(tmp->ptr_value, NM_A_BLOCKING) == 0) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1233 | user->privacy_locked = TRUE; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1234 | break; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1235 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1236 | tmp++; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1237 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1238 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1239 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1240 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1241 | /* Set default deny flag */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1242 | locate = nm_locate_field(NM_A_BLOCKING, user->fields); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1243 | if (locate && locate->ptr_value) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1244 | user->default_deny = atoi((char *)locate->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1245 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1246 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1247 | /* Read internal blocking allow list */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1248 | locate = nm_locate_field(NM_A_BLOCKING_ALLOW_LIST, user->fields); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1249 | if (locate && locate->ptr_value) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1250 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1251 | if (locate->type == NMFIELD_TYPE_MV) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1252 | locate = (NMField *)locate->ptr_value; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1253 | for (; locate->tag != NULL; locate++) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1254 | if (locate->ptr_value) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1255 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1256 | user->allow_list = g_slist_append(user->allow_list, (char *)locate->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1257 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1258 | if (nm_find_user_record(user, (char *)locate->ptr_value) == NULL) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1259 | need_details = g_slist_append(need_details, (char *)locate->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1260 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1261 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1262 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1263 | } else { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1264 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1265 | user->allow_list = g_slist_append(user->allow_list, (char *)locate->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1266 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1267 | if (nm_find_user_record(user, (char *)locate->ptr_value) == NULL) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1268 | need_details = g_slist_append(need_details, (char *)locate->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1269 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1270 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1271 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1272 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1273 | /* Read internal blocking deny list */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1274 | locate = nm_locate_field(NM_A_BLOCKING_DENY_LIST, user->fields); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1275 | if (locate && locate->ptr_value) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1276 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1277 | if (locate->type == NMFIELD_TYPE_MV) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1278 | locate = (NMField *)locate->ptr_value; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1279 | for (; locate->tag != NULL; locate++) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1280 | if (locate->ptr_value) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1281 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1282 | user->deny_list = g_slist_append(user->deny_list, (char *)locate->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1283 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1284 | if (nm_find_user_record(user, (char *)locate->ptr_value) == NULL) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1285 | need_details = g_slist_append(need_details, (char *)locate->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1286 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1287 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1288 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1289 | } else { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1290 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1291 | user->deny_list = g_slist_append(user->deny_list, (char *)locate->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1292 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1293 | if (nm_find_user_record(user, (char *)locate->ptr_value) == NULL) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1294 | need_details = g_slist_append(need_details, (char *)locate->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1295 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1296 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1297 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1298 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1299 | if (need_details) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1300 | |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
1301 | nm_request_add_ref(request); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1302 | nm_send_multiple_get_details(user, need_details, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1303 | _handle_multiple_get_details_login_cb, request); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1304 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1305 | return FALSE; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1306 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1307 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1308 | return TRUE; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1309 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1310 | |
| 8675 | 1311 | void |
| 1312 | nm_destroy_contact_list(NMUser * user) | |
| 1313 | { | |
| 1314 | if (user == NULL) | |
| 1315 | return; | |
| 1316 | ||
| 1317 | if (user->root_folder) { | |
| 1318 | nm_release_folder(user->root_folder); | |
| 1319 | user->root_folder = NULL; | |
| 1320 | } | |
| 1321 | } | |
| 1322 | ||
| 1323 | NMFolder * | |
| 1324 | nm_get_root_folder(NMUser * user) | |
| 1325 | { | |
| 1326 | if (user == NULL) | |
| 1327 | return NULL; | |
| 1328 | ||
| 1329 | if (user->root_folder == NULL) | |
| 1330 | nm_create_contact_list(user); | |
| 1331 | ||
| 1332 | return user->root_folder; | |
| 1333 | } | |
| 1334 | ||
| 1335 | NMContact * | |
| 1336 | nm_find_contact(NMUser * user, const char *name) | |
| 1337 | { | |
| 1338 | char *str; | |
| 1339 | const char *dn = NULL; | |
| 1340 | NMContact *contact = NULL; | |
| 1341 | ||
| 1342 | if (user == NULL || name == NULL) | |
| 1343 | return NULL; | |
| 1344 | ||
| 1345 | str = g_utf8_strdown(name, -1); | |
| 1346 | if (strstr(str, "=")) { | |
| 1347 | dn = str; | |
| 1348 | } else { | |
| 1349 | /* Assume that we have a display id instead of a dn */ | |
| 1350 | dn = (const char *) g_hash_table_lookup(user->display_id_to_dn, str); | |
| 1351 | } | |
| 1352 | ||
| 1353 | /* Find contact object in reference table */ | |
| 1354 | if (dn) { | |
| 1355 | contact = (NMContact *) g_hash_table_lookup(user->contacts, dn); | |
| 1356 | } | |
| 1357 | ||
| 1358 | g_free(str); | |
| 1359 | return contact; | |
| 1360 | } | |
| 1361 | ||
| 1362 | GList * | |
| 1363 | nm_find_contacts(NMUser * user, const char *dn) | |
| 1364 | { | |
| 1365 | guint32 i, cnt; | |
| 1366 | NMFolder *folder; | |
| 1367 | NMContact *contact; | |
| 1368 | GList *contacts = NULL; | |
| 1369 | ||
| 1370 | if (user == NULL || dn == NULL) | |
| 1371 | return NULL; | |
| 1372 | ||
| 1373 | /* Check for contact at the root */ | |
| 1374 | contact = nm_folder_find_contact(user->root_folder, dn); | |
| 1375 | if (contact) { | |
| 1376 | contacts = g_list_append(contacts, contact); | |
| 1377 | contact = NULL; | |
| 1378 | } | |
| 1379 | ||
| 1380 | /* Check for contact in each subfolder */ | |
| 1381 | cnt = nm_folder_get_subfolder_count(user->root_folder); | |
| 1382 | for (i = 0; i < cnt; i++) { | |
| 1383 | folder = nm_folder_get_subfolder(user->root_folder, i); | |
| 1384 | contact = nm_folder_find_contact(folder, dn); | |
| 1385 | if (contact) { | |
| 1386 | contacts = g_list_append(contacts, contact); | |
| 1387 | contact = NULL; | |
| 1388 | } | |
| 1389 | } | |
| 1390 | ||
| 1391 | return contacts; | |
| 1392 | } | |
| 1393 | ||
| 1394 | NMUserRecord * | |
| 1395 | nm_find_user_record(NMUser * user, const char *name) | |
| 1396 | { | |
| 1397 | char *str = NULL; | |
| 1398 | const char *dn = NULL; | |
| 1399 | NMUserRecord *user_record = NULL; | |
| 1400 | ||
| 1401 | if (user == NULL || name == NULL) | |
| 1402 | return NULL; | |
| 1403 | ||
| 1404 | str = g_utf8_strdown(name, -1); | |
| 1405 | if (strstr(str, "=")) { | |
| 1406 | dn = str; | |
| 1407 | } else { | |
| 1408 | /* Assume that we have a display id instead of a dn */ | |
| 1409 | dn = (const char *) g_hash_table_lookup(user->display_id_to_dn, str); | |
| 1410 | } | |
| 1411 | ||
| 1412 | /* Find user record in reference table */ | |
| 1413 | if (dn) { | |
| 1414 | user_record = | |
| 1415 | (NMUserRecord *) g_hash_table_lookup(user->user_records, dn); | |
| 1416 | } | |
| 1417 | ||
| 1418 | g_free(str); | |
| 1419 | return user_record; | |
| 1420 | } | |
| 1421 | ||
| 1422 | const char * | |
| 1423 | nm_lookup_dn(NMUser * user, const char *display_id) | |
| 1424 | { | |
|
8744
14a15b6f466d
[gaim-migrate @ 9499]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
1425 | const char *dn; |
|
14a15b6f466d
[gaim-migrate @ 9499]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
1426 | char *lower; |
|
14a15b6f466d
[gaim-migrate @ 9499]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
1427 | |
| 8675 | 1428 | if (user == NULL || display_id == NULL) |
| 1429 | return NULL; | |
| 1430 | ||
|
8744
14a15b6f466d
[gaim-migrate @ 9499]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
1431 | lower = g_utf8_strdown(display_id, -1); |
|
14a15b6f466d
[gaim-migrate @ 9499]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
1432 | dn = g_hash_table_lookup(user->display_id_to_dn, lower); |
|
14a15b6f466d
[gaim-migrate @ 9499]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
1433 | g_free(lower); |
|
14a15b6f466d
[gaim-migrate @ 9499]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
1434 | |
|
14a15b6f466d
[gaim-migrate @ 9499]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
1435 | return dn; |
| 8675 | 1436 | } |
| 1437 | ||
| 1438 | NMFolder * | |
| 1439 | nm_find_folder(NMUser * user, const char *name) | |
| 1440 | { | |
| 1441 | NMFolder *folder = NULL, *temp; | |
| 1442 | int i, num_folders; | |
| 1443 | const char *tname = NULL; | |
| 1444 | ||
| 1445 | if (user == NULL || name == NULL) | |
| 1446 | return NULL; | |
| 1447 | ||
| 1448 | if (*name == '\0') | |
| 1449 | return user->root_folder; | |
| 1450 | ||
| 1451 | num_folders = nm_folder_get_subfolder_count(user->root_folder); | |
| 1452 | for (i = 0; i < num_folders; i++) { | |
| 1453 | temp = nm_folder_get_subfolder(user->root_folder, i); | |
| 1454 | tname = nm_folder_get_name(temp); | |
| 1455 | if (tname && (strcmp(tname, name) == 0)) { | |
| 1456 | folder = temp; | |
| 1457 | break; | |
| 1458 | } | |
| 1459 | } | |
| 1460 | ||
| 1461 | return folder; | |
| 1462 | } | |
| 1463 | ||
| 1464 | NMFolder * | |
| 1465 | nm_find_folder_by_id(NMUser * user, int object_id) | |
| 1466 | { | |
| 1467 | NMFolder *folder = NULL, *temp; | |
| 1468 | int i, num_folders; | |
| 1469 | ||
| 1470 | if (user == NULL) | |
| 1471 | return NULL; | |
| 1472 | ||
| 1473 | if (object_id == 0) | |
| 1474 | return user->root_folder; | |
| 1475 | ||
| 1476 | num_folders = nm_folder_get_subfolder_count(user->root_folder); | |
| 1477 | for (i = 0; i < num_folders; i++) { | |
| 1478 | temp = nm_folder_get_subfolder(user->root_folder, i); | |
| 1479 | if (nm_folder_get_id(temp) == object_id) { | |
| 1480 | folder = temp; | |
| 1481 | break; | |
| 1482 | } | |
| 1483 | } | |
| 1484 | ||
| 1485 | return folder; | |
| 1486 | } | |
| 1487 | ||
| 1488 | static void | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1489 | _handle_multiple_get_details_login_cb(NMUser * user, NMERR_T ret_code, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1490 | gpointer resp_data, gpointer user_data) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1491 | { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1492 | nm_response_cb cb; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1493 | NMRequest *request = user_data; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1494 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1495 | if (user == NULL || request == NULL) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1496 | return; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1497 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1498 | if ((cb = nm_request_get_callback(request))) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1499 | cb(user, ret_code, nm_request_get_data(request), |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1500 | nm_request_get_user_define(request)); |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
1501 | nm_release_request(request); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1502 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1503 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1504 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1505 | static void |
| 8675 | 1506 | _handle_multiple_get_details_joinconf_cb(NMUser * user, NMERR_T ret_code, |
| 1507 | gpointer resp_data, gpointer user_data) | |
| 1508 | { | |
| 1509 | NMRequest *request = user_data; | |
| 1510 | NMUserRecord *user_record = resp_data; | |
| 1511 | NMConference *conference; | |
| 1512 | GSList *list, *node; | |
| 1513 | ||
| 1514 | if (user == NULL || resp_data == NULL || user_data == NULL) | |
| 1515 | return; | |
| 1516 | ||
| 1517 | conference = nm_request_get_data(request); | |
| 1518 | list = nm_request_get_user_define(request); | |
| 1519 | ||
| 1520 | if (ret_code == 0 && conference && list) { | |
| 1521 | ||
| 1522 | /* Add the user to the conference */ | |
| 1523 | nm_conference_add_participant(conference, user_record); | |
| 1524 | ||
| 1525 | /* Find the user in the list and remove it */ | |
| 1526 | for (node = list; node; node = node->next) { | |
| 1527 | if (nm_utf8_str_equal(nm_user_record_get_dn(user_record), | |
| 1528 | (const char *) node->data)) { | |
|
14986
93c7969e2d78
[gaim-migrate @ 17696]
Stanislav Brabec <sbrabec@suse.cz>
parents:
14721
diff
changeset
|
1529 | g_free(node->data); |
| 8675 | 1530 | list = g_slist_remove(list, node->data); |
| 1531 | nm_request_set_user_define(request, list); | |
| 1532 | break; | |
| 1533 | } | |
| 1534 | } | |
| 1535 | ||
| 1536 | /* Time to callback? */ | |
| 1537 | if (g_slist_length(list) == 0) { | |
| 1538 | nm_response_cb cb = nm_request_get_callback(request); | |
| 1539 | ||
| 1540 | if (cb) { | |
| 1541 | cb(user, 0, conference, conference); | |
| 1542 | } | |
| 1543 | g_slist_free(list); | |
| 1544 | nm_release_request(request); | |
| 1545 | } | |
| 1546 | } | |
| 1547 | } | |
| 1548 | ||
|
12412
8abe3226695e
[gaim-migrate @ 14719]
Richard Laager <rlaager@pidgin.im>
parents:
11318
diff
changeset
|
1549 | static NMERR_T |
| 8675 | 1550 | nm_call_handler(NMUser * user, NMRequest * request, NMField * fields) |
| 1551 | { | |
| 1552 | NMERR_T rc = NM_OK, ret_code = NM_OK; | |
| 1553 | NMConference *conf = NULL; | |
| 1554 | NMUserRecord *user_record = NULL; | |
| 1555 | NMField *locate = NULL; | |
| 1556 | NMField *field = NULL; | |
| 1557 | const char *cmd; | |
| 1558 | nm_response_cb cb; | |
| 1559 | gboolean done = TRUE; | |
|
8684
7ec649752daa
[gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents:
8675
diff
changeset
|
1560 | |
| 8675 | 1561 | if (user == NULL || request == NULL || fields == NULL) |
| 1562 | return NMERR_BAD_PARM; | |
| 1563 | ||
| 1564 | /* Get the return code */ | |
| 1565 | field = nm_locate_field(NM_A_SZ_RESULT_CODE, fields); | |
| 1566 | if (field) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1567 | ret_code = atoi((char *) field->ptr_value); |
| 8675 | 1568 | } else { |
| 1569 | ret_code = NMERR_PROTOCOL; | |
| 1570 | } | |
|
8684
7ec649752daa
[gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents:
8675
diff
changeset
|
1571 | |
| 8675 | 1572 | cmd = nm_request_get_cmd(request); |
| 1573 | if (ret_code == NM_OK && cmd != NULL) { | |
| 1574 | ||
| 1575 | if (strcmp("login", cmd) == 0) { | |
| 1576 | ||
| 1577 | user->user_record = nm_create_user_record_from_fields(fields); | |
| 1578 | ||
| 1579 | /* Save the users fields */ | |
|
8744
14a15b6f466d
[gaim-migrate @ 9499]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
1580 | user->fields = nm_copy_field_array(fields); |
| 8675 | 1581 | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1582 | nm_create_contact_list(user); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1583 | done = _create_privacy_list(user, request); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1584 | |
| 8675 | 1585 | } else if (strcmp("setstatus", cmd) == 0) { |
| 1586 | ||
| 1587 | /* Nothing to do */ | |
| 1588 | ||
| 1589 | } else if (strcmp("createconf", cmd) == 0) { | |
| 1590 | ||
| 1591 | conf = (NMConference *) nm_request_get_data(request); | |
| 1592 | ||
| 1593 | /* get the convo guid */ | |
| 1594 | locate = nm_locate_field(NM_A_FA_CONVERSATION, fields); | |
| 1595 | if (locate) { | |
| 1596 | field = | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1597 | nm_locate_field(NM_A_SZ_OBJECT_ID, (NMField *) fields->ptr_value); |
| 8675 | 1598 | if (field) { |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1599 | nm_conference_set_guid(conf, (char *) field->ptr_value); |
| 8675 | 1600 | } |
| 1601 | } | |
| 1602 | ||
| 1603 | nm_conference_list_add(user, conf); | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1604 | nm_release_conference(conf); |
| 8675 | 1605 | |
| 1606 | } else if (strcmp("leaveconf", cmd) == 0) { | |
| 1607 | ||
| 1608 | conf = (NMConference *) nm_request_get_data(request); | |
| 1609 | nm_conference_list_remove(user, conf); | |
| 1610 | ||
| 1611 | } else if (strcmp("joinconf", cmd) == 0) { | |
| 1612 | GSList *list = NULL, *node; | |
| 1613 | ||
| 1614 | conf = nm_request_get_data(request); | |
| 1615 | ||
| 1616 | locate = nm_locate_field(NM_A_FA_CONTACT_LIST, fields); | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1617 | if (locate && locate->ptr_value != 0) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1618 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1619 | field = (NMField *) locate->ptr_value; |
| 8675 | 1620 | while ((field = nm_locate_field(NM_A_SZ_DN, field))) { |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1621 | if (field && field->ptr_value != 0) { |
| 8675 | 1622 | |
| 1623 | if (nm_utf8_str_equal | |
| 1624 | (nm_user_record_get_dn(user->user_record), | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1625 | (const char *) field->ptr_value)) { |
| 8675 | 1626 | field++; |
| 1627 | continue; | |
| 1628 | } | |
| 1629 | ||
| 1630 | user_record = | |
| 1631 | nm_find_user_record(user, | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1632 | (const char *) field->ptr_value); |
| 8675 | 1633 | if (user_record == NULL) { |
| 1634 | list = | |
| 1635 | g_slist_append(list, | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1636 | g_strdup((char *) field->ptr_value)); |
| 8675 | 1637 | } else { |
| 1638 | nm_conference_add_participant(conf, user_record); | |
| 1639 | } | |
| 1640 | } | |
| 1641 | field++; | |
| 1642 | } | |
| 1643 | ||
| 1644 | if (list != NULL) { | |
| 1645 | ||
| 1646 | done = FALSE; | |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
1647 | nm_request_set_user_define(request, list); |
| 8675 | 1648 | nm_request_add_ref(request); |
| 1649 | for (node = list; node; node = node->next) { | |
| 1650 | ||
| 1651 | nm_send_get_details(user, (const char *) node->data, | |
| 1652 | _handle_multiple_get_details_joinconf_cb, | |
| 1653 | request); | |
| 1654 | } | |
| 1655 | } | |
| 1656 | } | |
| 1657 | ||
| 1658 | } else if (strcmp("getdetails", cmd) == 0) { | |
| 1659 | ||
| 1660 | locate = nm_locate_field(NM_A_FA_RESULTS, fields); | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1661 | while (locate && locate->ptr_value != 0) { |
| 8675 | 1662 | |
| 1663 | user_record = nm_create_user_record_from_fields(locate); | |
| 1664 | if (user_record) { | |
| 1665 | NMUserRecord *tmp; | |
| 1666 | ||
| 1667 | tmp = | |
| 1668 | nm_find_user_record(user, | |
| 1669 | nm_user_record_get_dn(user_record)); | |
| 1670 | if (tmp) { | |
| 1671 | ||
| 1672 | /* Update the existing user record */ | |
| 1673 | nm_user_record_copy(tmp, user_record); | |
| 1674 | nm_release_user_record(user_record); | |
| 1675 | user_record = tmp; | |
| 1676 | ||
| 1677 | } else { | |
| 1678 | nm_user_add_user_record(user, user_record); | |
| 1679 | nm_release_user_record(user_record); | |
| 1680 | } | |
| 1681 | ||
| 1682 | /* Response data is new user record */ | |
| 1683 | nm_request_set_data(request, (gpointer) user_record); | |
| 1684 | } | |
| 1685 | ||
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1686 | locate = nm_locate_field(NM_A_FA_RESULTS, locate+1); |
| 8675 | 1687 | } |
| 1688 | ||
| 1689 | } else if (strcmp("createfolder", cmd) == 0) { | |
| 1690 | ||
| 1691 | _update_contact_list(user, fields); | |
| 1692 | ||
| 1693 | } else if (strcmp("createcontact", cmd) == 0) { | |
| 1694 | ||
| 1695 | _update_contact_list(user, fields); | |
| 1696 | ||
| 1697 | locate = | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1698 | nm_locate_field(NM_A_SZ_OBJECT_ID, (NMField *) fields->ptr_value); |
| 8675 | 1699 | if (locate) { |
| 1700 | ||
| 1701 | NMContact *new_contact = | |
| 1702 | nm_folder_find_item_by_object_id(user->root_folder, | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1703 | atoi((char *)locate->ptr_value)); |
| 8675 | 1704 | |
| 1705 | if (new_contact) { | |
| 1706 | ||
| 1707 | /* Add the contact to our cache */ | |
| 1708 | nm_user_add_contact(user, new_contact); | |
| 1709 | ||
| 1710 | /* Set the contact as the response data */ | |
| 1711 | nm_request_set_data(request, (gpointer) new_contact); | |
| 1712 | ||
| 1713 | } | |
| 1714 | ||
| 1715 | } | |
| 1716 | ||
| 1717 | } else if (strcmp("deletecontact", cmd) == 0) { | |
| 1718 | ||
| 1719 | _update_contact_list(user, fields); | |
| 1720 | ||
| 1721 | } else if (strcmp("movecontact", cmd) == 0) { | |
| 1722 | ||
| 1723 | _update_contact_list(user, fields); | |
| 1724 | ||
| 1725 | } else if (strcmp("getstatus", cmd) == 0) { | |
| 1726 | ||
| 1727 | locate = nm_locate_field(NM_A_SZ_STATUS, fields); | |
| 1728 | if (locate) { | |
| 1729 | nm_user_record_set_status((NMUserRecord *) | |
| 1730 | nm_request_get_data(request), | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1731 | atoi((char *) locate->ptr_value), NULL); |
| 8675 | 1732 | } |
| 1733 | ||
| 1734 | } else if (strcmp("updateitem", cmd) == 0) { | |
| 1735 | ||
| 1736 | /* Nothing extra to do here */ | |
| 1737 | ||
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1738 | } else if (strcmp("createblock", cmd) == 0) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1739 | if ((locate = nm_locate_field(NM_A_BLOCKING_DENY_LIST, fields))) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1740 | if (locate->ptr_value) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1741 | user->deny_list = g_slist_append(user->deny_list, g_strdup((char *)locate->ptr_value)); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1742 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1743 | } else if ((locate = nm_locate_field(NM_A_BLOCKING_ALLOW_LIST, fields))) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1744 | if (locate->ptr_value) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1745 | user->allow_list = g_slist_append(user->allow_list, g_strdup((char *)locate->ptr_value)); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1746 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1747 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1748 | } else if (strcmp("updateblocks", cmd) == 0) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1749 | /* nothing to do here */ |
| 8675 | 1750 | } else { |
| 1751 | ||
| 1752 | /* Nothing to do, just print debug message */ | |
| 1753 | gaim_debug(GAIM_DEBUG_INFO, "novell", | |
| 1754 | "nm_call_handler(): Unknown request command, %s\n", cmd); | |
| 1755 | ||
| 1756 | } | |
| 1757 | } | |
| 1758 | ||
| 1759 | if (done && (cb = nm_request_get_callback(request))) { | |
| 1760 | ||
| 1761 | cb(user, ret_code, nm_request_get_data(request), | |
| 1762 | nm_request_get_user_define(request)); | |
| 1763 | } | |
| 1764 | ||
| 1765 | return rc; | |
| 1766 | } | |
| 1767 | ||
| 1768 | static NMERR_T | |
| 1769 | nm_process_response(NMUser * user) | |
| 1770 | { | |
| 1771 | NMERR_T rc = NM_OK; | |
| 1772 | NMField *fields = NULL; | |
| 1773 | NMField *field = NULL; | |
| 1774 | NMConn *conn = user->conn; | |
| 1775 | NMRequest *req = NULL; | |
| 1776 | ||
| 1777 | rc = nm_read_header(conn); | |
| 1778 | if (rc == NM_OK) { | |
| 1779 | rc = nm_read_fields(conn, -1, &fields); | |
| 1780 | } | |
| 1781 | ||
| 1782 | if (rc == NM_OK) { | |
| 1783 | field = nm_locate_field(NM_A_SZ_TRANSACTION_ID, fields); | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1784 | if (field != NULL && field->ptr_value != 0) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1785 | req = nm_conn_find_request(conn, atoi((char *) field->ptr_value)); |
| 8675 | 1786 | if (req != NULL) { |
| 1787 | rc = nm_call_handler(user, req, fields); | |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
1788 | nm_conn_remove_request_item(conn, req); |
| 8675 | 1789 | } |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
1790 | |
| 8675 | 1791 | } |
| 1792 | } | |
| 1793 | ||
|
8744
14a15b6f466d
[gaim-migrate @ 9499]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
1794 | if (fields) |
|
14a15b6f466d
[gaim-migrate @ 9499]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
1795 | nm_free_fields(&fields); |
|
14a15b6f466d
[gaim-migrate @ 9499]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
1796 | |
| 8675 | 1797 | return rc; |
| 1798 | } | |
| 1799 | ||
| 1800 | /* | |
| 1801 | * Some utility functions...haven't figured out where | |
| 1802 | * they belong yet. | |
| 1803 | */ | |
| 1804 | gint | |
| 1805 | nm_utf8_strcasecmp(gconstpointer str1, gconstpointer str2) | |
| 1806 | { | |
| 1807 | gint rv; | |
| 1808 | char *str1_down = g_utf8_strdown(str1, -1); | |
| 1809 | char *str2_down = g_utf8_strdown(str2, -1); | |
| 1810 | ||
| 1811 | rv = g_utf8_collate(str1_down, str2_down); | |
| 1812 | ||
| 1813 | g_free(str1_down); | |
| 1814 | g_free(str2_down); | |
| 1815 | ||
| 1816 | return rv; | |
| 1817 | } | |
| 1818 | ||
| 1819 | gboolean | |
| 1820 | nm_utf8_str_equal(gconstpointer str1, gconstpointer str2) | |
| 1821 | { | |
| 1822 | return (nm_utf8_strcasecmp(str1, str2) == 0); | |
| 1823 | } | |
| 1824 | ||
| 1825 | char * | |
| 1826 | nm_typed_to_dotted(const char *typed) | |
| 1827 | { | |
| 1828 | unsigned i = 0, j = 0; | |
| 8782 | 1829 | char *dotted; |
| 8675 | 1830 | |
| 1831 | if (typed == NULL) | |
| 1832 | return NULL; | |
| 1833 | ||
| 8782 | 1834 | dotted = g_new0(char, strlen(typed)); |
| 8675 | 1835 | |
| 1836 | do { | |
| 1837 | ||
| 1838 | /* replace comma with a dot */ | |
| 1839 | if (j != 0) { | |
| 1840 | dotted[j] = '.'; | |
| 1841 | j++; | |
| 1842 | } | |
| 1843 | ||
| 1844 | /* skip the type */ | |
| 1845 | while (typed[i] != '\0' && typed[i] != '=') | |
| 1846 | i++; | |
| 1847 | ||
| 1848 | /* verify that we aren't running off the end */ | |
| 1849 | if (typed[i] == '\0') { | |
| 1850 | dotted[j] = '\0'; | |
| 1851 | break; | |
| 1852 | } | |
| 1853 | ||
| 1854 | i++; | |
| 1855 | ||
| 1856 | /* copy the object name to context */ | |
| 1857 | while (typed[i] != '\0' && typed[i] != ',') { | |
| 1858 | dotted[j] = typed[i]; | |
| 1859 | j++; | |
| 1860 | i++; | |
| 1861 | } | |
| 1862 | ||
| 1863 | } while (typed[i] != '\0'); | |
| 1864 | ||
| 1865 | return dotted; | |
| 1866 | } | |
| 1867 | ||
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1868 | const char * |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1869 | nm_error_to_string(NMERR_T err) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1870 | { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1871 | static char *unknown_msg = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1872 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1873 | g_free(unknown_msg); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1874 | unknown_msg = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1875 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1876 | switch (err) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1877 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1878 | case NMERR_BAD_PARM: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1879 | return _("Required parameters not passed in"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1880 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1881 | case NMERR_TCP_WRITE: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1882 | return _("Unable to write to network"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1883 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1884 | case NMERR_TCP_READ: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1885 | return _("Unable to read from network"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1886 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1887 | case NMERR_PROTOCOL: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1888 | return _("Error communicating with server"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1889 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1890 | case NMERR_CONFERENCE_NOT_FOUND: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1891 | case NMERR_CONFERENCE_NOT_FOUND_2: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1892 | return _("Conference not found"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1893 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1894 | case NMERR_CONFERENCE_NOT_INSTANTIATED: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1895 | return _("Conference does not exist"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1896 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1897 | case NMERR_DUPLICATE_FOLDER: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1898 | case NMERR_FOLDER_EXISTS: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1899 | return _("A folder with that name already exists"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1900 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1901 | case NMERR_NOT_SUPPORTED: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1902 | return _("Not supported"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1903 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1904 | case NMERR_PASSWORD_EXPIRED: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1905 | case NMERR_PASSWORD_EXPIRED_2: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1906 | return _("Password has expired"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1907 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1908 | case NMERR_PASSWORD_INVALID: |
|
15062
78e3c1c8c4f4
[gaim-migrate @ 17779]
Richard Laager <rlaager@pidgin.im>
parents:
14986
diff
changeset
|
1909 | return _("Incorrect password"); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1910 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1911 | case NMERR_USER_NOT_FOUND: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1912 | return _("User not found"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1913 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1914 | case NMERR_USER_DISABLED: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1915 | return _("Account has been disabled"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1916 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1917 | case NMERR_DIRECTORY_FAILURE: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1918 | return _("The server could not access the directory"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1919 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1920 | case NMERR_ADMIN_LOCKED: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1921 | return _("Your system administrator has disabled this operation"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1922 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1923 | case NMERR_SERVER_BUSY: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1924 | return _("The server is unavailable; try again later"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1925 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1926 | case NMERR_DUPLICATE_CONTACT: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1927 | return _("Cannot add a contact to the same folder twice"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1928 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1929 | case NMERR_USER_NOT_ALLOWED: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1930 | return _("Cannot add yourself"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1931 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1932 | case NMERR_MASTER_ARCHIVE_MISSING: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1933 | return _("Master archive is misconfigured"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1934 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1935 | case NMERR_AUTHENTICATION_FAILED: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1936 | case NMERR_CREDENTIALS_MISSING: |
|
15062
78e3c1c8c4f4
[gaim-migrate @ 17779]
Richard Laager <rlaager@pidgin.im>
parents:
14986
diff
changeset
|
1937 | return _("Incorrect screen name or password"); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1938 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1939 | case NMERR_HOST_NOT_FOUND: |
|
15062
78e3c1c8c4f4
[gaim-migrate @ 17779]
Richard Laager <rlaager@pidgin.im>
parents:
14986
diff
changeset
|
1940 | return _("Could not recognize the host of the screen name you entered"); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1941 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1942 | case NMERR_ACCESS_DENIED: |
|
15062
78e3c1c8c4f4
[gaim-migrate @ 17779]
Richard Laager <rlaager@pidgin.im>
parents:
14986
diff
changeset
|
1943 | return _("Your account has been disabled because too many incorrect passwords were entered"); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1944 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1945 | case NMERR_DUPLICATE_PARTICIPANT: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1946 | return _("You cannot add the same person twice to a conversation"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1947 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1948 | case NMERR_TOO_MANY_CONTACTS: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1949 | case NMERR_TOO_MANY_FOLDERS: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1950 | return _("You have reached your limit for the number of contacts allowed"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1951 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1952 | case NMERR_OBJECT_NOT_FOUND: |
|
15062
78e3c1c8c4f4
[gaim-migrate @ 17779]
Richard Laager <rlaager@pidgin.im>
parents:
14986
diff
changeset
|
1953 | return _("You have entered an incorrect screen name"); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1954 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1955 | case NMERR_DIRECTORY_UPDATE: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1956 | return _("An error occurred while updating the directory"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1957 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1958 | case NMERR_SERVER_PROTOCOL: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1959 | return _("Incompatible protocol version"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1960 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1961 | case NMERR_USER_BLOCKED: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1962 | return _("The user has blocked you"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1963 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1964 | case NMERR_EVAL_CONNECTION_LIMIT: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1965 | return _("This evaluation version does not allow more than ten users to log in at one time"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1966 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1967 | case NMERR_CONVERSATION_INVITE: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1968 | return _("The user is either offline or you are blocked"); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1969 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1970 | default: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1971 | unknown_msg = g_strdup_printf (_("Unknown error: 0x%X"), err); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1972 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1973 | return unknown_msg; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1974 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1975 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1976 | |
| 8675 | 1977 | static void |
| 1978 | _update_contact_list(NMUser * user, NMField * fields) | |
| 1979 | { | |
| 1980 | NMField *list, *cursor, *locate; | |
| 1981 | gint objid1; | |
| 1982 | NMContact *contact; | |
| 1983 | NMFolder *folder; | |
| 8782 | 1984 | gpointer item; |
| 8675 | 1985 | |
| 1986 | if (user == NULL || fields == NULL) | |
| 1987 | return; | |
| 1988 | ||
| 1989 | /* Is it wrapped in a RESULTS array? */ | |
| 1990 | if (strcmp(fields->tag, NM_A_FA_RESULTS) == 0) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1991 | list = (NMField *) fields->ptr_value; |
| 8675 | 1992 | } else { |
| 1993 | list = fields; | |
| 1994 | } | |
| 1995 | ||
| 1996 | /* Update the cached contact list */ | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
1997 | cursor = (NMField *) list->ptr_value; |
| 8675 | 1998 | while (cursor->tag != NULL) { |
| 1999 | if ((g_ascii_strcasecmp(cursor->tag, NM_A_FA_CONTACT) == 0) || | |
| 2000 | (g_ascii_strcasecmp(cursor->tag, NM_A_FA_FOLDER) == 0)) { | |
| 2001 | ||
| 2002 | locate = | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
2003 | nm_locate_field(NM_A_SZ_OBJECT_ID, (NMField *) cursor->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
2004 | if (locate != NULL && locate->ptr_value != 0) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
2005 | objid1 = atoi((char *) locate->ptr_value); |
| 8782 | 2006 | item = |
| 8675 | 2007 | nm_folder_find_item_by_object_id(user->root_folder, objid1); |
| 2008 | if (item != NULL) { | |
| 2009 | if (cursor->method == NMFIELD_METHOD_ADD) { | |
| 2010 | if (g_ascii_strcasecmp(cursor->tag, NM_A_FA_CONTACT) == 0) { | |
| 2011 | contact = (NMContact *) item; | |
| 2012 | nm_contact_update_list_properties(contact, cursor); | |
| 2013 | } else if (g_ascii_strcasecmp(cursor->tag, NM_A_FA_FOLDER) | |
| 2014 | == 0) { | |
| 2015 | folder = (NMFolder *) item; | |
| 2016 | nm_folder_update_list_properties(folder, cursor); | |
| 2017 | } | |
| 2018 | } else if (cursor->method == NMFIELD_METHOD_DELETE) { | |
| 2019 | if (g_ascii_strcasecmp(cursor->tag, NM_A_FA_CONTACT) == 0) { | |
| 2020 | contact = (NMContact *) item; | |
| 2021 | folder = | |
| 2022 | nm_find_folder_by_id(user, | |
| 2023 | nm_contact_get_parent_id | |
| 2024 | (contact)); | |
| 2025 | if (folder) { | |
| 2026 | nm_folder_remove_contact(folder, contact); | |
| 2027 | } | |
| 2028 | } else if (g_ascii_strcasecmp(cursor->tag, NM_A_FA_FOLDER) | |
| 2029 | == 0) { | |
| 2030 | /* TODO: write nm_folder_remove_folder */ | |
| 2031 | /* ignoring for now, should not be a big deal */ | |
| 2032 | /* folder = (NMFolder *) item;*/ | |
| 2033 | /* nm_folder_remove_folder(user->root_folder, folder);*/ | |
| 2034 | } | |
| 2035 | } | |
| 2036 | } else { | |
| 2037 | ||
| 2038 | if (cursor->method == NMFIELD_METHOD_ADD) { | |
| 2039 | ||
| 2040 | /* Not found, so we need to add it */ | |
| 2041 | if (g_ascii_strcasecmp(cursor->tag, NM_A_FA_CONTACT) == 0) { | |
| 2042 | ||
| 2043 | const char *dn = NULL; | |
| 2044 | ||
| 2045 | locate = | |
| 2046 | nm_locate_field(NM_A_SZ_DN, | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
2047 | (NMField *) cursor->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
2048 | if (locate != NULL && locate->ptr_value != 0) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8874
diff
changeset
|
2049 | dn = (const char *) locate->ptr_value; |
| 8675 | 2050 | if (dn != NULL) { |
| 2051 | contact = | |
| 2052 | nm_create_contact_from_fields(cursor); | |
| 2053 | if (contact) { | |
| 2054 | nm_folder_add_contact_to_list(user-> | |
| 2055 | root_folder, | |
| 2056 | contact); | |
| 2057 | nm_release_contact(contact); | |
| 2058 | } | |
| 2059 | } | |
| 2060 | } | |
| 2061 | } else if (g_ascii_strcasecmp(cursor->tag, NM_A_FA_FOLDER) | |
| 2062 | == 0) { | |
| 2063 | folder = nm_create_folder_from_fields(cursor); | |
| 2064 | nm_folder_add_folder_to_list(user->root_folder, | |
| 2065 | folder); | |
| 2066 | nm_release_folder(folder); | |
| 2067 | } | |
| 2068 | } | |
| 2069 | } | |
| 2070 | } | |
| 2071 | } | |
| 2072 | cursor++; | |
| 2073 | } | |
| 2074 | } | |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2075 | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2076 | static char * |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2077 | nm_rtfize_text(char *text) |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2078 | { |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2079 | GString *gstr = NULL; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2080 | unsigned char *pch; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2081 | char *uni_str = NULL, *rtf = NULL; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2082 | int bytes; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2083 | gunichar uc; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2084 | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2085 | gstr = g_string_sized_new(strlen(text)*2); |
|
11318
13fa1d5134f3
[gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9360
diff
changeset
|
2086 | pch = (unsigned char *)text; |
|
9268
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2087 | while (*pch) { |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2088 | if ((*pch) <= 0x7F) { |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2089 | switch (*pch) { |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2090 | case '{': |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2091 | case '}': |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2092 | case '\\': |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2093 | gstr = g_string_append_c(gstr, '\\'); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2094 | gstr = g_string_append_c(gstr, *pch); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2095 | break; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2096 | case '\n': |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2097 | gstr = g_string_append(gstr, "\\par "); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2098 | break; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2099 | default: |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2100 | gstr = g_string_append_c(gstr, *pch); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2101 | break; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2102 | } |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2103 | pch++; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2104 | } else { |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2105 | /* convert the utf-8 character to ucs-4 for rtf encoding */ |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2106 | if(*pch <= 0xDF) { |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2107 | uc = ((((gunichar)pch[0]) & 0x001F) << 6) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2108 | (((gunichar)pch[1]) & 0x003F); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2109 | bytes = 2; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2110 | } else if(*pch <= 0xEF) { |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2111 | uc = ((((gunichar)pch[0]) & 0x000F) << 12) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2112 | ((((gunichar)pch[1]) & 0x003F) << 6) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2113 | (((gunichar)pch[2]) & 0x003F); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2114 | bytes = 3; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2115 | } else if (*pch <= 0xF7) { |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2116 | uc = ((((gunichar)pch[0]) & 0x0007) << 18) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2117 | ((((gunichar)pch[1]) & 0x003F) << 12) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2118 | ((((gunichar)pch[2]) & 0x003F) << 6) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2119 | (((gunichar)pch[3]) & 0x003F); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2120 | bytes = 4; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2121 | } else if (*pch <= 0xFB) { |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2122 | uc = ((((gunichar)pch[0]) & 0x0003) << 24) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2123 | ((((gunichar)pch[1]) & 0x003F) << 18) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2124 | ((((gunichar)pch[2]) & 0x003F) << 12) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2125 | ((((gunichar)pch[3]) & 0x003F) << 6) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2126 | (((gunichar)pch[4]) & 0x003F); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2127 | bytes = 5; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2128 | } else if (*pch <= 0xFD) { |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2129 | uc = ((((gunichar)pch[0]) & 0x0001) << 30) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2130 | ((((gunichar)pch[1]) & 0x003F) << 24) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2131 | ((((gunichar)pch[2]) & 0x003F) << 18) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2132 | ((((gunichar)pch[3]) & 0x003F) << 12) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2133 | ((((gunichar)pch[4]) & 0x003F) << 6) | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2134 | (((gunichar)pch[5]) & 0x003F); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2135 | bytes = 6; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2136 | } else { |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2137 | /* should never happen ... bogus utf-8! */ |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2138 | gaim_debug_info("novell", "bogus utf-8 lead byte: 0x%X\n", pch[0]); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2139 | uc = 0x003F; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2140 | bytes = 1; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2141 | } |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2142 | uni_str = g_strdup_printf("\\u%d?", uc); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2143 | gaim_debug_info("novell", "unicode escaped char %s\n", uni_str); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2144 | gstr = g_string_append(gstr, uni_str); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2145 | pch += bytes; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2146 | g_free(uni_str); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2147 | } |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2148 | } |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2149 | |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2150 | rtf = g_strdup_printf(RTF_TEMPLATE, gstr->str); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2151 | g_string_free(gstr, TRUE); |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2152 | return rtf; |
|
196cbf2cae4c
[gaim-migrate @ 10069]
Mike Stoddard <mistoddard@novell.com>
parents:
8933
diff
changeset
|
2153 | } |