Mercurial > pidgin.yaz
comparison src/protocols/novell/nmuser.h @ 8675:9ee2542d1104
[gaim-migrate @ 9428]
A GroupWise plugin from Novell.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Sat, 17 Apr 2004 13:55:28 +0000 |
parents | |
children | 046dd8ef2920 |
comparison
equal
deleted
inserted
replaced
8674:8c7da2e36136 | 8675:9ee2542d1104 |
---|---|
1 /* | |
2 * nmuser.h | |
3 * | |
4 * Copyright © 2004 Unpublished Work of Novell, Inc. All Rights Reserved. | |
5 * | |
6 * THIS WORK IS AN UNPUBLISHED WORK OF NOVELL, INC. NO PART OF THIS WORK MAY BE | |
7 * USED, PRACTICED, PERFORMED, COPIED, DISTRIBUTED, REVISED, MODIFIED, | |
8 * TRANSLATED, ABRIDGED, CONDENSED, EXPANDED, COLLECTED, COMPILED, LINKED, | |
9 * RECAST, TRANSFORMED OR ADAPTED WITHOUT THE PRIOR WRITTEN CONSENT OF NOVELL, | |
10 * INC. ANY USE OR EXPLOITATION OF THIS WORK WITHOUT AUTHORIZATION COULD SUBJECT | |
11 * THE PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY. | |
12 * | |
13 * AS BETWEEN [GAIM] AND NOVELL, NOVELL GRANTS [GAIM] THE RIGHT TO REPUBLISH | |
14 * THIS WORK UNDER THE GPL (GNU GENERAL PUBLIC LICENSE) WITH ALL RIGHTS AND | |
15 * LICENSES THEREUNDER. IF YOU HAVE RECEIVED THIS WORK DIRECTLY OR INDIRECTLY | |
16 * FROM [GAIM] AS PART OF SUCH A REPUBLICATION, YOU HAVE ALL RIGHTS AND LICENSES | |
17 * GRANTED BY [GAIM] UNDER THE GPL. IN CONNECTION WITH SUCH A REPUBLICATION, IF | |
18 * ANYTHING IN THIS NOTICE CONFLICTS WITH THE TERMS OF THE GPL, SUCH TERMS | |
19 * PREVAIL. | |
20 * | |
21 */ | |
22 | |
23 #ifndef __NM_USER_H__ | |
24 #define __NM_USER_H__ | |
25 | |
26 #include <glib.h> | |
27 #include <stdio.h> | |
28 #include <stdlib.h> | |
29 | |
30 typedef guint32 NMERR_T; | |
31 typedef int NMSTATUS_T; | |
32 | |
33 typedef struct _NMUser NMUser; | |
34 | |
35 typedef enum | |
36 { | |
37 NMREQUEST_TYPE_LOGIN = 0, | |
38 NMREQUEST_TYPE_LOGOUT, | |
39 NMREQUEST_TYPE_SETSTATUS, | |
40 NMREQUEST_TYPE_GETDETAILS, | |
41 NMREQUEST_TYPE_CREATECONF, | |
42 NMREQUEST_TYPE_SENDMESSAGE, | |
43 NMREQUEST_TYPE_JOINCONF, | |
44 NMREQUEST_TYPE_LEAVECONF, | |
45 NMREQUEST_TYPE_REJECTCONF, | |
46 NMREQUEST_TYPE_SENDTYPING, | |
47 NMREQUEST_TYPE_CREATECONTACT, | |
48 NMREQUEST_TYPE_DELETECONTACT | |
49 | |
50 } NMRequestType; | |
51 | |
52 #include "debug.h" | |
53 #include "nmmessage.h" | |
54 #include "nmconference.h" | |
55 #include "nmcontact.h" | |
56 #include "nmuserrecord.h" | |
57 #include "nmfield.h" | |
58 #include "nmevent.h" | |
59 | |
60 /* Callback typedefs */ | |
61 typedef void (*nm_response_cb) (NMUser * user, NMERR_T ret_code, | |
62 gpointer resp_data, gpointer user_data); | |
63 | |
64 typedef void (*nm_event_cb) (NMUser * user, NMEvent * event); | |
65 | |
66 #include "nmrequest.h" | |
67 #include "nmconn.h" | |
68 | |
69 /* This represents user that we are currently logged in as */ | |
70 struct _NMUser | |
71 { | |
72 | |
73 char *name; | |
74 | |
75 NMSTATUS_T status; | |
76 | |
77 /* A copy of the login response fields */ | |
78 NMField *fields; | |
79 | |
80 /* The user record for this user */ | |
81 NMUserRecord *user_record; | |
82 | |
83 /* Our connection information */ | |
84 NMConn *conn; | |
85 | |
86 /* Our public IP address */ | |
87 char *address; | |
88 | |
89 /* This is the contact list */ | |
90 NMFolder *root_folder; | |
91 | |
92 /* All contacts that we know about hashed by dn */ | |
93 GHashTable *contacts; | |
94 | |
95 /* All user records hashed by dn */ | |
96 GHashTable *user_records; | |
97 | |
98 /* DN lookup */ | |
99 GHashTable *display_id_to_dn; | |
100 | |
101 /* One on one conversations indexed by recipient's dn */ | |
102 GSList *conferences; | |
103 | |
104 guint32 conference_count; | |
105 | |
106 /* Called when we receive an event */ | |
107 nm_event_cb evt_callback; | |
108 | |
109 /* Pending requests. If we need to go to the server to more info | |
110 * before processing a request we will queue it up and process when | |
111 * we get a response | |
112 */ | |
113 GSList *pending_requests; | |
114 | |
115 /* Pending events. Same as above except for events. */ | |
116 GSList *pending_events; | |
117 | |
118 /* Generic pointer to data needed by the client | |
119 * using the API | |
120 */ | |
121 gpointer client_data; | |
122 | |
123 }; | |
124 | |
125 | |
126 #define NM_STATUS_UNKNOWN 0 | |
127 #define NM_STATUS_OFFLINE 1 | |
128 #define NM_STATUS_AVAILABLE 2 | |
129 #define NM_STATUS_BUSY 3 | |
130 #define NM_STATUS_AWAY 4 | |
131 #define NM_STATUS_AWAY_IDLE 5 | |
132 #define NM_STATUS_INVALID 6 | |
133 | |
134 #define NMERR_BASE 0x2000L | |
135 #define NM_OK 0L | |
136 #define NMERR_BAD_PARM (NMERR_BASE + 0x0001) | |
137 #define NMERR_TCP_WRITE (NMERR_BASE + 0x0002) | |
138 #define NMERR_TCP_READ (NMERR_BASE + 0x0003) | |
139 #define NMERR_PROTOCOL (NMERR_BASE + 0x0004) | |
140 #define NMERR_SSL_REDIRECT (NMERR_BASE + 0x0005) | |
141 #define NMERR_CONFERENCE_NOT_FOUND (NMERR_BASE + 0x0006) | |
142 #define NMERR_CONFERENCE_NOT_INSTANTIATED (NMERR_BASE + 0x0007) | |
143 #define NMERR_FOLDER_EXISTS (NMERR_BASE + 0x0008) | |
144 | |
145 | |
146 /** | |
147 * Initialize the user that we are going to login to the system as. | |
148 * | |
149 * @param name The userid of the user | |
150 * @param server IP Address of server | |
151 * @param port Port to connect to on the server | |
152 * @param data Client data to associate with the user | |
153 * @param event_callback Function to call when we recieve an event | |
154 * | |
155 * @return The initialized user object. Must be freed by calling | |
156 * nm_deinitialize_user | |
157 */ | |
158 NMUser *nm_initialize_user(const char *name, const char *server, int port, | |
159 gpointer data, nm_event_cb event_callback); | |
160 | |
161 | |
162 /** | |
163 * Free up resources associated with the user object. | |
164 * | |
165 * @param user The user to deinitialize | |
166 */ | |
167 void nm_deinitialize_user(NMUser * user); | |
168 | |
169 /** | |
170 * Send a login request to the server. | |
171 * | |
172 * The response data sent to the callback will be NULL. | |
173 * | |
174 * @param user The User to login -- must be initialized | |
175 * @param pwd The password of the user | |
176 * @param my_addr The address of the client machine | |
177 * @param user_agent String describing the client (eg. "Gaim/0.76 (Linux; 2.4.20)") | |
178 * @param callback Function to call when we get the response from the server | |
179 * @param data User defined data to be passed to the callback function | |
180 * | |
181 * | |
182 * @return NM_OK if login is sent successfully, error otherwise. | |
183 */ | |
184 NMERR_T nm_send_login(NMUser * user, const char *pwd, const char *my_addr, | |
185 const char *user_agent, nm_response_cb callback, | |
186 gpointer data); | |
187 | |
188 /** | |
189 * Send a set status request to the server. | |
190 * | |
191 * The response data sent to the callback will be NULL. | |
192 * | |
193 * @param user The logged in User | |
194 * @param dn The DN of the user (if known, or NULL if not known) | |
195 * @param address IP Address of server | |
196 * @param callback Function to call when we get the response from the server | |
197 * | |
198 * | |
199 * @return NM_OK if successfully sent, error otherwise | |
200 */ | |
201 NMERR_T nm_send_set_status(NMUser * user, int status, const char *text, | |
202 const char *auto_resp, nm_response_cb callback, | |
203 gpointer data); | |
204 | |
205 /** | |
206 * Send a create conference to the server. | |
207 * | |
208 * The response data sent to the callback will be NULL. | |
209 * | |
210 * @param user The logged in User | |
211 * @param conference Conference to create | |
212 * @param callback Function to call when we get the response from the server | |
213 * @param data User defined data to be passed to the callback function | |
214 * | |
215 * @return NM_OK if successfully sent, error otherwise | |
216 */ | |
217 NMERR_T nm_send_create_conference(NMUser * user, NMConference * conference, | |
218 nm_response_cb callback, gpointer data); | |
219 | |
220 /** | |
221 * Tell server we have left the conference. | |
222 * | |
223 * The response data sent to the callback will be NULL. | |
224 * | |
225 * @param user The logged in User | |
226 * @param conference Conference the user is leaving | |
227 * @param callback Function to call when we get the response from the server | |
228 * @param data User defined data to be passed to the callback function | |
229 * | |
230 * @return NM_OK if successfully sent, error otherwise | |
231 */ | |
232 NMERR_T nm_send_leave_conference(NMUser * user, NMConference * conference, | |
233 nm_response_cb callback, gpointer data); | |
234 | |
235 /** | |
236 * Send a join conference request to the server. | |
237 * | |
238 * The response data sent to the callback will be NULL. | |
239 * | |
240 * @param user The logged in User | |
241 * @param conference Conference the user is joining | |
242 * @param callback Function to call when we get the response from the server | |
243 * @param data User defined data to be passed to the callback function | |
244 * | |
245 * | |
246 * @return NM_OK if successfully sent, error otherwise | |
247 */ | |
248 NMERR_T nm_send_join_conference(NMUser * user, NMConference * conference, | |
249 nm_response_cb callback, gpointer data); | |
250 | |
251 /** | |
252 * Send a conference reject request to the server. | |
253 * | |
254 * The response data sent to the callback will be NULL. | |
255 * | |
256 * @param user The logged in User | |
257 * @param conference Conference the user is rejecting | |
258 * @param callback Function to call when we get the response from the server | |
259 * @param data User defined data to be passed to the callback function | |
260 * | |
261 * | |
262 * @return NM_OK if successfully sent, error otherwise | |
263 */ | |
264 NMERR_T nm_send_reject_conference(NMUser * user, NMConference * conference, | |
265 nm_response_cb callback, gpointer data); | |
266 | |
267 /** | |
268 * Get details for a user from the server. | |
269 * | |
270 * The response data sent to the callback will be an NMUserRecord which should be | |
271 * freed with nm_release_user_record | |
272 * | |
273 * @param user The logged in User | |
274 * @param name Userid or DN of the user to look up | |
275 * @param callback Function to call when we get the response from the server | |
276 * @param data User defined data to be passed to the callback function | |
277 * | |
278 * @return NM_OK if successfully sent, error otherwise | |
279 */ | |
280 NMERR_T nm_send_get_details(NMUser * user, const char *name, | |
281 nm_response_cb callback, gpointer data); | |
282 | |
283 /** | |
284 * Get details for multiple users from the server. | |
285 * | |
286 * The response data to the callback will be a list of NMUserRecord, which should be | |
287 * freed (each user record should be released with nm_release_user_record and the | |
288 * list should be freed) | |
289 * | |
290 * @param user The logged in User | |
291 * @param name Userid or DN of the user to look up | |
292 * @param callback Function to call when we get the response from the server | |
293 * @param data User defined data to be passed to the callback function | |
294 * | |
295 * @return NM_OK if successfully sent, error otherwise | |
296 */ | |
297 NMERR_T nm_send_multiple_get_details(NMUser *user, GSList *names, | |
298 nm_response_cb callback, gpointer data); | |
299 | |
300 /** | |
301 * Send a message. | |
302 * | |
303 * The response data sent to the callback will be NULL. | |
304 * | |
305 * @param user The logged in User | |
306 * @param message The message to send. | |
307 * @param callback Function to call when we get the response from the server | |
308 * | |
309 * @return NM_OK if successfully sent, error otherwise | |
310 */ | |
311 NMERR_T nm_send_message(NMUser * user, NMMessage * message, | |
312 nm_response_cb callback); | |
313 | |
314 /** | |
315 * Sends a typing event to the server. | |
316 * | |
317 * The response data sent to the callback will be NULL. | |
318 * | |
319 * @param user The logged in User | |
320 * @param conf The conference that corresponds to the typing event | |
321 * @param typing TRUE if the user is typing | |
322 * FALSE if the user has stopped typing | |
323 * @param callback Function to call when we get the response from the server | |
324 * | |
325 * @return NM_OK if successfully sent, error otherwise | |
326 */ | |
327 NMERR_T nm_send_typing(NMUser * user, NMConference * conf, | |
328 gboolean typing, nm_response_cb callback); | |
329 | |
330 /** | |
331 * Send a create contact request to the server. | |
332 * | |
333 * The given folder should already exist on the server. If not, | |
334 * the call will fail. | |
335 * | |
336 * The response data sent to the callback will be a NMContact which should | |
337 * be released with nm_release_contact | |
338 * | |
339 * @param user The logged in User | |
340 * @param folder The folder that the contact should be created in | |
341 * @param contact The contact to add | |
342 * @param callback Function to call when we get the response from the server | |
343 * @param data User defined data | |
344 * | |
345 * @return NM_OK if successfully sent, error otherwise | |
346 */ | |
347 NMERR_T nm_send_create_contact(NMUser * user, NMFolder * folder, | |
348 NMContact * contact, nm_response_cb callback, | |
349 gpointer data); | |
350 | |
351 /** | |
352 * Send a remove contact request to the server. | |
353 * | |
354 * The response data sent to the callback will be NULL. | |
355 * | |
356 * @param user The logged in User | |
357 * @param folder The folder to remove contact from | |
358 * @param contact The contact to remove | |
359 * @param callback Function to call when we get the response from the server | |
360 * @param data User defined data | |
361 * | |
362 * @return NM_OK if successfully sent, error otherwise | |
363 */ | |
364 NMERR_T nm_send_remove_contact(NMUser * user, NMFolder * folder, | |
365 NMContact * contact, nm_response_cb callback, | |
366 gpointer data); | |
367 | |
368 /** | |
369 * Send a create folder request to the server. | |
370 * | |
371 * The response data sent to the callback will be a NMFolder which should be | |
372 * released with nm_release_folder | |
373 * | |
374 * @param user The logged in User | |
375 * @param name The name of the folder to create | |
376 * @param callback Function to call when we get the response from the server | |
377 * @param data User defined data | |
378 * | |
379 * @return NM_OK if successfully sent, error otherwise | |
380 */ | |
381 NMERR_T nm_send_create_folder(NMUser * user, const char *name, | |
382 nm_response_cb callback, gpointer data); | |
383 | |
384 /** | |
385 * Send a delete folder request to the server. | |
386 * | |
387 * The response data sent to the callback will be NULL. | |
388 * | |
389 * @param user The logged in User | |
390 * @param folder The name of the folder to remove | |
391 * @param callback Function to call when we get the response from the server | |
392 * @param data User defined data | |
393 * | |
394 * @return NM_OK if successfully sent, error otherwise | |
395 */ | |
396 NMERR_T nm_send_remove_folder(NMUser * user, NMFolder * folder, | |
397 nm_response_cb callback, gpointer data); | |
398 | |
399 /** | |
400 * Send a rename contact request to the server. | |
401 * | |
402 * The response data sent to the callback will be NULL. | |
403 * | |
404 * @param user The logged in User | |
405 * @param contact The contact to rename | |
406 * @param new_name The new display name for the contact | |
407 * @param callback Function to call when we get the response from the server | |
408 * @param data User defined data | |
409 * | |
410 * @return NM_OK if successfully sent, error otherwise | |
411 */ | |
412 NMERR_T nm_send_rename_contact(NMUser * user, NMContact * contact, | |
413 const char *new_name, nm_response_cb callback, | |
414 gpointer data); | |
415 | |
416 /** | |
417 * Send a rename folder request to the server. | |
418 * | |
419 * The response data sent to the callback will be NULL. | |
420 * | |
421 * @param user The logged in User | |
422 * @param folder The folder to rename | |
423 * @param new_name The new name of the folder | |
424 * @param callback Function to call when we get the response from the server | |
425 * @param data User defined data | |
426 * | |
427 * @return NM_OK if successfully sent, error otherwise | |
428 */ | |
429 NMERR_T nm_send_rename_folder(NMUser * user, NMFolder * folder, | |
430 const char *new_name, nm_response_cb callback, | |
431 gpointer data); | |
432 | |
433 /** | |
434 * Send a move contact request to the server. | |
435 * | |
436 * The response data sent to the callback will be NULL. | |
437 * | |
438 * @param user The logged in User | |
439 * @param contact The contact to move | |
440 * @param folder The folder to move the contact to | |
441 * @param callback Function to call when we get the response from the server | |
442 * @param data User defined data | |
443 * | |
444 * @return NM_OK if successfully sent, error otherwise | |
445 */ | |
446 NMERR_T nm_send_move_contact(NMUser * user, NMContact * contact, | |
447 NMFolder * folder, nm_response_cb callback, | |
448 gpointer data); | |
449 | |
450 /** | |
451 * Send a get status request to the server. | |
452 * | |
453 * The response data sent to the callback will be a NMUserRecord. | |
454 * | |
455 * @param user The logged in User | |
456 * @param contact The contact to move | |
457 * @param folder The folder to move the contact to | |
458 * @param callback Function to call when we get the response from the server | |
459 * @param data User defined data | |
460 * | |
461 * @return NM_OK if successfully sent, error otherwise | |
462 */ | |
463 NMERR_T nm_send_get_status(NMUser * user, NMUserRecord * user_record, | |
464 nm_response_cb callback, gpointer data); | |
465 | |
466 /** | |
467 * Reads a response/event from the server and processes it. | |
468 * | |
469 * @param user The logged in User | |
470 */ | |
471 NMERR_T nm_process_new_data(NMUser * user); | |
472 | |
473 /** | |
474 * Return the root folder of the contact list | |
475 * | |
476 * @param user The logged in User | |
477 * | |
478 * @return Root folder | |
479 */ | |
480 NMFolder *nm_get_root_folder(NMUser * user); | |
481 | |
482 /** | |
483 * Create the contact list based on the login fields | |
484 * | |
485 * @param user The logged in User | |
486 * | |
487 */ | |
488 NMERR_T nm_create_contact_list(NMUser * user); | |
489 | |
490 void nm_destroy_contact_list(NMUser * user); | |
491 | |
492 void nm_user_add_contact(NMUser * user, NMContact * contact); | |
493 | |
494 void nm_user_add_user_record(NMUser * user, NMUserRecord * user_record); | |
495 | |
496 NMContact *nm_find_contact(NMUser * user, const char *dn); | |
497 | |
498 GList *nm_find_contacts(NMUser * user, const char *dn); | |
499 | |
500 NMUserRecord *nm_find_user_record(NMUser * user, const char *dn); | |
501 | |
502 NMFolder *nm_find_folder(NMUser * user, const char *name); | |
503 | |
504 NMFolder *nm_find_folder_by_id(NMUser * user, int object_id); | |
505 | |
506 NMConference *nm_find_conversation(NMUser * user, const char *who); | |
507 | |
508 void nm_conference_list_add(NMUser * user, NMConference * conf); | |
509 | |
510 void nm_conference_list_remove(NMUser * user, NMConference * conf); | |
511 | |
512 void nm_conference_list_free(NMUser * user); | |
513 | |
514 NMConference *nm_conference_list_find(NMUser * user, const char *guid); | |
515 | |
516 const char *nm_lookup_dn(NMUser * user, const char *display_id); | |
517 | |
518 nm_event_cb nm_user_get_event_callback(NMUser * user); | |
519 | |
520 NMConn *nm_user_get_conn(NMUser * user); | |
521 | |
522 /** Some utility functions **/ | |
523 | |
524 /** | |
525 * Check to see if the conference GUIDs are equivalent. | |
526 * | |
527 * @param guid1 First guid to compare | |
528 * @param guid2 Second guid to compare | |
529 * | |
530 * @return TRUE if conference GUIDs are equivalent, FALSE otherwise. | |
531 * | |
532 */ | |
533 gboolean nm_are_guids_equal(const char *guid1, const char *guid2); | |
534 | |
535 | |
536 /** | |
537 * Case insensitive compare for utf8 strings | |
538 * | |
539 * @param guid1 First string to compare | |
540 * @param guid2 Second string to compare | |
541 * | |
542 * @return -1 if str1 < str2, 0 if str1 = str2, 1 if str1 > str2 | |
543 * | |
544 */ | |
545 gint nm_utf8_strcasecmp(gconstpointer str1, gconstpointer str2); | |
546 | |
547 /** | |
548 * Compare UTF8 strings for equality only (case insensitive) | |
549 * | |
550 * @param guid1 First string to compare | |
551 * @param guid2 Second string to compare | |
552 * | |
553 * @return TRUE if strings are equal, FALSE otherwise | |
554 * | |
555 */ | |
556 gboolean nm_utf8_str_equal(gconstpointer str1, gconstpointer str2); | |
557 | |
558 /** | |
559 * Convert a fully typed LDAP DN to dotted, untype notation | |
560 * e.g. cn=mike,o=novell -> mike.novell | |
561 * | |
562 * @param typed Fully typed dn | |
563 * | |
564 * @return Dotted equivalent of typed (must be freed). | |
565 * | |
566 */ | |
567 char *nm_typed_to_dotted(const char *typed); | |
568 | |
569 #endif |