Fri Jun 19 12:10:40 2009

Asterisk developer's documentation


jabber.h File Reference

AJI - The Asterisk Jabber Interface. More...

#include <iksemel.h>
#include "asterisk/astobj.h"
#include "asterisk/linkedlists.h"
#include <openssl/ssl.h>
#include <openssl/err.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_JIDLEN   3071
#define AJI_MAX_RESJIDLEN   1023
#define IKS_NET_EXPIRED   12
#define NET_IO_BUF_SIZE   4096

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.
aji_clientast_aji_get_client (const char *name)
 grab a aji_client structure by label name or JID (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)
 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.


Detailed Description

AJI - The Asterisk Jabber Interface.

Definition in file jabber.h.


Define Documentation

#define AJI_MAX_JIDLEN   3071

Definition at line 73 of file jabber.h.

Referenced by gtalk_show_channels(), and jingle_show_channels().

#define AJI_MAX_RESJIDLEN   1023

Definition at line 74 of file jabber.h.

#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().


Enumeration Type Documentation

anonymous enum

Enumerator:
AJI_AUTOPRUNE 
AJI_AUTOREGISTER 

Definition at line 83 of file jabber.h.

00083      {
00084    AJI_AUTOPRUNE = (1 << 0),
00085    AJI_AUTOREGISTER = (1 << 1)
00086 };

enum aji_btype

Enumerator:
AJI_USER 
AJI_TRANS 
AJI_UTRANS 

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

Enumerator:
AJI_DISCONNECTING 
AJI_DISCONNECTED 
AJI_CONNECTING 
AJI_CONNECTED 

Definition at line 76 of file jabber.h.

00076                {
00077    AJI_DISCONNECTING,
00078    AJI_DISCONNECTED,
00079    AJI_CONNECTING,
00080    AJI_CONNECTED
00081 };


Function Documentation

int ast_aji_check_roster ( void   ) 

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 1808 of file res_jabber.c.

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

01809 {
01810    int res = 0;
01811    iks *iq = NULL;
01812    iq = iks_new("iq");
01813 
01814    if (iq && client) {
01815       iks_insert_attrib(iq, "type", "get");
01816       iks_insert_attrib(iq, "to", server);
01817       iks_insert_attrib(iq, "id", client->mid);
01818       ast_aji_increment_mid(client->mid);
01819       ast_aji_send(client, iq);
01820    } else 
01821       ast_log(LOG_ERROR, "Out of memory.\n");
01822 
01823    iks_delete(iq);
01824 
01825    return res;
01826 }

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 2294 of file res_jabber.c.

References aji_client_destroy(), ast_verb, ASTOBJ_UNREF, and aji_client::p.

Referenced by unload_module().

02295 {
02296    if (client) {
02297       ast_verb(4, "JABBER: Disconnecting\n");
02298 #ifdef HAVE_OPENSSL
02299       if (client->stream_flags & SECURE) {
02300          SSL_shutdown(client->ssl_session);
02301          SSL_CTX_free(client->ssl_context);
02302          SSL_free(client->ssl_session);
02303       }
02304 #endif
02305       iks_disconnect(client->p);
02306       iks_parser_delete(client->p);
02307       ASTOBJ_UNREF(client, aji_client_destroy);
02308    }
02309 
02310    return 1;
02311 }

struct aji_client* ast_aji_get_client ( const char *  name  ) 

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

Parameters:
name label or JID
Returns:
aji_client.

Definition at line 2915 of file res_jabber.c.

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

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().

02916 {
02917    struct aji_client *client = NULL;
02918    char *aux = NULL;
02919 
02920    client = ASTOBJ_CONTAINER_FIND(&clients, name);
02921    if (!client && strchr(name, '@')) {
02922       ASTOBJ_CONTAINER_TRAVERSE(&clients, 1, {
02923          aux = ast_strdupa(iterator->user);
02924          if (strchr(aux, '/')) {
02925             /* strip resource for comparison */
02926             aux = strsep(&aux, "/");
02927          }
02928          if (!strncasecmp(aux, name, strlen(aux))) {
02929             client = iterator;
02930          }           
02931       });
02932    }
02933 
02934    return client;
02935 }

