c67f324b5fff30da0e53c7e8ace42da825502750
[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_ALMOST,
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 enum aji_type {
44         AJI_COMPONENT,
45         AJI_CLIENT,
46 };
47
48 struct aji_version {
49         char version[50];
50         int jingle;
51         struct aji_capabilities *parent;
52         struct aji_version *next;
53 };
54
55 struct aji_capabilities {
56         char node[200];
57         struct aji_version *versions;
58         struct aji_capabilities *next;
59 };
60
61 struct aji_resource {
62         int status;
63         char resource[80];
64         char description[1000];
65         struct aji_version *cap;
66         int priority;
67         struct aji_resource *next;
68 };
69
70 struct aji_buddy {
71         ASTOBJ_COMPONENTS(struct aji_buddy);
72         char user[160];
73         char host[160];
74         char pass[160]; /*For Transports*/
75         char server[160]; /*For Transports */
76         char channel[160];
77         struct aji_resource *resources;
78         enum aji_btype btype;
79         unsigned int flags;
80 };
81
82 struct aji_buddy_container {
83         ASTOBJ_CONTAINER_COMPONENTS(struct aji_buddy);
84 };
85
86 struct aji_transport_container {
87         ASTOBJ_CONTAINER_COMPONENTS(struct aji_transport);
88 };
89
90 struct aji_client {
91         ASTOBJ_COMPONENTS(struct aji_client);
92         char password[160];
93         char user[160];
94         char serverhost[160];
95         char context[100];
96         char statusmessage[256];
97         char sid[10]; /* Session ID */
98         char mid[6]; /* Message ID */
99         iksid *jid;
100         iksparser *p;
101         iksfilter *f;
102         ikstack *stack;
103         enum aji_state state;
104         int port;
105         int debug;
106         int usetls;
107         int forcessl;
108         int usesasl;
109         int keepalive;
110         int allowguest;
111         int timeout;
112         int authorized;
113         unsigned int flags;
114         enum aji_type component;
115         struct aji_buddy_container buddies;
116         void *jingle;
117         pthread_t thread;
118 };
119
120 struct aji_client_container{
121         ASTOBJ_CONTAINER_COMPONENTS(struct aji_client);
122 };
123
124 int ast_aji_send(struct aji_client *client, char *address, char *message);
125 int ast_aji_disconnect(struct aji_client *client);
126 int ast_aji_check_roster(void);
127 void ast_aji_increment_mid(char *mid);
128 int ast_aji_create_chat(struct aji_client *client,char *room, char *server, char *topic);
129 int ast_aji_invite_chat(struct aji_client *client, char *user, char *room, char *message);
130 int ast_aji_join_chat(struct aji_client *client,char *room);
131 struct aji_client *ast_aji_get_client(char *name);
132 struct aji_client_container *ast_aji_get_clients(void);
133
134 #endif