Mon Oct 8 12:39:23 2012

Asterisk developer's documentation


jabber.h File Reference

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::messages
struct  aji_client_container
struct  aji_message
struct  aji_resource
struct  aji_transport_container
struct  aji_version

Defines

#define AJI_MAX_ATTRLEN   256
#define AJI_MAX_JIDLEN   3071
#define AJI_MAX_RESJIDLEN   1023
#define IKS_NET_EXPIRED   12
#define MUC_NS   "http://jabber.org/protocol/muc"
#define NET_IO_BUF_SIZE   4096

Enumerations

enum  { AJI_AUTOPRUNE = (1 << 0), AJI_AUTOREGISTER = (1 << 1), AJI_AUTOACCEPT = (1 << 2) }
enum  { AJI_XEP0248 = (1 << 0), AJI_PUBSUB = (1 << 1), AJI_PUBSUB_AUTOCREATE = (1 << 2) }
enum  aji_btype { AJI_USER = 0, AJI_TRANS = 1, AJI_UTRANS = 2 }
enum  aji_state { AJI_DISCONNECTING, AJI_DISCONNECTED, AJI_CONNECTING, AJI_CONNECTED }

Functions

void ast_aji_buddy_destroy (struct aji_buddy *obj)
int ast_aji_check_roster (void)
void ast_aji_client_destroy (struct aji_client *obj)
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.
aji_clientast_aji_get_client (const char *name)
 grab a aji_client structure by label name or JID. Bumps the refcount. (without the resource string)
aji_client_containerast_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, char *nick)
 join a chatroom.
int ast_aji_leave_chat (struct aji_client *client, char *room, char *nick)
 leave 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.
int ast_aji_send_groupchat (struct aji_client *client, const char *nick, const char *address, const char *message)
 sends message to a groupchat Prior to sending messages to a groupchat, one must be connected to it.


Detailed Description

AJI - The Asterisk Jabber Interface.

Definition in file jabber.h.


Define Documentation

#define AJI_MAX_ATTRLEN   256

Definition at line 75 of file jabber.h.

Referenced by aji_act_hook().

#define AJI_MAX_JIDLEN   3071

Definition at line 73 of file jabber.h.

Referenced by acf_jabberreceive_read(), aji_send_raw_chat(), aji_set_group_presence(), gtalk_show_channels(), and jingle_show_channels().

#define AJI_MAX_RESJIDLEN   1023

Definition at line 74 of file jabber.h.

Referenced by aji_join_exec(), aji_leave_exec(), and aji_sendgroup_exec().

#define IKS_NET_EXPIRED   12

Definition at line 57 of file jabber.h.

Referenced by aji_recv(), and aji_recv_loop().

#define MUC_NS   "http://jabber.org/protocol/muc"

Definition at line 77 of file jabber.h.

Referenced by aji_set_group_presence().

#define NET_IO_BUF_SIZE   4096

Definition at line 55 of file jabber.h.

Referenced by aji_recv().


Enumeration Type Documentation

anonymous enum

Enumerator:
AJI_AUTOPRUNE 
AJI_AUTOREGISTER 
AJI_AUTOACCEPT 

Definition at line 86 of file jabber.h.

00086      {
00087    AJI_AUTOPRUNE = (1 << 0),
00088    AJI_AUTOREGISTER = (1 << 1),
00089    AJI_AUTOACCEPT = (1 << 2),
00090 };

anonymous enum

Enumerator:
AJI_XEP0248 
AJI_PUBSUB 
AJI_PUBSUB_AUTOCREATE 

Definition at line 92 of file jabber.h.

00092      {
00093    AJI_XEP0248 = (1 << 0),
00094    AJI_PUBSUB = (1 << 1),
00095    AJI_PUBSUB_AUTOCREATE = (1 << 2),
00096 };

enum aji_btype

Enumerator:
AJI_USER 
AJI_TRANS 
AJI_UTRANS 

Definition at line 98 of file jabber.h.

00098                {
00099    AJI_USER = 0,
00100    AJI_TRANS = 1,
00101    AJI_UTRANS = 2,
00102 };

enum aji_state

Enumerator:
AJI_DISCONNECTING 
AJI_DISCONNECTED 
AJI_CONNECTING 
AJI_CONNECTED 

Definition at line 79 of file jabber.h.

00079                {
00080    AJI_DISCONNECTING,
00081    AJI_DISCONNECTED,
00082    AJI_CONNECTING,
00083    AJI_CONNECTED
00084 };


