AJI - The Asterisk Jabber Interface. More...
#include <openssl/ssl.h>#include <openssl/err.h>#include <iksemel.h>#include "asterisk/astobj.h"#include "asterisk/linkedlists.h"

Go to the source code of this file.
Data Structures | |
| struct | aji_buddy |
| struct | aji_buddy_container |
| struct | aji_capabilities |
| struct | aji_client |
| struct | aji_client_container |
| struct | aji_message |
| struct | aji_resource |
| struct | aji_transport_container |
| struct | aji_version |
| struct | messages |
Defines | |
| #define | AJI_MAX_JIDLEN 3071 |
| #define | AJI_MAX_RESJIDLEN 1023 |
| #define | IKS_NET_EXPIRED 12 |
| #define | NET_IO_BUF_SIZE 4096 |
| #define | SECURE 4 |
| #define | TRY_SECURE 2 |
Enumerations | |
| enum | { AJI_AUTOPRUNE = (1 << 0), AJI_AUTOREGISTER = (1 << 1) } |
| enum | aji_btype { AJI_USER = 0, AJI_TRANS = 1, AJI_UTRANS = 2 } |
| enum | aji_state { AJI_DISCONNECTING, AJI_DISCONNECTED, AJI_CONNECTING, AJI_CONNECTED } |
Functions | |
| int | ast_aji_check_roster (void) |
| int | ast_aji_create_chat (struct aji_client *client, char *room, char *server, char *topic) |
| create a chatroom. | |
| int | ast_aji_disconnect (struct aji_client *client) |
| disconnect from jabber server. | |
| struct aji_client * | ast_aji_get_client (const char *name) |
| grab a aji_client structure by label name or JID (without the resource string) | |
| struct aji_client_container * | ast_aji_get_clients (void) |
| void | ast_aji_increment_mid (char *mid) |
| increments the mid field for messages and other events. | |
| int | ast_aji_invite_chat (struct aji_client *client, char *user, char *room, char *message) |
| invite to a chatroom. | |
| int | ast_aji_join_chat (struct aji_client *client, char *room) |
| join a chatroom. | |
| int | ast_aji_send (struct aji_client *client, iks *x) |
| Wraps raw sending. | |
| int | ast_aji_send_chat (struct aji_client *client, const char *address, const char *message) |
| sends messages. | |
AJI - The Asterisk Jabber Interface.
Definition in file jabber.h.
| #define AJI_MAX_JIDLEN 3071 |
Definition at line 73 of file jabber.h.
Referenced by gtalk_show_channels(), and jingle_show_channels().
| #define IKS_NET_EXPIRED 12 |
Definition at line 57 of file jabber.h.
Referenced by aji_recv(), and aji_recv_loop().
| #define NET_IO_BUF_SIZE 4096 |
Definition at line 55 of file jabber.h.
Referenced by aji_recv().
| #define SECURE 4 |
Definition at line 51 of file jabber.h.
Referenced by aji_is_secure(), aji_tls_handshake(), and ast_aji_disconnect().
| #define TRY_SECURE 2 |
Definition at line 50 of file jabber.h.
Referenced by aji_act_hook(), aji_start_tls(), and aji_tls_handshake().
| anonymous enum |
Definition at line 83 of file jabber.h.
00083 { 00084 AJI_AUTOPRUNE = (1 << 0), 00085 AJI_AUTOREGISTER = (1 << 1) 00086 };
| enum aji_btype |
Definition at line 88 of file jabber.h.
00088 { 00089 AJI_USER=0, 00090 AJI_TRANS=1, 00091 AJI_UTRANS=2 00092 };
| enum aji_state |
Definition at line 76 of file jabber.h.
00076 { 00077 AJI_DISCONNECTING, 00078 AJI_DISCONNECTED, 00079 AJI_CONNECTING, 00080 AJI_CONNECTED 00081 };
| int ast_aji_check_roster | ( | void | ) |
| int ast_aji_create_chat | ( | struct aji_client * | client, | |
| char * | room, | |||
| char * | server, | |||
| char * | topic | |||
| ) |
create a chatroom.
Open Chat session
| client | the configured XMPP client we use to connect to a XMPP server | |
| room | name of room | |
| server | name of server | |
| topic | topic for the room. |
Definition at line 1894 of file res_jabber.c.
References ast_aji_increment_mid(), ast_aji_send(), ast_log(), LOG_ERROR, and aji_client::mid.
01895 { 01896 int res = 0; 01897 iks *iq = NULL; 01898 iq = iks_new("iq"); 01899 01900 if (iq && client) { 01901 iks_insert_attrib(iq, "type", "get"); 01902 iks_insert_attrib(iq, "to", server); 01903 iks_insert_attrib(iq, "id", client->mid); 01904 ast_aji_increment_mid(client->mid); 01905 ast_aji_send(client, iq); 01906 } else 01907 ast_log(LOG_ERROR, "Out of memory.\n"); 01908 01909 iks_delete(iq); 01910 01911 return res; 01912 }
| int ast_aji_disconnect | ( | struct aji_client * | client | ) |
disconnect from jabber server.
Disconnect jabber client
| client | the configured XMPP client we use to connect to a XMPP server |
Definition at line 2380 of file res_jabber.c.
References aji_client_destroy(), ast_verb, ASTOBJ_UNREF, aji_client::p, SECURE, aji_client::ssl_context, aji_client::ssl_session, and aji_client::stream_flags.
Referenced by unload_module().
02381 { 02382 if (client) { 02383 ast_verb(4, "JABBER: Disconnecting\n"); 02384 #ifdef HAVE_OPENSSL 02385 if (client->stream_flags & SECURE) { 02386 SSL_shutdown(client->ssl_session); 02387 SSL_CTX_free(client->ssl_context); 02388 SSL_free(client->ssl_session); 02389 } 02390 #endif 02391 iks_disconnect(client->p); 02392 iks_parser_delete(client->p); 02393 ASTOBJ_UNREF(client, aji_client_destroy); 02394 } 02395 02396 return 1; 02397 }
| struct aji_client* ast_aji_get_client | ( | const char * | name | ) | [read] |
grab a aji_client structure by label name or JID (without the resource string)
| name | label or JID |
Definition at line 2954 of file res_jabber.c.
References ASTOBJ_CONTAINER_FIND, ASTOBJ_CONTAINER_TRAVERSE, and clients.
Referenced by acf_jabberstatus_read(), aji_send_exec(), aji_status_exec(), gtalk_create_member(), gtalk_newcall(), gtalk_request(), jingle_create_member(), jingle_newcall(), jingle_request(), and manager_jabber_send().
02955 { 02956 struct aji_client *client = NULL; 02957 char *aux = NULL; 02958 02959 client = ASTOBJ_CONTAINER_FIND(&clients, name); 02960 if (!client && strchr(name, '@')) { 02961 ASTOBJ_CONTAINER_TRAVERSE(&clients, 1, { 02962 aux = ast_strdupa(iterator->user); 02963 if (strchr(aux, '/')) { 02964 /* strip resource for comparison */ 02965 aux = strsep(&aux, "/"); 02966 } 02967 if (!strncasecmp(aux, name, strlen(aux))) { 02968 client = iterator; 02969 } 02970 }); 02971 } 02972 02973 return client; 02974 }
| struct aji_client_container* ast_aji_get_clients | ( | void | ) | [read] |
Definition at line 2976 of file res_jabber.c.
References clients.
Referenced by gtalk_load_config(), and jingle_load_config().
02977 { 02978 return &clients; 02979 }
| void ast_aji_increment_mid | ( | char * | mid | ) |
increments the mid field for messages and other events.
| mid | char. |
Definition at line 2038 of file res_jabber.c.
Referenced by aji_act_hook(), aji_handle_presence(), aji_register_approve_handler(), ast_aji_create_chat(), ast_aji_invite_chat(), gtalk_action(), gtalk_create_candidates(), gtalk_digit(), gtalk_invite(), gtalk_invite_response(), jingle_accept_call(), jingle_action(), jingle_create_candidates(), jingle_digit(), and jingle_transmit_invite().
| int ast_aji_invite_chat | ( | struct aji_client * | client, | |
| char * | user, | |||
| char * | room, | |||
| char * | message | |||
| ) |
invite to a chatroom.
Invite to opened Chat session
| client | the configured XMPP client we use to connect to a XMPP server | |
| user | ||
| room | ||
| message |
Definition at line 1951 of file res_jabber.c.
References ast_aji_increment_mid(), ast_aji_send(), ast_log(), LOG_ERROR, and aji_client::mid.
01952 { 01953 int res = 0; 01954 iks *invite, *body, *namespace; 01955 01956 invite = iks_new("message"); 01957 body = iks_new("body"); 01958 namespace = iks_new("x"); 01959 if (client && invite && body && namespace) { 01960 iks_insert_attrib(invite, "to", user); 01961 iks_insert_attrib(invite, "id", client->mid); 01962 ast_aji_increment_mid(client->mid); 01963 iks_insert_cdata(body, message, 0); 01964 iks_insert_attrib(namespace, "xmlns", "jabber:x:conference"); 01965 iks_insert_attrib(namespace, "jid", room); 01966 iks_insert_node(invite, body); 01967 iks_insert_node(invite, namespace); 01968 res = ast_aji_send(client, invite); 01969 } else 01970 ast_log(LOG_ERROR, "Out of memory.\n"); 01971 01972 iks_delete(body); 01973 iks_delete(namespace); 01974 iks_delete(invite); 01975 01976 return res; 01977 }
| int ast_aji_join_chat | ( | struct aji_client * | client, | |
| char * | room | |||
| ) |
join a chatroom.
Join existing Chat session
| client | the configured XMPP client we use to connect to a XMPP server | |
| room | room to join |
Definition at line 1920 of file res_jabber.c.
References ast_aji_send(), ast_log(), and LOG_ERROR.
01921 { 01922 int res = 0; 01923 iks *presence = NULL, *priority = NULL; 01924 presence = iks_new("presence"); 01925 priority = iks_new("priority"); 01926 if (presence && priority && client) { 01927 iks_insert_cdata(priority, "0", 1); 01928 iks_insert_attrib(presence, "to", room); 01929 iks_insert_node(presence, priority); 01930 res = ast_aji_send(client, presence); 01931 iks_insert_cdata(priority, "5", 1); 01932 iks_insert_attrib(presence, "to", room); 01933 res = ast_aji_send(client, presence); 01934 } else 01935 ast_log(LOG_ERROR, "Out of memory.\n"); 01936 01937 iks_delete(presence); 01938 iks_delete(priority); 01939 01940 return res; 01941 }
| int ast_aji_send | ( | struct aji_client * | client, | |
| iks * | x | |||
| ) |
Wraps raw sending.
| client | the configured XMPP client we use to connect to a XMPP server | |
| x | the XMPP packet to send |
Definition at line 818 of file res_jabber.c.
References aji_send_raw().
Referenced by aji_act_hook(), aji_client_info_handler(), aji_dinfo_handler(), aji_ditems_handler(), aji_get_roster(), aji_handle_presence(), aji_handle_subscribe(), aji_pruneregister(), aji_register_approve_handler(), aji_register_query_handler(), aji_set_presence(), aji_start_sasl(), ast_aji_create_chat(), ast_aji_invite_chat(), ast_aji_join_chat(), ast_aji_send_chat(), gtalk_action(), gtalk_add_candidate(), gtalk_create_candidates(), gtalk_digit(), gtalk_invite(), gtalk_invite_response(), gtalk_response(), jingle_accept_call(), jingle_action(), jingle_add_candidate(), jingle_create_candidates(), jingle_digit(), jingle_response(), and jingle_transmit_invite().
00819 { 00820 return aji_send_raw(client, iks_string(iks_stack(x), x)); 00821 }
| int ast_aji_send_chat | ( | struct aji_client * | client, | |
| const char * | address, | |||
| const char * | message | |||
| ) |
sends messages.
Send jabber chat message from connected client to jabber URI
| client | the configured XMPP client we use to connect to a XMPP server | |
| address | ||
| message |
Definition at line 1867 of file res_jabber.c.
References AJI_CONNECTED, ast_aji_send(), ast_log(), aji_client::jid, LOG_ERROR, LOG_WARNING, and aji_client::state.
Referenced by aji_send_exec(), aji_test(), and manager_jabber_send().
01868 { 01869 int res = 0; 01870 iks *message_packet = NULL; 01871 if (client->state == AJI_CONNECTED) { 01872 message_packet = iks_make_msg(IKS_TYPE_CHAT, address, message); 01873 if (message_packet) { 01874 iks_insert_attrib(message_packet, "from", client->jid->full); 01875 res = ast_aji_send(client, message_packet); 01876 } else { 01877 ast_log(LOG_ERROR, "Out of memory.\n"); 01878 } 01879 01880 iks_delete(message_packet); 01881 } else 01882 ast_log(LOG_WARNING, "JABBER: Not connected can't send\n"); 01883 return 1; 01884 }
1.6.2