ccad068e51b348fdc36711576cac6d4e0c7f2f28
[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 #include "asterisk/linkedlists.h"
25
26 enum aji_state {
27         AJI_DISCONNECTED = 0,
28         AJI_CONNECTING,
29         AJI_CONNECTED
30 };
31
32 enum {
33         AJI_AUTOPRUNE = (1 << 0),
34         AJI_AUTOREGISTER = (1 << 1)
35 };
36
37 enum aji_btype {
38         AJI_USER=0,
39         AJI_TRANS=1,
40         AJI_UTRANS=2
41 };
42
43 struct aji_version {
44         char version[50];
45         int jingle;
46         struct aji_capabilities *parent;
47         struct aji_version *next;
48 };
49
50 struct aji_capabilities {
51         char node[200];
52         struct aji_version *versions;
53         struct aji_capabilities *next;
54 };
55
56 struct aji_resource {
57         int status;
58         char resource[80];
59         char *description;
60         struct aji_version *cap;
61         int priority;
62         struct aji_resource *next;
63 };
64
65 struct aji_message {
66         char *from;
67         char *message;
68         char id[25];
69         time_t arrived;
70         AST_LIST_ENTRY(aji_message) list;
71 };
72
73 struct aji_buddy {
74         ASTOBJ_COMPONENTS(struct aji_buddy);
75         char user[160];
76         char host[160];
77         char pass[160]; /*For Transports*/
78         char server[160]; /*For Transports */
79         char channel[160];
80         struct aji_resource *resources;
81         enum aji_btype btype;
82         unsigned int flags;
83 };
84
85 struct aji_buddy_container {
86         ASTOBJ_CONTAINER_COMPONENTS(struct aji_buddy);
87 };
88
89 struct aji_transport_container {
90         ASTOBJ_CONTAINER_COMPONENTS(struct aji_transport);
91 };
92
93 struct aji_client {
94         ASTOBJ_COMPONENTS(struct aji_client);
95         char password[160];
96         char user[160];
97         char serverhost[160];
98         char context[100];
99         char statusmessage[256];
100         char sid[10]; /* Session ID */
101         char mid[6]; /* Message ID */
102         iksid *jid;
103         iksparser *p;
104         iksfilter *f;
105         ikstack *stack;
106         enum aji_state state;
107         int port;
108         int debug;
109         int usetls;
110         int forcessl;
111         int usesasl;
112         int keepalive;
113         int allowguest;
114         int timeout;
115         int message_timeout;
116         int authorized;
117         unsigned int flags;
118         int component; /* 0 client,  1 component */
119         struct aji_buddy_container buddies;
120         AST_LIST_HEAD(messages,aji_message) messages;
121         void *jingle;
122         pthread_t thread;
123 };
124
125 struct aji_client_container{
126         ASTOBJ_CONTAINER_COMPONENTS(struct aji_client);
127 };
128
129 int ast_aji_send(struct aji_client *client, char *address, char *message);
130 int ast_aji_disconnect(struct aji_client *client);
131 int ast_aji_check_roster(void);
132 void ast_aji_increment_mid(char *mid);
133 int ast_aji_create_chat(struct aji_client *client,char *room, char *server, char *topic);
134 int ast_aji_invite_chat(struct aji_client *client, char *user, char *room, char *message);
135 int ast_aji_join_chat(struct aji_client *client,char *room);
136 struct aji_client *ast_aji_get_client(char *name);
137 struct aji_client_container *ast_aji_get_clients(void);
138
139 #endif