Function Documentation

void ast_aji_buddy_destroy ( struct aji_buddy obj  ) 

Destructor function for buddies to be used with ASTOBJ_UNREF

Definition at line 434 of file res_jabber.c.

References ast_free, aji_resource::description, aji_resource::next, and aji_buddy::resources.

Referenced by acf_jabberstatus_read(), aji_client_info_handler(), aji_create_buddy(), aji_dinfo_handler(), aji_handle_presence(), aji_handle_subscribe(), aji_register_query_handler(), aji_status_exec(), ast_aji_client_destroy(), gtalk_alloc(), and jingle_alloc().

00435 {
00436    struct aji_resource *tmp;
00437 
00438    while ((tmp = obj->resources)) {
00439       obj->resources = obj->resources->next;
00440       ast_free(tmp->description);
00441       ast_free(tmp);
00442    }
00443 
00444    ast_free(obj);
00445 }

int ast_aji_check_roster ( void   ) 

void ast_aji_client_destroy ( struct aji_client obj  ) 

Destructor function for clients to be used with ASTOBJ_UNREF after calls to ast_aji_get_client

Definition at line 412 of file res_jabber.c.

References aji_message_destroy(), ast_aji_buddy_destroy(), ast_free, AST_LIST_HEAD_DESTROY, AST_LIST_LOCK, AST_LIST_REMOVE_HEAD, ASTOBJ_CONTAINER_DESTROY, ASTOBJ_CONTAINER_DESTROYALL, aji_client::buddies, aji_client::f, aji_message::list, aji_client::messages, aji_client::p, and aji_client::stack.

Referenced by acf_jabberreceive_read(), acf_jabberstatus_read(), aji_act_hook(), aji_cli_create_collection(), aji_cli_create_leafnode(), aji_cli_delete_pubsub_node(), aji_cli_list_pubsub_nodes(), aji_cli_purge_pubsub_nodes(), aji_client_connect(), aji_client_info_handler(), aji_create_client(), aji_devstate_cb(), aji_dinfo_handler(), aji_ditems_handler(), aji_handle_pubsub_error(), aji_join_exec(), aji_leave_exec(), aji_log_hook(), aji_mwi_cb(), aji_receive_node_list(), aji_recv_loop(), aji_register_approve_handler(), aji_register_query_handler(), aji_reload(), aji_send_exec(), aji_sendgroup_exec(), aji_status_exec(), ast_aji_disconnect(), gtalk_newcall(), gtalk_request(), jingle_newcall(), jingle_request(), manager_jabber_send(), and unload_module().

00413 {
00414    struct aji_message *tmp;
00415    ASTOBJ_CONTAINER_DESTROYALL(&obj->buddies, ast_aji_buddy_destroy);
00416    ASTOBJ_CONTAINER_DESTROY(&obj->buddies);
00417    iks_filter_delete(obj->f);
00418    iks_parser_delete(obj->p);
00419    iks_stack_delete(obj->stack);
00420    AST_LIST_LOCK(&obj->messages);
00421    while ((tmp = AST_LIST_REMOVE_HEAD(&obj->messages, list))) {
00422       aji_message_destroy(tmp);
00423    }
00424    AST_LIST_HEAD_DESTROY(&obj->messages);
00425    ast_free(obj);
00426 }

int ast_aji_create_chat ( struct aji_client client,
char *  room,
char *  server,
char *  topic 
)

create a chatroom.

Parameters:
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.
Returns:
0.

Definition at line 2636 of file res_jabber.c.

References ast_aji_increment_mid(), ast_aji_send(), ast_log(), LOG_ERROR, and aji_client::mid.

02637 {
02638    int res = 0;
02639    iks *iq = NULL;
02640    iq = iks_new("iq");
02641 
02642    if (iq && client) {
02643       iks_insert_attrib(iq, "type", "get");
02644       iks_insert_attrib(iq, "to", server);
02645       iks_insert_attrib(iq, "id", client->mid);
02646       ast_aji_increment_mid(client->mid);
02647       ast_aji_send(client, iq);
02648    } else {
02649       ast_log(LOG_ERROR, "Out of memory.\n");
02650    }
02651 
02652    iks_delete(iq);
02653 
02654    return res;
02655 }

int ast_aji_disconnect ( struct aji_client client  ) 

disconnect from jabber server.