struct aji_client_container* ast_aji_get_clients ( void   ) 

Definition at line 2937 of file res_jabber.c.

References clients.

02938 {
02939    return &clients;
02940 }

void ast_aji_increment_mid ( char *  mid  ) 

increments the mid field for messages and other events.

Parameters:
mid char.
Returns:
void.

Definition at line 1952 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().

01953 {
01954    int i = 0;
01955 
01956    for (i = strlen(mid) - 1; i >= 0; i--) {
01957       if (mid[i] != 'z') {
01958          mid[i] = mid[i] + 1;
01959          i = 0;
01960       } else
01961          mid[i] = 'a';
01962    }
01963 }

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 1865 of file res_jabber.c.

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

01866 {
01867    int res = 0;
01868    iks *invite, *body, *namespace;
01869 
01870    invite = iks_new("message");
01871    body = iks_new("body");
01872    namespace = iks_new("x");
01873    if (client && invite && body && namespace) {
01874       iks_insert_attrib(invite, "to", user);
01875       iks_insert_attrib(invite, "id", client->mid);
01876       ast_aji_increment_mid(client->mid);
01877       iks_insert_cdata(body, message, 0);
01878       iks_insert_attrib(namespace, "xmlns", "jabber:x:conference");
01879       iks_insert_attrib(namespace, "jid", room);
01880       iks_insert_node(invite, body);
01881       iks_insert_node(invite, namespace);
01882       res = ast_aji_send(client, invite);
01883    } else 
01884       ast_log(LOG_ERROR, "Out of memory.\n");
01885 
01886    iks_delete(body);
01887    iks_delete(namespace);
01888    iks_delete(invite);
01889    
01890    return res;
01891 }

int ast_aji_join_chat ( struct aji_client client,
char *  room 
)

join a chatroom.

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

Definition at line 1834 of file res_jabber.c.

References ast_aji_send(), ast_log(), and LOG_ERROR.

01835 {
01836    int res = 0;
01837    iks *presence = NULL, *priority = NULL;
01838    presence = iks_new("presence");
01839    priority = iks_new("priority");
01840    if (presence && priority && client) {
01841       iks_insert_cdata(priority, "0", 1);
01842       iks_insert_attrib(presence, "to", room);
01843       iks_insert_node(presence, priority);
01844       res = ast_aji_send(client, presence);
01845       iks_insert_cdata(priority, "5", 1);
01846       iks_insert_attrib(presence, "to", room);
01847       res = ast_aji_send(client, presence);
01848    } else 
01849       ast_log(LOG_ERROR, "Out of memory.\n");
01850    
01851    iks_delete(presence);
01852    iks_delete(priority);
01853    
01854    return res;
01855 }

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 732 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().

00733 {
00734    return aji_send_raw(client, iks_string(iks_stack(x), x));
00735 }

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 
Returns:
1.

Definition at line 1781 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().

01782 {
01783    int res = 0;
01784    iks *message_packet = NULL;
01785    if (client->state == AJI_CONNECTED) {
01786       message_packet = iks_make_msg(IKS_TYPE_CHAT, address, message);
01787       if (message_packet) {
01788          iks_insert_attrib(message_packet, "from", client->jid->full);
01789          res = ast_aji_send(client, message_packet);
01790       } else {
01791          ast_log(LOG_ERROR, "Out of memory.\n");
01792       }
01793 
01794       iks_delete(message_packet);
01795    } else
01796       ast_log(LOG_WARNING, "JABBER: Not connected can't send\n");
01797    return 1;
01798 }


Generated on Fri Jun 19 12:10:40 2009 for Asterisk - the Open Source PBX by  doxygen 1.4.7