[asterisk-commits] qwell: branch qwell/gtalk_jingle-merge r56208 -
/team/qwell/gtalk_jingle-merg...
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Thu Feb 22 10:22:34 MST 2007
Author: qwell
Date: Thu Feb 22 11:22:34 2007
New Revision: 56208
URL: http://svn.digium.com/view/asterisk?view=rev&rev=56208
Log:
s/gtalk/jingle/g
Some other small fixes...
Modified:
team/qwell/gtalk_jingle-merge/channels/chan_jingle.c
Modified: team/qwell/gtalk_jingle-merge/channels/chan_jingle.c
URL: http://svn.digium.com/view/asterisk/team/qwell/gtalk_jingle-merge/channels/chan_jingle.c?view=diff&rev=56208&r1=56207&r2=56208
==============================================================================
--- team/qwell/gtalk_jingle-merge/channels/chan_jingle.c (original)
+++ team/qwell/gtalk_jingle-merge/channels/chan_jingle.c Thu Feb 22 11:22:34 2007
@@ -20,7 +20,7 @@
*
* \author Matt O'Gorman <mogorman at digium.com>
*
- * \brief Gtalk Channel Driver, until google/libjingle works with jingle spec
+ * \brief Jingle Channel Driver
*
* \ingroup channel_drivers
*/
@@ -72,11 +72,9 @@
#include "asterisk/astobj.h"
#include "asterisk/abstract_jb.h"
#include "asterisk/jabber.h"
-
-#define GOOGLE_CONFIG "gtalk.conf"
-
-#define GOOGLE_NS "http://www.google.com/session"
-
+#include "asterisk/jingle.h"
+
+#define JINGLE_CONFIG "jingle.conf"
/*! Global jitterbuffer configuration - by default, jb is disabled */
static struct ast_jb_conf default_jbconf =
@@ -88,21 +86,21 @@
};
static struct ast_jb_conf global_jbconf;
-enum gtalk_protocol {
+enum jingle_protocol {
AJI_PROTOCOL_UDP = 1,
AJI_PROTOCOL_SSLTCP = 2,
};
-enum gtalk_connect_type {
+enum jingle_connect_type {
AJI_CONNECT_STUN = 1,
AJI_CONNECT_LOCAL = 2,
AJI_CONNECT_RELAY = 3,
};
-struct gtalk_pvt {
+struct jingle_pvt {
ast_mutex_t lock; /*!< Channel private lock */
time_t laststun;
- struct gtalk *parent; /*!< Parent client */
+ struct jingle *parent; /*!< Parent client */
char sid[100];
char us[100];
char them[100];
@@ -112,8 +110,8 @@
int alreadygone;
int capability;
struct ast_codec_pref prefs;
- struct gtalk_candidate *theircandidates;
- struct gtalk_candidate *ourcandidates;
+ struct jingle_candidate *theircandidates;
+ struct jingle_candidate *ourcandidates;
char cid_num[80]; /*!< Caller ID num */
char cid_name[80]; /*!< Caller ID name */
char exten[80]; /*!< Called extension */
@@ -122,29 +120,29 @@
struct ast_rtp *vrtp; /*!< RTP video session */
int jointcapability; /*!< Supported capability at both ends (codecs ) */
int peercapability;
- struct gtalk_pvt *next; /* Next entity */
+ struct jingle_pvt *next; /* Next entity */
};
-struct gtalk_candidate {
+struct jingle_candidate {
char name[100];
- enum gtalk_protocol protocol;
+ enum jingle_protocol protocol;
double preference;
char username[100];
char password[100];
- enum gtalk_connect_type type;
+ enum jingle_connect_type type;
char network[6];
int generation;
char ip[16];
int port;
int receipt;
- struct gtalk_candidate *next;
+ struct jingle_candidate *next;
};
-struct gtalk {
- ASTOBJ_COMPONENTS(struct gtalk);
+struct jingle {
+ ASTOBJ_COMPONENTS(struct jingle);
struct aji_client *connection;
struct aji_buddy *buddy;
- struct gtalk_pvt *p;
+ struct jingle_pvt *p;
struct ast_codec_pref prefs;
int amaflags; /*!< AMA Flags */
char user[100];
@@ -159,57 +157,56 @@
char musicclass[MAX_MUSICCLASS]; /*!< Music on Hold class */
};
-struct gtalk_container {
- ASTOBJ_CONTAINER_COMPONENTS(struct gtalk);
+struct jingle_container {
+ ASTOBJ_CONTAINER_COMPONENTS(struct jingle);
};
-static const char desc[] = "Gtalk Channel";
+static const char desc[] = "Jingle Channel";
static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
-AST_MUTEX_DEFINE_STATIC(gtalklock); /*!< Protect the interface list (of gtalk_pvt's) */
+AST_MUTEX_DEFINE_STATIC(jinglelock); /*!< Protect the interface list (of jingle_pvt's) */
/* Forward declarations */
-static struct ast_channel *gtalk_request(const char *type, int format, void *data, int *cause);
-static int gtalk_digit(struct ast_channel *ast, char digit, unsigned int duration);
-static int gtalk_digit_begin(struct ast_channel *ast, char digit);
-static int gtalk_digit_end(struct ast_channel *ast, char digit, unsigned int duration);
-static int gtalk_call(struct ast_channel *ast, char *dest, int timeout);
-static int gtalk_hangup(struct ast_channel *ast);
-static int gtalk_answer(struct ast_channel *ast);
-static int gtalk_newcall(struct gtalk *client, ikspak *pak);
-static struct ast_frame *gtalk_read(struct ast_channel *ast);
-static int gtalk_write(struct ast_channel *ast, struct ast_frame *f);
-static int gtalk_indicate(struct ast_channel *ast, int condition, const void *data, size_t datalen);
-static int gtalk_fixup(struct ast_channel *oldchan, struct ast_channel *newchan);
-static int gtalk_sendhtml(struct ast_channel *ast, int subclass, const char *data, int datalen);
-static struct gtalk_pvt *gtalk_alloc(struct gtalk *client, const char *us, const char *them, const char *sid);
-static int gtalk_do_reload(int fd, int argc, char **argv);
-static int gtalk_show_channels(int fd, int argc, char **argv);
+static struct ast_channel *jingle_request(const char *type, int format, void *data, int *cause);
+static int jingle_digit_begin(struct ast_channel *ast, char digit);
+static int jingle_digit_end(struct ast_channel *ast, char digit, unsigned int duration);
+static int jingle_call(struct ast_channel *ast, char *dest, int timeout);
+static int jingle_hangup(struct ast_channel *ast);
+static int jingle_answer(struct ast_channel *ast);
+static int jingle_newcall(struct jingle *client, ikspak *pak);
+static struct ast_frame *jingle_read(struct ast_channel *ast);
+static int jingle_write(struct ast_channel *ast, struct ast_frame *f);
+static int jingle_indicate(struct ast_channel *ast, int condition, const void *data, size_t datalen);
+static int jingle_fixup(struct ast_channel *oldchan, struct ast_channel *newchan);
+static int jingle_sendhtml(struct ast_channel *ast, int subclass, const char *data, int datalen);
+static struct jingle_pvt *jingle_alloc(struct jingle *client, const char *us, const char *them, const char *sid);
+static int jingle_do_reload(int fd, int argc, char **argv);
+static int jingle_show_channels(int fd, int argc, char **argv);
/*----- RTP interface functions */
-static int gtalk_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp,
+static int jingle_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp,
struct ast_rtp *vrtp, struct ast_rtp *trtp, int codecs, int nat_active);
-static enum ast_rtp_get_result gtalk_get_rtp_peer(struct ast_channel *chan, struct ast_rtp **rtp);
-static int gtalk_get_codec(struct ast_channel *chan);
+static enum ast_rtp_get_result jingle_get_rtp_peer(struct ast_channel *chan, struct ast_rtp **rtp);
+static int jingle_get_codec(struct ast_channel *chan);
/*! \brief PBX interface structure for channel registration */
-static const struct ast_channel_tech gtalk_tech = {
- .type = "Gtalk",
- .description = "Gtalk Channel Driver",
+static const struct ast_channel_tech jingle_tech = {
+ .type = "Jingle",
+ .description = "Jingle Channel Driver",
.capabilities = ((AST_FORMAT_MAX_AUDIO << 1) - 1),
- .requester = gtalk_request,
- .send_digit_begin = gtalk_digit_begin,
- .send_digit_end = gtalk_digit_end,
+ .requester = jingle_request,
+ .send_digit_begin = jingle_digit_begin,
+ .send_digit_end = jingle_digit_end,
.bridge = ast_rtp_bridge,
- .call = gtalk_call,
- .hangup = gtalk_hangup,
- .answer = gtalk_answer,
- .read = gtalk_read,
- .write = gtalk_write,
- .exception = gtalk_read,
- .indicate = gtalk_indicate,
- .fixup = gtalk_fixup,
- .send_html = gtalk_sendhtml,
+ .call = jingle_call,
+ .hangup = jingle_hangup,
+ .answer = jingle_answer,
+ .read = jingle_read,
+ .write = jingle_write,
+ .exception = jingle_read,
+ .indicate = jingle_indicate,
+ .fixup = jingle_fixup,
+ .send_html = jingle_sendhtml,
.properties = AST_CHAN_TP_WANTSJITTER | AST_CHAN_TP_CREATESJITTER
};
@@ -221,41 +218,41 @@
/*! \brief RTP driver interface */
-static struct ast_rtp_protocol gtalk_rtp = {
- type: "Gtalk",
- get_rtp_info: gtalk_get_rtp_peer,
- set_rtp_peer: gtalk_set_rtp_peer,
- get_codec: gtalk_get_codec,
+static struct ast_rtp_protocol jingle_rtp = {
+ type: "Jingle",
+ get_rtp_info: jingle_get_rtp_peer,
+ set_rtp_peer: jingle_set_rtp_peer,
+ get_codec: jingle_get_codec,
};
static const char debug_usage[] =
-"Usage: gtalk show channels\n"
-" Shows current state of the Gtalk channels.\n";
+"Usage: jingle show channels\n"
+" Shows current state of the Jingle channels.\n";
static const char reload_usage[] =
-"Usage: gtalk reload\n"
-" Reload gtalk channel driver.\n";
-
-
-static struct ast_cli_entry gtalk_cli[] = {
- {{ "gtalk", "reload", NULL}, gtalk_do_reload, "Enable Jabber debugging", reload_usage },
- {{ "gtalk", "show", "channels", NULL}, gtalk_show_channels, "Show GoogleTalk Channels", debug_usage },
+"Usage: jingle reload\n"
+" Reload jingle channel driver.\n";
+
+
+static struct ast_cli_entry jingle_cli[] = {
+ {{ "jingle", "reload", NULL}, jingle_do_reload, "Reload Jingle channel driver", reload_usage },
+ {{ "jingle", "show", "channels", NULL}, jingle_show_channels, "Show Jingle Channels", debug_usage },
};
static char externip[16];
-static struct gtalk_container gtalk_list;
-
-static void gtalk_member_destroy(struct gtalk *obj)
+static struct jingle_container jingles;
+
+static void jingle_member_destroy(struct jingle *obj)
{
free(obj);
}
-static struct gtalk *find_gtalk(char *name, char *connection)
-{
- struct gtalk *gtalk = NULL;
+static struct jingle *find_jingle(char *name, char *connection)
+{
+ struct jingle *jingle = NULL;
char *domain = NULL , *s = NULL;
if(strchr(connection, '@')) {
@@ -263,34 +260,35 @@
domain = strsep(&s, "@");
ast_verbose("OOOOH domain = %s\n", domain);
}
- gtalk = ASTOBJ_CONTAINER_FIND(>alk_list, name);
- if (!gtalk && strchr(name, '@'))
- gtalk = ASTOBJ_CONTAINER_FIND_FULL(>alk_list, name, user,,, strcasecmp);
-
- if (!gtalk) { /* guest call */
- ASTOBJ_CONTAINER_TRAVERSE(>alk_list, 1, {
+
+ jingle = ASTOBJ_CONTAINER_FIND(&jingles, name);
+ if (!jingle && strchr(name, '@'))
+ jingle = ASTOBJ_CONTAINER_FIND_FULL(&jingles, name, user,,, strcasecmp);
+
+ if (!jingle) { /* guest call */
+ ASTOBJ_CONTAINER_TRAVERSE(&jingles, 1, {
ASTOBJ_RDLOCK(iterator);
if (!strcasecmp(iterator->name, "guest")) {
if (!strcasecmp(iterator->connection->jid->partial, connection)) {
- gtalk = iterator;
+ jingle = iterator;
} else if (!strcasecmp(iterator->connection->name, connection)) {
- gtalk = iterator;
+ jingle = iterator;
} else if (iterator->connection->component && !strcasecmp(iterator->connection->user,domain)) {
- gtalk = iterator;
+ jingle = iterator;
}
}
ASTOBJ_UNLOCK(iterator);
- if (gtalk)
+ if (jingle)
break;
});
}
- return gtalk;
-}
-
-
-static int add_codec_to_answer(const struct gtalk_pvt *p, int codec, iks *dcodecs)
+ return jingle;
+}
+
+
+static int add_codec_to_answer(const struct jingle_pvt *p, int codec, iks *dcodecs)
{
char *format = ast_getformatname(codec);
@@ -334,7 +332,6 @@
iks_insert_attrib(payload_pcma, "name", "PCMA");
iks_insert_attrib(payload_pcma, "clockrate","8000");
iks_insert_attrib(payload_pcma, "bitrate","64000");
- payload_eg711a = iks_new("payload-type");
iks_insert_attrib(payload_eg711a, "id", "101");
iks_insert_attrib(payload_eg711a, "name", "EG711A");
iks_insert_attrib(payload_eg711a, "clockrate","8000");
@@ -382,31 +379,35 @@
return 0;
}
-static int gtalk_invite(struct gtalk_pvt *p, char *to, char *from, char *sid, int initiator)
-{
- struct gtalk *client = p->parent;
- iks *iq, *gtalk, *dcodecs, *payload_telephone, *transport;
+static int jingle_invite(struct jingle_pvt *p)
+{
+ struct jingle *client = p->parent;
+ iks *iq, *jingle, *dcodecs;
+ iks *transport, *payload_telephone, *payload_cn;
int x;
int pref_codec = 0;
int alreadysent = 0;
-
iq = iks_new("iq");
- gtalk = iks_new("session");
+ jingle = iks_new("session");
dcodecs = iks_new("description");
transport = iks_new("transport");
payload_telephone = iks_new("payload-type");
- if (!(iq && gtalk && dcodecs && transport && payload_telephone)){
+ payload_cn = iks_new("payload-type");
+
+ if (!(iq && jingle && dcodecs && transport && payload_telephone && payload_cn)) {
if(iq)
iks_delete(iq);
- if(gtalk)
- iks_delete(gtalk);
+ if(jingle)
+ iks_delete(jingle);
if(dcodecs)
iks_delete(dcodecs);
if(transport)
iks_delete(transport);
if(payload_telephone)
iks_delete(payload_telephone);
+ if(payload_cn)
+ iks_delete(payload_cn);
ast_log(LOG_ERROR, "Could not allocate iksemel nodes\n");
return 0;
@@ -429,33 +430,40 @@
iks_insert_attrib(payload_telephone, "name", "telephone-event");
iks_insert_attrib(payload_telephone, "clockrate", "8000");
+ iks_insert_attrib(payload_cn, "id", "13");
+ iks_insert_attrib(payload_cn, "name", "CN");
+ iks_insert_attrib(payload_cn, "clockrate", "8000");
+
iks_insert_attrib(transport,"xmlns","http://www.google.com/transport/p2p");
-
+
iks_insert_attrib(iq, "type", "set");
- iks_insert_attrib(iq, "to", to);
- iks_insert_attrib(iq, "from", from);
+ iks_insert_attrib(iq, "to", (p->them) ? p->them : client->user);
+ iks_insert_attrib(iq, "from", p->us);
iks_insert_attrib(iq, "id", client->connection->mid);
ast_aji_increment_mid(client->connection->mid);
- iks_insert_attrib(gtalk, "xmlns", "http://www.google.com/session");
- iks_insert_attrib(gtalk, "type",initiator ? "initiate": "accept");
- iks_insert_attrib(gtalk, "initiator", initiator ? from : to);
- iks_insert_attrib(gtalk, "id", sid);
- iks_insert_node(iq, gtalk);
- iks_insert_node(gtalk, dcodecs);
- iks_insert_node(gtalk, transport);
+ iks_insert_attrib(jingle, "xmlns", "http://www.google.com/session");
+ iks_insert_attrib(jingle, "type", p->initiator ? "initiate": "accept");
+ iks_insert_attrib(jingle, "initiator", p->initiator ? p->us : p->them);
+ iks_insert_attrib(jingle, "id", p->sid);
+ iks_insert_node(iq, jingle);
+ iks_insert_node(jingle, dcodecs);
+ iks_insert_node(jingle, transport);
iks_insert_node(dcodecs, payload_telephone);
+ iks_insert_node(dcodecs, payload_cn);
iks_send(client->connection->p, iq);
+ iks_delete(transport);
iks_delete(payload_telephone);
- iks_delete(transport);
+ iks_delete(payload_cn);
+
iks_delete(dcodecs);
- iks_delete(gtalk);
+ iks_delete(jingle);
iks_delete(iq);
return 1;
}
-static int gtalk_invite_response(struct gtalk_pvt *p, char *to , char *from, char *sid, int initiator)
+static int jingle_invite_response(struct jingle_pvt *p, int initiator)
{
iks *iq, *session, *transport;
iq = iks_new("iq");
@@ -471,14 +479,14 @@
ast_log(LOG_ERROR, " Unable to allocate IKS node\n");
return -1;
}
- iks_insert_attrib(iq, "from", from);
- iks_insert_attrib(iq, "to", to);
+ iks_insert_attrib(iq, "from", p->us);
+ iks_insert_attrib(iq, "to", p->them);
iks_insert_attrib(iq, "type", "set");
iks_insert_attrib(iq, "id",p->parent->connection->mid);
ast_aji_increment_mid(p->parent->connection->mid);
iks_insert_attrib(session, "type", "transport-accept");
- iks_insert_attrib(session, "id", sid);
- iks_insert_attrib(session, "initiator", initiator ? from : to);
+ iks_insert_attrib(session, "id", p->sid);
+ iks_insert_attrib(session, "initiator", initiator ? p->us : p->them);
iks_insert_attrib(session, "xmlns", "http://www.google.com/session");
iks_insert_attrib(transport, "xmlns", "http://www.google.com/transport/p2p");
iks_insert_node(iq,session);
@@ -491,9 +499,9 @@
}
-static int gtalk_ringing_ack(void *data, ikspak *pak)
-{
- struct gtalk_pvt *p = data;
+static int jingle_ringing_ack(void *data, ikspak *pak)
+{
+ struct jingle_pvt *p = data;
if (p->ringrule)
iks_filter_remove_rule(p->parent->connection->f, p->ringrule);
@@ -503,29 +511,29 @@
return IKS_FILTER_EAT;
}
-static int gtalk_answer(struct ast_channel *ast)
-{
- struct gtalk_pvt *p = ast->tech_pvt;
+static int jingle_answer(struct ast_channel *ast)
+{
+ struct jingle_pvt *p = ast->tech_pvt;
int res = 0;
if (option_debug)
ast_log(LOG_DEBUG, "Answer!\n");
ast_mutex_lock(&p->lock);
- gtalk_invite(p, p->them, p->us,p->sid, 0);
+ jingle_invite(p);
ast_mutex_unlock(&p->lock);
return res;
}
-static enum ast_rtp_get_result gtalk_get_rtp_peer(struct ast_channel *chan, struct ast_rtp **rtp)
-{
- struct gtalk_pvt *p = chan->tech_pvt;
+static enum ast_rtp_get_result jingle_get_rtp_peer(struct ast_channel *chan, struct ast_rtp **rtp)
+{
+ struct jingle_pvt *p = chan->tech_pvt;
enum ast_rtp_get_result res = AST_RTP_GET_FAILED;
if (!p)
return res;
ast_mutex_lock(&p->lock);
- if (p->rtp){
+ if (p->rtp) {
*rtp = p->rtp;
res = AST_RTP_TRY_NATIVE;
}
@@ -534,15 +542,15 @@
return res;
}
-static int gtalk_get_codec(struct ast_channel *chan)
-{
- struct gtalk_pvt *p = chan->tech_pvt;
+static int jingle_get_codec(struct ast_channel *chan)
+{
+ struct jingle_pvt *p = chan->tech_pvt;
return p->peercapability;
}
-static int gtalk_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp, struct ast_rtp *vrtp, struct ast_rtp *trtp, int codecs, int nat_active)
-{
- struct gtalk_pvt *p;
+static int jingle_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp, struct ast_rtp *vrtp, struct ast_rtp *trtp, int codecs, int nat_active)
+{
+ struct jingle_pvt *p;
p = chan->tech_pvt;
if (!p)
@@ -560,7 +568,7 @@
return 0;
}
-static int gtalk_response(struct gtalk *client, char *from, ikspak *pak, const char *reasonstr, const char *reasonstr2)
+static int jingle_response(struct jingle *client, char *from, ikspak *pak, const char *reasonstr, const char *reasonstr2)
{
iks *response = NULL, *error = NULL, *reason = NULL;
int res = -1;
@@ -592,9 +600,9 @@
return res;
}
-static int gtalk_is_answered(struct gtalk *client, ikspak *pak)
-{
- struct gtalk_pvt *tmp;
+static int jingle_is_answered(struct jingle *client, ikspak *pak)
+{
+ struct jingle_pvt *tmp;
char *from;
if (option_debug)
ast_log(LOG_DEBUG, "The client is %s\n", client->name);
@@ -613,13 +621,13 @@
ast_queue_control(tmp->owner, AST_CONTROL_ANSWER);
} else
ast_log(LOG_NOTICE, "Whoa, didn't find call!\n");
- gtalk_response(client, from, pak, NULL, NULL);
+ jingle_response(client, from, pak, NULL, NULL);
return 1;
}
-static int gtalk_handle_dtmf(struct gtalk *client, ikspak *pak)
-{
- struct gtalk_pvt *tmp;
+static int jingle_handle_dtmf(struct jingle *client, ikspak *pak)
+{
+ struct jingle_pvt *tmp;
iks *dtmfnode = NULL;
char *dtmf;
char *from;
@@ -635,9 +643,9 @@
if (tmp) {
if(iks_find_with_attrib(pak->x, "dtmf-method", "method", "rtp")) {
- gtalk_response(client, from, pak,
+ jingle_response(client, from, pak,
"feature-not-implemented xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'",
- "unsupported-dtmf-method xmlns='http://jabber.org/protocol/gtalk/info/dtmf#errors'");
+ "unsupported-dtmf-method xmlns='http://jabber.org/protocol/jingle/info/dtmf#errors'");
return -1;
}
if ((dtmfnode = iks_find(pak->x, "dtmf"))) {
@@ -646,33 +654,33 @@
struct ast_frame f = {AST_FRAME_DTMF_BEGIN, };
f.subclass = dtmf[0];
ast_queue_frame(tmp->owner, &f);
- ast_verbose("GOOGLE! DTMF-relay event received: %c\n", f.subclass);
+ ast_verbose("JINGLE! DTMF-relay event received: %c\n", f.subclass);
} else if(iks_find_with_attrib(pak->x, "dtmf", "action", "button-down")) {
struct ast_frame f = {AST_FRAME_DTMF_END, };
f.subclass = dtmf[0];
ast_queue_frame(tmp->owner, &f);
- ast_verbose("GOOGLE! DTMF-relay event received: %c\n", f.subclass);
+ ast_verbose("JINGLE! DTMF-relay event received: %c\n", f.subclass);
} else if(iks_find_attrib(pak->x, "dtmf")) { /* 250 millasecond default */
struct ast_frame f = {AST_FRAME_DTMF, };
f.subclass = dtmf[0];
ast_queue_frame(tmp->owner, &f);
- ast_verbose("GOOGLE! DTMF-relay event received: %c\n", f.subclass);
+ ast_verbose("JINGLE! DTMF-relay event received: %c\n", f.subclass);
}
}
}
- gtalk_response(client, from, pak, NULL, NULL);
+ jingle_response(client, from, pak, NULL, NULL);
return 1;
} else
ast_log(LOG_NOTICE, "Whoa, didn't find call!\n");
- gtalk_response(client, from, pak, NULL, NULL);
+ jingle_response(client, from, pak, NULL, NULL);
return 1;
}
-static int gtalk_hangup_farend(struct gtalk *client, ikspak *pak)
-{
- struct gtalk_pvt *tmp;
+static int jingle_hangup_farend(struct jingle *client, ikspak *pak)
+{
+ struct jingle_pvt *tmp;
char *from;
if (option_debug)
@@ -692,27 +700,27 @@
ast_queue_hangup(tmp->owner);
} else
ast_log(LOG_NOTICE, "Whoa, didn't find call!\n");
- gtalk_response(client, from, pak, NULL, NULL);
+ jingle_response(client, from, pak, NULL, NULL);
return 1;
}
-static int gtalk_create_candidates(struct gtalk *client, struct gtalk_pvt *p, char *sid, char *from, char *to)
-{
- struct gtalk_candidate *tmp;
+static int jingle_create_candidates(struct jingle *client, struct jingle_pvt *p, char *sid, char *from, char *to)
+{
+ struct jingle_candidate *tmp;
struct aji_client *c = client->connection;
- struct gtalk_candidate *ours1 = NULL, *ours2 = NULL;
+ struct jingle_candidate *ours1 = NULL, *ours2 = NULL;
struct sockaddr_in sin;
struct sockaddr_in dest;
struct in_addr us;
- iks *iq, *gtalk, *candidate, *transport;
+ iks *iq, *jingle, *candidate, *transport;
char user[17], pass[17], preference[5], port[7];
iq = iks_new("iq");
- gtalk = iks_new("session");
+ jingle = iks_new("session");
candidate = iks_new("candidate");
transport = iks_new("transport");
- if (!iq || !gtalk || !candidate || !transport) {
+ if (!iq || !jingle || !candidate || !transport) {
ast_log(LOG_ERROR, "Memory allocation error\n");
goto safeout;
}
@@ -722,8 +730,8 @@
goto safeout;
iks_insert_attrib(transport, "xmlns","http://www.google.com/transport/p2p");
- iks_insert_node(iq, gtalk);
- iks_insert_node(gtalk,transport);
+ iks_insert_node(iq, jingle);
+ iks_insert_node(jingle,transport);
iks_insert_node(transport, candidate);
for (; p; p = p->next) {
@@ -732,14 +740,14 @@
}
if (!p) {
- ast_log(LOG_NOTICE, "No matching gtalk session - SID %s!\n", sid);
+ ast_log(LOG_NOTICE, "No matching jingle session - SID %s!\n", sid);
goto safeout;
}
ast_rtp_get_us(p->rtp, &sin);
ast_find_ourip(&us, bindaddr);
- /* Setup our gtalk candidates */
+ /* Setup our jingle candidates */
ast_copy_string(ours1->name, "rtp", sizeof(ours1->name));
ours1->port = ntohs(sin.sin_port);
ours1->preference = 1;
@@ -782,10 +790,10 @@
iks_insert_attrib(iq, "type", "set");
iks_insert_attrib(iq, "id", c->mid);
ast_aji_increment_mid(c->mid);
- iks_insert_attrib(gtalk, "type", "transport-info");
- iks_insert_attrib(gtalk, "id", sid);
- iks_insert_attrib(gtalk, "initiator", (p->initiator) ? to : from);
- iks_insert_attrib(gtalk, "xmlns", GOOGLE_NS);
+ iks_insert_attrib(jingle, "type", "transport-info");
+ iks_insert_attrib(jingle, "id", sid);
+ iks_insert_attrib(jingle, "initiator", (p->initiator) ? to : from);
+ iks_insert_attrib(jingle, "xmlns", "http://www.google.com/session");
iks_insert_attrib(candidate, "name", tmp->name);
iks_insert_attrib(candidate, "address", tmp->ip);
iks_insert_attrib(candidate, "port", port);
@@ -815,8 +823,8 @@
free(ours2);
if (iq)
iks_delete(iq);
- if (gtalk)
- iks_delete(gtalk);
+ if (jingle)
+ iks_delete(jingle);
if (candidate)
iks_delete(candidate);
if(transport)
@@ -824,9 +832,9 @@
return 1;
}
-static struct gtalk_pvt *gtalk_alloc(struct gtalk *client, const char *us, const char *them, const char *sid)
-{
- struct gtalk_pvt *tmp = NULL;
+static struct jingle_pvt *jingle_alloc(struct jingle *client, const char *us, const char *them, const char *sid)
+{
+ struct jingle_pvt *tmp = NULL;
struct aji_resource *resources = NULL;
struct aji_buddy *buddy;
char idroster[200];
@@ -850,7 +858,7 @@
if (resources)
snprintf(idroster, sizeof(idroster), "%s/%s", them, resources->resource);
else {
- ast_log(LOG_ERROR, "no gtalk capable clients to talk to.\n");
+ ast_log(LOG_ERROR, "no jingle capable clients to talk to.\n");
return NULL;
}
}
@@ -882,15 +890,15 @@
exten = tmp->us;
ast_copy_string(tmp->exten, exten, sizeof(tmp->exten));
ast_mutex_init(&tmp->lock);
- ast_mutex_lock(>alklock);
+ ast_mutex_lock(&jinglelock);
tmp->next = client->p;
client->p = tmp;
- ast_mutex_unlock(>alklock);
+ ast_mutex_unlock(&jinglelock);
return tmp;
}
-/*! \brief Start new gtalk channel */
-static struct ast_channel *gtalk_new(struct gtalk *client, struct gtalk_pvt *i, int state, const char *title)
+/*! \brief Start new jingle channel */
+static struct ast_channel *jingle_new(struct jingle *client, struct jingle_pvt *i, int state, const char *title)
{
struct ast_channel *tmp;
int fmt;
@@ -901,16 +909,15 @@
n2 = title;
else
n2 = i->us;
- tmp = ast_channel_alloc(1, state, i->cid_num, i->cid_name, "Gtalk/%s-%04lx", n2, ast_random() & 0xffff);
+ tmp = ast_channel_alloc(1, state, i->cid_num, i->cid_name, "Jingle/%s-%04lx", n2, ast_random() & 0xffff);
if (!tmp) {
- ast_log(LOG_WARNING, "Unable to allocate Gtalk channel structure!\n");
+ ast_log(LOG_WARNING, "Unable to allocate Jingle channel structure!\n");
return NULL;
}
- tmp->tech = >alk_tech;
+ tmp->tech = &jingle_tech;
/* Select our native format based on codec preference until we receive
something from another device to the contrary. */
-/* ast_verbose("XXXXXXXXXXXXX\nXXX i->jointcapability = %X\nXXX i->capability = %X\nXXX global_capability %X\n XXXXXXXXXXXX\n",i->jointcapability,i->capability,global_capability); */
if (i->jointcapability)
what = i->jointcapability;
else if (i->capability)
@@ -974,7 +981,7 @@
return tmp;
}
-static int gtalk_action(struct gtalk *client, struct gtalk_pvt *p, const char *action)
+static int jingle_action(struct jingle *client, struct jingle_pvt *p, const char *action)
{
iks *request, *session = NULL;
int res = -1;
@@ -1002,9 +1009,9 @@
return res;
}
-static void gtalk_free_candidates(struct gtalk_candidate *candidate)
-{
- struct gtalk_candidate *last;
+static void jingle_free_candidates(struct jingle_candidate *candidate)
+{
+ struct jingle_candidate *last;
while (candidate) {
last = candidate;
candidate = candidate->next;
@@ -1012,9 +1019,9 @@
}
}
-static void gtalk_free_pvt(struct gtalk *client, struct gtalk_pvt *p)
-{
- struct gtalk_pvt *cur, *prev = NULL;
+static void jingle_free_pvt(struct jingle *client, struct jingle_pvt *p)
+{
+ struct jingle_pvt *cur, *prev = NULL;
cur = client->p;
while (cur) {
if (cur == p) {
@@ -1035,14 +1042,14 @@
ast_rtp_destroy(p->rtp);
if (p->vrtp)
ast_rtp_destroy(p->vrtp);
- gtalk_free_candidates(p->theircandidates);
+ jingle_free_candidates(p->theircandidates);
free(p);
}
-static int gtalk_newcall(struct gtalk *client, ikspak *pak)
-{
- struct gtalk_pvt *p, *tmp = client->p;
+static int jingle_newcall(struct jingle *client, ikspak *pak)
+{
+ struct jingle_pvt *p, *tmp = client->p;
struct ast_channel *chan;
int res;
iks *codec;
@@ -1055,18 +1062,18 @@
while (tmp) {
if (iks_find_with_attrib(pak->x, "session", "id", tmp->sid)) {
ast_log(LOG_NOTICE, "Ignoring duplicate call setup on SID %s\n", tmp->sid);
- gtalk_response(client, from, pak, "out-of-order", NULL);
+ jingle_response(client, from, pak, "out-of-order", NULL);
return -1;
}
tmp = tmp->next;
}
- p = gtalk_alloc(client, from, pak->from->full, iks_find_attrib(pak->query, "id"));
+ p = jingle_alloc(client, from, pak->from->full, iks_find_attrib(pak->query, "id"));
if (!p) {
- ast_log(LOG_WARNING, "Unable to allocate gtalk structure!\n");
+ ast_log(LOG_WARNING, "Unable to allocate jingle structure!\n");
return -1;
}
- chan = gtalk_new(client, p, AST_STATE_DOWN, pak->from->user);
+ chan = jingle_new(client, p, AST_STATE_DOWN, pak->from->user);
if (chan) {
ast_mutex_lock(&p->lock);
ast_copy_string(p->them, pak->from->full, sizeof(p->them));
@@ -1090,28 +1097,28 @@
switch (res) {
case AST_PBX_FAILED:
ast_log(LOG_WARNING, "Failed to start PBX :(\n");
- gtalk_response(client, from, pak, "service-unavailable", NULL);
+ jingle_response(client, from, pak, "service-unavailable", NULL);
break;
case AST_PBX_CALL_LIMIT:
ast_log(LOG_WARNING, "Failed to start PBX (call limit reached) \n");
- gtalk_response(client, from, pak, "service-unavailable", NULL);
+ jingle_response(client, from, pak, "service-unavailable", NULL);
break;
case AST_PBX_SUCCESS:
- gtalk_response(client, from, pak, NULL, NULL);
- gtalk_invite_response(p, p->them, p->us,p->sid, 0);
- gtalk_create_candidates(client, p, p->sid, p->them, p->us);
+ jingle_response(client, from, pak, NULL, NULL);
+ jingle_invite_response(p, 0);
+ jingle_create_candidates(client, p, p->sid, p->them, p->us);
/* nothing to do */
break;
}
} else {
- gtalk_free_pvt(client, p);
+ jingle_free_pvt(client, p);
}
return 1;
}
-static int gtalk_update_stun(struct gtalk *client, struct gtalk_pvt *p)
-{
- struct gtalk_candidate *tmp;
+static int jingle_update_stun(struct jingle *client, struct jingle_pvt *p)
+{
+ struct jingle_candidate *tmp;
struct hostent *hp;
struct ast_hostent ahp;
struct sockaddr_in sin;
@@ -1136,11 +1143,11 @@
return 1;
}
-static int gtalk_add_candidate(struct gtalk *client, ikspak *pak)
-{
- struct gtalk_pvt *p = NULL, *tmp = NULL;
+static int jingle_add_candidate(struct jingle *client, ikspak *pak)
+{
+ struct jingle_pvt *p = NULL, *tmp = NULL;
struct aji_client *c = client->connection;
- struct gtalk_candidate *newcandidate = NULL;
+ struct jingle_candidate *newcandidate = NULL;
iks *traversenodes = NULL, *receipt = NULL;
char *from;
@@ -1204,7 +1211,7 @@
newcandidate->next = p->theircandidates;
p->theircandidates = newcandidate;
p->laststun = 0;
- gtalk_update_stun(p->parent, p);
+ jingle_update_stun(p->parent, p);
newcandidate = NULL;
}
traversenodes = iks_next(traversenodes);
@@ -1221,14 +1228,14 @@
return 1;
}
-static struct ast_frame *gtalk_rtp_read(struct ast_channel *ast, struct gtalk_pvt *p)
+static struct ast_frame *jingle_rtp_read(struct ast_channel *ast, struct jingle_pvt *p)
{
struct ast_frame *f;
if (!p->rtp)
return &ast_null_frame;
f = ast_rtp_read(p->rtp);
- gtalk_update_stun(p->parent, p);
+ jingle_update_stun(p->parent, p);
if (p->owner) {
/* We already hold the channel lock */
if (f->frametype == AST_FRAME_VOICE) {
@@ -1243,29 +1250,28 @@
/* if ((ast_test_flag(p, SIP_DTMF) == SIP_DTMF_INBAND) && p->vad) {
f = ast_dsp_process(p->owner, p->vad, f);
if (option_debug && f && (f->frametype == AST_FRAME_DTMF))
- if (option_debug)
- ast_log(LOG_DEBUG, "* Detected inband DTMF '%c'\n", f->subclass);
+ ast_log(LOG_DEBUG, "* Detected inband DTMF '%c'\n", f->subclass);
} */
}
}
return f;
}
-static struct ast_frame *gtalk_read(struct ast_channel *ast)
+static struct ast_frame *jingle_read(struct ast_channel *ast)
{
struct ast_frame *fr;
- struct gtalk_pvt *p = ast->tech_pvt;
+ struct jingle_pvt *p = ast->tech_pvt;
ast_mutex_lock(&p->lock);
- fr = gtalk_rtp_read(ast, p);
+ fr = jingle_rtp_read(ast, p);
ast_mutex_unlock(&p->lock);
return fr;
}
/*! \brief Send frame to media channel (rtp) */
-static int gtalk_write(struct ast_channel *ast, struct ast_frame *frame)
-{
- struct gtalk_pvt *p = ast->tech_pvt;
+static int jingle_write(struct ast_channel *ast, struct ast_frame *frame)
+{
+ struct jingle_pvt *p = ast->tech_pvt;
int res = 0;
switch (frame->frametype) {
@@ -1298,7 +1304,7 @@
return 0;
break;
default:
- ast_log(LOG_WARNING, "Can't send %d type frames with Gtalk write\n",
+ ast_log(LOG_WARNING, "Can't send %d type frames with Jingle write\n",
frame->frametype);
return 0;
}
@@ -1306,9 +1312,9 @@
return res;
}
-static int gtalk_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
-{
- struct gtalk_pvt *p = newchan->tech_pvt;
+static int jingle_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
+{
+ struct jingle_pvt *p = newchan->tech_pvt;
ast_mutex_lock(&p->lock);
if ((p->owner != oldchan)) {
@@ -1321,7 +1327,7 @@
return 0;
}
-static int gtalk_indicate(struct ast_channel *ast, int condition, const void *data, size_t datalen)
+static int jingle_indicate(struct ast_channel *ast, int condition, const void *data, size_t datalen)
{
int res = 0;
@@ -1340,30 +1346,20 @@
return res;
}
-static int gtalk_digit_begin(struct ast_channel *chan, char digit)
-{
- return gtalk_digit(chan, digit, 0);
-}
-
-static int gtalk_digit_end(struct ast_channel *chan, char digit, unsigned int duration)
-{
- return gtalk_digit(chan, digit, duration);
-}
-
-static int gtalk_digit(struct ast_channel *ast, char digit, unsigned int duration)
-{
- struct gtalk_pvt *p = ast->tech_pvt;
- struct gtalk *client = p->parent;
- iks *iq, *gtalk, *dtmf;
+static int jingle_digit(struct ast_channel *ast, char digit, unsigned int duration)
+{
+ struct jingle_pvt *p = ast->tech_pvt;
+ struct jingle *client = p->parent;
+ iks *iq, *jingle, *dtmf;
char buffer[2] = {digit, '\0'};
iq = iks_new("iq");
- gtalk = iks_new("gtalk");
+ jingle = iks_new("jingle");
dtmf = iks_new("dtmf");
- if(!iq || !gtalk || !dtmf) {
+ if(!iq || !jingle || !dtmf) {
if(iq)
iks_delete(iq);
- if(gtalk)
- iks_delete(gtalk);
+ if(jingle)
+ iks_delete(jingle);
if(dtmf)
iks_delete(dtmf);
ast_log(LOG_ERROR, "Did not send dtmf do to memory issue\n");
@@ -1375,14 +1371,14 @@
iks_insert_attrib(iq, "from", p->us);
iks_insert_attrib(iq, "id", client->connection->mid);
ast_aji_increment_mid(client->connection->mid);
- iks_insert_attrib(gtalk, "xmlns", "http://jabber.org/protocol/gtalk");
- iks_insert_attrib(gtalk, "action", "content-info");
- iks_insert_attrib(gtalk, "initiator", p->initiator ? p->us: p->them);
- iks_insert_attrib(gtalk, "sid", p->sid);
- iks_insert_attrib(dtmf, "xmlns", "http://jabber.org/protocol/gtalk/info/dtmf");
+ iks_insert_attrib(jingle, "xmlns", "http://jabber.org/protocol/jingle");
+ iks_insert_attrib(jingle, "action", "content-info");
+ iks_insert_attrib(jingle, "initiator", p->initiator ? p->us : p->them);
+ iks_insert_attrib(jingle, "sid", p->sid);
+ iks_insert_attrib(dtmf, "xmlns", "http://jabber.org/protocol/jingle/info/dtmf");
iks_insert_attrib(dtmf, "code", buffer);
- iks_insert_node(iq, gtalk);
- iks_insert_node(gtalk, dtmf);
+ iks_insert_node(iq, jingle);
+ iks_insert_node(jingle, dtmf);
ast_mutex_lock(&p->lock);
if (ast->dtmff.frametype == AST_FRAME_DTMF_BEGIN) {
@@ -1392,23 +1388,33 @@
}
iks_send(client->connection->p, iq);
iks_delete(iq);
- iks_delete(gtalk);
+ iks_delete(jingle);
iks_delete(dtmf);
ast_mutex_unlock(&p->lock);
return 0;
}
-static int gtalk_sendhtml(struct ast_channel *ast, int subclass, const char *data, int datalen)
-{
- ast_log(LOG_NOTICE, "XXX Implement gtalk sendhtml XXX\n");
+static int jingle_digit_begin(struct ast_channel *ast, char digit)
+{
+ return jingle_digit(ast, digit, 0);
+}
+
+static int jingle_digit_end(struct ast_channel *ast, char digit, unsigned int duration)
+{
+ return jingle_digit(ast, digit, duration);
+}
+
+static int jingle_sendhtml(struct ast_channel *ast, int subclass, const char *data, int datalen)
+{
+ ast_log(LOG_NOTICE, "XXX Implement jingle sendhtml XXX\n");
return -1;
}
/* Not in use right now.
-static int gtalk_auto_congest(void *nothing)
-{
- struct gtalk_pvt *p = nothing;
+static int jingle_auto_congest(void *nothing)
+{
+ struct jingle_pvt *p = nothing;
ast_mutex_lock(&p->lock);
if (p->owner) {
@@ -1425,12 +1431,12 @@
/*! \brief Initiate new call, part of PBX interface
* dest is the dial string */
-static int gtalk_call(struct ast_channel *ast, char *dest, int timeout)
-{
- struct gtalk_pvt *p = ast->tech_pvt;
+static int jingle_call(struct ast_channel *ast, char *dest, int timeout)
+{
+ struct jingle_pvt *p = ast->tech_pvt;
if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
- ast_log(LOG_WARNING, "gtalk_call called on %s, neither down nor reserved\n", ast->name);
+ ast_log(LOG_WARNING, "jingle_call called on %s, neither down nor reserved\n", ast->name);
return -1;
}
@@ -1438,42 +1444,42 @@
p->jointcapability = p->capability;
if (!p->ringrule) {
ast_copy_string(p->ring, p->parent->connection->mid, sizeof(p->ring));
- p->ringrule = iks_filter_add_rule(p->parent->connection->f, gtalk_ringing_ack, p,
+ p->ringrule = iks_filter_add_rule(p->parent->connection->f, jingle_ringing_ack, p,
IKS_RULE_ID, p->ring, IKS_RULE_DONE);
} else
ast_log(LOG_WARNING, "Whoa, already have a ring rule!\n");
- gtalk_invite(p, p->them, p->us, p->sid, 1);
- gtalk_create_candidates(p->parent, p, p->sid, p->them, p->us);
+ jingle_invite(p);
+ jingle_create_candidates(p->parent, p, p->sid, p->them, p->us);
return 0;
}
-/*! \brief Hangup a call through the gtalk proxy channel */
-static int gtalk_hangup(struct ast_channel *ast)
-{
- struct gtalk_pvt *p = ast->tech_pvt;
- struct gtalk *client;
+/*! \brief Hangup a call through the jingle proxy channel */
+static int jingle_hangup(struct ast_channel *ast)
+{
+ struct jingle_pvt *p = ast->tech_pvt;
+ struct jingle *client;
ast_mutex_lock(&p->lock);
client = p->parent;
p->owner = NULL;
ast->tech_pvt = NULL;
if (!p->alreadygone)
- gtalk_action(client, p, "terminate");
+ jingle_action(client, p, "terminate");
ast_mutex_unlock(&p->lock);
- gtalk_free_pvt(client, p);
+ jingle_free_pvt(client, p);
ast_module_unref(ast_module_info->self);
return 0;
}
/*! \brief Part of PBX interface */
-static struct ast_channel *gtalk_request(const char *type, int format, void *data, int *cause)
-{
- struct gtalk_pvt *p = NULL;
- struct gtalk *client = NULL;
+static struct ast_channel *jingle_request(const char *type, int format, void *data, int *cause)
+{
+ struct jingle_pvt *p = NULL;
+ struct jingle *client = NULL;
char *sender = NULL, *to = NULL, *s = NULL;
struct ast_channel *chan = NULL;
@@ -1484,77 +1490,77 @@
if (sender && (sender[0] != '\0'))
to = strsep(&s, "/");
if (!to) {
- ast_log(LOG_ERROR, "Bad arguments in Gtalk Dialstring: %s\n", (char*) data);
+ ast_log(LOG_ERROR, "Bad arguments in Jingle Dialstring: %s\n", (char*) data);
return NULL;
}
}
}
- client = find_gtalk(to, sender);
+ client = find_jingle(to, sender);
if (!client) {
ast_log(LOG_WARNING, "Could not find recipient.\n");
return NULL;
}
ASTOBJ_WRLOCK(client);
- p = gtalk_alloc(client, strchr(sender, '@') ? sender : client->connection->jid->full, strchr(to, '@') ? to : client->user, NULL);
+ p = jingle_alloc(client, strchr(sender, '@') ? sender : client->connection->jid->full, strchr(to, '@') ? to : client->user, NULL);
if (p)
- chan = gtalk_new(client, p, AST_STATE_DOWN, to);
+ chan = jingle_new(client, p, AST_STATE_DOWN, to);
ASTOBJ_UNLOCK(client);
return chan;
}
-/*! \brief CLI command "gtalk show channels" */
-static int gtalk_show_channels(int fd, int argc, char **argv)
+/*! \brief CLI command "jingle show channels" */
+static int jingle_show_channels(int fd, int argc, char **argv)
{
if (argc != 3)
return RESULT_SHOWUSAGE;
- ast_mutex_lock(>alklock);
-// if (!gtalk_list->p)
- ast_cli(fd, "No gtalk channels in use\n");
- ast_mutex_unlock(>alklock);
+ ast_mutex_lock(&jinglelock);
+// if (!jingles->p)
[... 289 lines stripped ...]
More information about the asterisk-commits
mailing list