Parameters:
client the configured XMPP client we use to connect to a XMPP server
Returns:
1.

Definition at line 3143 of file res_jabber.c.

References ast_aji_client_destroy(), ast_verb, ASTOBJ_UNREF, aji_client::p, aji_client::ssl_context, aji_client::ssl_session, and aji_client::stream_flags.

Referenced by unload_module().

03144 {
03145    if (client) {
03146       ast_verb(4, "JABBER: Disconnecting\n");
03147 #ifdef HAVE_OPENSSL
03148       if (client->stream_flags & SECURE) {
03149          SSL_shutdown(client->ssl_session);
03150          SSL_CTX_free(client->ssl_context);
03151          SSL_free(client->ssl_session);
03152       }
03153 #endif
03154       iks_disconnect(client->p);
03155       iks_parser_delete(client->p);
03156       ASTOBJ_UNREF(client, ast_aji_client_destroy);
03157    }
03158 
03159    return 1;
03160 }

struct aji_client* ast_aji_get_client ( const char *  name  ) 

grab a aji_client structure by label name or JID. Bumps the refcount. (without the resource string)

Parameters:
name label or JID
Returns:
aji_client.

Definition at line 4596 of file res_jabber.c.

References ast_strdupa, ASTOBJ_CONTAINER_FIND, ASTOBJ_CONTAINER_TRAVERSE, ASTOBJ_REF, clients, and strsep().

Referenced by acf_jabberreceive_read(), acf_jabberstatus_read(), aji_join_exec(), aji_leave_exec(), aji_send_exec(), aji_sendgroup_exec(), aji_status_exec(), gtalk_create_member(), gtalk_newcall(), gtalk_request(), jingle_create_member(), jingle_newcall(), jingle_request(), and manager_jabber_send().

04597 {
04598    struct aji_client *client = NULL;
04599    char *aux = NULL;
04600 
04601    client = ASTOBJ_CONTAINER_FIND(&clients, name);
04602    if (!client && strchr(name, '@')) {
04603       ASTOBJ_CONTAINER_TRAVERSE(&clients, 1, {
04604          aux = ast_strdupa(iterator->user);
04605          if (strchr(aux, '/')) {
04606             /* strip resource for comparison */
04607             aux = strsep(&aux, "/");
04608          }
04609          if (!strncasecmp(aux, name, strlen(aux))) {
04610             client = ASTOBJ_REF(iterator);
04611          }
04612       });
04613    }
04614 
04615    return client;
04616 }

struct aji_client_container* ast_aji_get_clients ( void   ) 

Definition at line 4618 of file res_jabber.c.

References clients.

04619 {
04620    return &clients;
04621 }

void ast_aji_increment_mid ( char *  mid  ) 

increments the mid field for messages and other events.

Parameters:
mid char.
Returns:
void.

Definition at line 2780 of file res_jabber.c.

Referenced by aji_act_hook(), aji_handle_presence(), aji_pubsub_iq_create(), aji_register_approve_handler(), ast_aji_create_chat(), ast_aji_invite_chat(), gtalk_action(), gtalk_create_candidates(), gtalk_invite(), jingle_accept_call(), jingle_action(), jingle_create_candidates(), jingle_digit(), and jingle_transmit_invite().

02781 {
02782    int i = 0;
02783 
02784    for (i = strlen(mid) - 1; i >= 0; i--) {
02785       if (mid[i] != 'z') {
02786          mid[i] = mid[i] + 1;
02787          i = 0;
02788       } else
02789          mid[i] = 'a';
02790    }
02791 }

int ast_aji_invite_chat ( struct aji_client client,
char *  user,
char *  room,
char *  message 
)

invite to a chatroom.

Parameters:
client the configured XMPP client we use to connect to a XMPP server
user 
room 
message 
Returns:
res.

Definition at line 2688 of file res_jabber.c.

References ast_aji_increment_mid(), ast_aji_send(), ast_log(), LOG_ERROR, and aji_client::mid.

