Doxygen updates for AJI - The Asterisk Jabber API
[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 /*! \file
20  * \brief AJI - The Asterisk Jabber Interface
21  * \ref AJI_intro
22  * \ref res_jabber.c
23  * \author Matt O'Gorman <mogorman@digium.com>
24  *
25  * \page AJI_intro AJI - The Asterisk Jabber Interface
26  * 
27  * The Asterisk Jabber Interface, AJI, publishes an API for
28  * modules to use jabber communication. res_jabber.c implements
29  * a Jabber client and a component that can connect as a service
30  * to Jabber servers.
31  *
32  * See
33  * - res_jabber.c
34  * - jabber.h
35  * - chan_gtalk.c
36  *
37  */
38
39 #ifndef _ASTERISK_JABBER_H
40 #define _ASTERISK_JABBER_H
41
42 #include <iksemel.h>
43 #include "asterisk/astobj.h"
44 #include "asterisk/linkedlists.h"
45
46 enum aji_state {
47         AJI_DISCONNECTED = 0,
48         AJI_CONNECTING,
49         AJI_CONNECTED
50 };
51
52 enum {
53         AJI_AUTOPRUNE = (1 << 0),
54         AJI_AUTOREGISTER = (1 << 1)
55 };
56
57 enum aji_btype {
58         AJI_USER=0,
59         AJI_TRANS=1,
60         AJI_UTRANS=2
61 };
62
63 struct aji_version {
64         char version[50];
65         int jingle;
66         struct aji_capabilities *parent;
67         struct aji_version *next;
68 };
69
70 struct aji_capabilities {
71         char node[200];
72         struct aji_version *versions;
73         struct aji_capabilities *next;
74 };
75
76 struct aji_resource {
77         int status;
78         char resource[80];
79         char *description;
80         struct aji_version *cap;
81         int priority;
82         struct aji_resource *next;
83 };
84
85 struct aji_message {
86         char *from;
87         char *message;
88         char id[25];
89         time_t arrived;
90         AST_LIST_ENTRY(aji_message) list;
91 };
92
93 struct aji_buddy {
94         ASTOBJ_COMPONENTS(struct aji_buddy);
95         char channel[160];
96         struct aji_resource *resources;
97         enum aji_btype btype;
98         unsigned int flags;
99 };
100
101 struct aji_buddy_container {
102         ASTOBJ_CONTAINER_COMPONENTS(struct aji_buddy);
103 };
104
105 struct aji_transport_container {
106         ASTOBJ_CONTAINER_COMPONENTS(struct aji_transport);
107 };
108
109 struct aji_client {
110         ASTOBJ_COMPONENTS(struct aji_client);
111         char password[160];
112         char user[160];
113         char serverhost[160];
114         char context[100];
115         char statusmessage[256];
116         char sid[10]; /* Session ID */
117         char mid[6]; /* Message ID */
118         iksid *jid;
119         iksparser *p;
120         iksfilter *f;
121         ikstack *stack;
122         enum aji_state state;
123         int port;
124         int debug;
125         int usetls;
126         int forcessl;
127         int usesasl;
128         int keepalive;
129         int allowguest;
130         int timeout;
131         int message_timeout;
132         int authorized;
133         unsigned int flags;
134         int component; /* 0 client,  1 component */
135         struct aji_buddy_container buddies;
136         AST_LIST_HEAD(messages,aji_message) messages;
137         void *jingle;
138         pthread_t thread;
139 };
140
141 struct aji_client_container{
142         ASTOBJ_CONTAINER_COMPONENTS(struct aji_client);
143 };
144
145 /*! Send jabber message from connected client to jabber URI */
146 int ast_aji_send(struct aji_client *client, const char *address, const char *message);
147 /*! Disconnect jabber client */
148 int ast_aji_disconnect(struct aji_client *client);
149 int ast_aji_check_roster(void);
150 void ast_aji_increment_mid(char *mid);
151 /*! Open Chat session */
152 int ast_aji_create_chat(struct aji_client *client,char *room, char *server, char *topic);
153 /*! Invite to opened Chat session */
154 int ast_aji_invite_chat(struct aji_client *client, char *user, char *room, char *message);
155 /*! Join existing Chat session */
156 int ast_aji_join_chat(struct aji_client *client,char *room);
157 struct aji_client *ast_aji_get_client(const char *name);
158 struct aji_client_container *ast_aji_get_clients(void);
159
160 #endif