e67c01bc3f3f48e323e5e0b48f4ec65619b0943c
[asterisk/asterisk.git] / include / asterisk / jabber.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 1999 - 2005, Digium, Inc.
5  *
6  * Matt O'Gorman <mogorman@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 #ifndef _ASTERISK_JABBER_H
20 #define _ASTERISK_JABBER_H
21
22 #include <iksemel.h>
23 #include "asterisk/astobj.h"
24
25 enum aji_state {
26         AJI_DISCONNECTED = 0,
27         AJI_CONNECTING,
28         AJI_CONNECTED
29 };
30
31 enum {
32         AJI_AUTOPRUNE = (1 << 0),
33         AJI_AUTOREGISTER = (1 << 1)
34 };
35
36 enum aji_btype {
37         AJI_USER=0,
38         AJI_TRANS=1,
39         AJI_UTRANS=2
40 };
41
42 enum aji_type {
43         AJI_COMPONENT,
44         AJI_CLIENT,
45 };
46
47 struct aji_version {
48         char version[50];
49         int jingle;
50         struct aji_capabilities *parent;
51         struct aji_version *next;
52 };
53
54 struct aji_capabilities {
55         char node[200];
56         struct aji_version *versions;
57         struct aji_capabilities *next;
58 };
59
60 struct aji_resource {
61         int status;
62         char resource[80];
63         char *description;
64         struct aji_version *cap;
65         int priority;
66         struct aji_resource *next;
67 };
68
69 struct aji_message {
70         char *from;
71         char *message;
72         char id[25];
73         time_t arrived;
74         struct aji_message *next;
75 };
76
77 struct aji_buddy {
78         ASTOBJ_COMPONENTS(struct aji_buddy);
79         char user[160];
80         char host[160];
81         char pass[160]; /*For Transports*/
82         char server[160]; /*For Transports */
83         char channel[160];
84         struct aji_resource *resources;
85         enum aji_btype btype;
86         unsigned int flags;
87 };
88
89 struct aji_buddy_container {
90         ASTOBJ_CONTAINER_COMPONENTS(struct aji_buddy);
91 };
92
93 struct aji_transport_container {
94         ASTOBJ_CONTAINER_COMPONENTS(struct aji_transport);
95 };
96
97 struct aji_client {
98         ASTOBJ_COMPONENTS(struct aji_client);
99         char password[160];
100         char user[160];
101         char serverhost[160];
102         char context[100];
103         char statusmessage[256];
104         char sid[10]; /* Session ID */
105         char mid[6]; /* Message ID */
106         iksid *jid;
107         iksparser *p;
108         iksfilter *f;
109         ikstack *stack;
110         enum aji_state state;
111         int port;
112         int debug;
113         int usetls;
114         int forcessl;
115         int usesasl;
116         int keepalive;
117         int allowguest;
118         int timeout;
119         int message_timeout;
120         int authorized;
121         unsigned int flags;
122         enum aji_type component;
123         struct aji_buddy_container buddies;
124         ast_mutex_t message_lock; 
125         struct aji_message *messages;
126         void *jingle;
127         pthread_t thread;
128 };
129
130 struct aji_client_container{
131         ASTOBJ_CONTAINER_COMPONENTS(struct aji_client);
132 };
133
134 int ast_aji_send(struct aji_client *client, char *address, char *message);
135 int ast_aji_disconnect(struct aji_client *client);
136 int ast_aji_check_roster(void);
137 void ast_aji_increment_mid(char *mid);
138 int ast_aji_create_chat(struct aji_client *client,char *room, char *server, char *topic);
139 int ast_aji_invite_chat(struct aji_client *client, char *user, char *room, char *message);
140 int ast_aji_join_chat(struct aji_client *client,char *room);
141 struct aji_client *ast_aji_get_client(char *name);
142 struct aji_client_container *ast_aji_get_clients(void);
143
144 #endif