02689 {
02690    int res = 0;
02691    iks *invite, *body, *namespace;
02692 
02693    invite = iks_new("message");
02694    body = iks_new("body");
02695    namespace = iks_new("x");
02696    if (client && invite && body && namespace) {
02697       iks_insert_attrib(invite, "to", user);
02698       iks_insert_attrib(invite, "id", client->mid);
02699       ast_aji_increment_mid(client->mid);
02700       iks_insert_cdata(body, message, 0);
02701       iks_insert_attrib(namespace, "xmlns", "jabber:x:conference");
02702       iks_insert_attrib(namespace, "jid", room);
02703       iks_insert_node(invite, body);
02704       iks_insert_node(invite, namespace);
02705       res = ast_aji_send(client, invite);
02706    } else {
02707       ast_log(LOG_ERROR, "Out of memory.\n");
02708    }
02709 
02710    iks_delete(body);
02711    iks_delete(namespace);
02712    iks_delete(invite);
02713 
02714    return res;
02715 }

int ast_aji_join_chat ( struct aji_client client,
char *  room,
char *  nick 
)

join a chatroom.

Parameters:
client the configured XMPP client we use to connect to a XMPP server
room room to join
nick the nickname to use in this room
Returns:
IKS_OK on success, any other value on failure.

Definition at line 2664 of file res_jabber.c.

References aji_set_group_presence().

Referenced by aji_join_exec().

02665 {
02666    return aji_set_group_presence(client, room, IKS_SHOW_AVAILABLE, nick, NULL);
02667 }

int ast_aji_leave_chat ( struct aji_client client,
char *  room,
char *  nick 
)

leave a chatroom.

Parameters:
client the configured XMPP client we use to connect to a XMPP server
room room to leave
nick the nickname used in this room
Returns:
IKS_OK on success, any other value on failure.

Definition at line 2676 of file res_jabber.c.

References aji_set_group_presence().

Referenced by aji_leave_exec().

02677 {
02678    return aji_set_group_presence(client, room, IKS_SHOW_UNAVAILABLE, nick, NULL);
02679 }

int ast_aji_send ( struct aji_client client,
iks *  x 
)

Wraps raw sending.

Parameters:
client the configured XMPP client we use to connect to a XMPP server
x the XMPP packet to send
Returns:
IKS_OK on success, any other value on failure

Definition at line 1439 of file res_jabber.c.

References aji_send_raw().

Referenced by aji_act_hook(), aji_client_info_handler(), aji_create_pubsub_node(), aji_delete_pubsub_node(), aji_dinfo_handler(), aji_ditems_handler(), aji_get_roster(), aji_handle_presence(), aji_handle_pubsub_error(), aji_handle_subscribe(), aji_pruneregister(), aji_publish_device_state(), aji_publish_mwi(), aji_pubsub_purge_nodes(), aji_pubsub_subscribe(), aji_register_approve_handler(), aji_register_query_handler(), aji_request_pubsub_nodes(), aji_send_raw_chat(), aji_set_group_presence(), aji_set_presence(), aji_start_sasl(), ast_aji_create_chat(), ast_aji_invite_chat(), gtalk_action(), gtalk_add_candidate(), gtalk_create_candidates(), gtalk_invite(), gtalk_response(), jingle_accept_call(), jingle_action(), jingle_add_candidate(), jingle_create_candidates(), jingle_digit(), jingle_response(), and jingle_transmit_invite().

01440 {
01441    return aji_send_raw(client, iks_string(iks_stack(x), x));
01442 }

int ast_aji_send_chat ( struct aji_client client,
const char *  address,
const char *  message 
)

sends messages.

Parameters:
client the configured XMPP client we use to connect to a XMPP server
address 
message 
Return values:
IKS_OK success
-1 failure

Definition at line 2572 of file res_jabber.c.

References aji_send_raw_chat().

Referenced by aji_send_exec(), aji_test(), gtalk_sendtext(), jingle_sendtext(), and manager_jabber_send().

02573 {
02574    return aji_send_raw_chat(client, 0, NULL, address, message);
02575 }

int ast_aji_send_groupchat ( struct aji_client client,
const char *  nick,
const char *  address,
const char *  message 
)

sends message to a groupchat Prior to sending messages to a groupchat, one must be connected to it.

Parameters:
client the configured XMPP client we use to connect to a XMPP server
nick the nickname we use in the chatroom
address the user the messages must be sent to
message the message to send
Returns:
IKS_OK on success, any other value on failure

Definition at line 2586 of file res_jabber.c.

References aji_send_raw_chat().

Referenced by aji_sendgroup_exec().

02586                                                                                                                   {
02587    return aji_send_raw_chat(client, 1, nick, address, message);
02588 }


Generated on Mon Oct 8 12:39:24 2012 for Asterisk - The Open Source Telephony Project by  doxygen 1.4.7