[asterisk-commits] branch mogorman/asterisk-xmpp r19506 - in
/team/mogorman/asterisk-xmpp: chann...
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Tue Apr 11 20:49:44 MST 2006
Author: mogorman
Date: Tue Apr 11 22:49:43 2006
New Revision: 19506
URL: http://svn.digium.com/view/asterisk?rev=19506&view=rev
Log:
ITS COMPILING... dare i run it
Modified:
team/mogorman/asterisk-xmpp/channels/chan_jingle.c
team/mogorman/asterisk-xmpp/include/asterisk/jabber.h
team/mogorman/asterisk-xmpp/res/res_jabber.c
Modified: team/mogorman/asterisk-xmpp/channels/chan_jingle.c
URL: http://svn.digium.com/view/asterisk/team/mogorman/asterisk-xmpp/channels/chan_jingle.c?rev=19506&r1=19505&r2=19506&view=diff
==============================================================================
--- team/mogorman/asterisk-xmpp/channels/chan_jingle.c (original)
+++ team/mogorman/asterisk-xmpp/channels/chan_jingle.c Tue Apr 11 22:49:43 2006
@@ -89,7 +89,7 @@
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_answer2(struct aji_client *client, ikspak *pak);
+static int jingle_answer2(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);
@@ -143,19 +143,6 @@
static int flipflop = 0;
-struct jingle *find_jingle(struct aji_client *client, ikspak *pak)
-{
- struct jingle *res=NULL;
- ASTOBJ_CONTAINER_TRAVERSE(&jingles,1, {
- ASTOBJ_RDLOCK(iterator);
- if(iterator->connection==client ) {
- if(!strncasecmp(iterator->user,pak->from->full,sizeof(iterator->user)))
- res = iterator;
- }
- ASTOBJ_UNLOCK(iterator);
- });
- return res;
-}
static int jingle_queue_frame(struct jingle_pvt *p, int isoutbound, struct ast_frame *f, struct ast_channel *us)
{
@@ -270,19 +257,16 @@
return 0;
}
-static int jingle_bridge_call(struct aji_client *client,ikspak *pak)
+static int jingle_bridge_call(struct jingle *client,ikspak *pak)
{
char *data, sid[100];
- struct jingle_pvt *p=NULL;
- struct jingle *peer=NULL;
+ struct jingle_pvt *p=client->p;
struct ast_channel *bridgepeer = NULL;
struct hostent *hp;
struct ast_hostent ahp;
char iabuf[INET_ADDRSTRLEN];
struct sockaddr_in sin;
- if((peer = find_jingle(client,pak)))
- p = peer->p;
ast_verbose("ONLY A Little further %s\n",(iks_find_attrib(pak->x,"id")));
data = iks_find_attrib(pak->x,"id");
data = data + 9;
@@ -312,7 +296,7 @@
ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
ast_getformatname_multiple(s1, slen, p->jointcapability),
ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
- p->owner->nativeformats = ast_codec_choose(&peer->prefs, p->jointcapability, 1);
+ p->owner->nativeformats = ast_codec_choose(&client->prefs, p->jointcapability, 1);
ast_set_read_format(p->owner, p->owner->readformat);
ast_set_write_format(p->owner, p->owner->writeformat);
}
@@ -365,25 +349,23 @@
return 1;
}
-static int jingle_hangup_farend(struct aji_client *client,ikspak *pak)
+static int jingle_hangup_farend(struct jingle *client,ikspak *pak)
{
ast_verbose("END CALL\n");
return 1;
}
-static int jingle_create_candidates(struct aji_client *client,ikspak *pak)
+static int jingle_create_candidates(struct jingle *client,ikspak *pak)
{
struct jingle_candidate *tmp;
- struct jingle_pvt *p = NULL;
- struct jingle *peer= NULL;
+ struct jingle_pvt *p = client->p;
+ struct aji_client *c = client->connection;
struct sockaddr_in sin;
struct sockaddr_in dest;
char iabuf[INET_ADDRSTRLEN];
iks *iq, *jingle, *candidate;
char user[17], pass[17], preference[5], port[7];
- if((peer = find_jingle(client,pak)))
- p = peer->p;
tmp = p->candidates;
iq = iks_new("iq");
jingle = iks_new(GOOGLE_NODE);
@@ -411,11 +393,11 @@
snprintf(user, sizeof(user),"%08x%08x",thread_safe_rand() ,thread_safe_rand());
snprintf(pass, sizeof(pass),"%08x%08x",thread_safe_rand(), thread_safe_rand());
snprintf(preference,sizeof(preference),"%.2f",tmp->preference);
- iks_insert_attrib(iq,"from", client->jid->full);
+ iks_insert_attrib(iq,"from", c->jid->full);
iks_insert_attrib(iq,"to", iks_find_attrib(pak->x,"from"));
iks_insert_attrib(iq,"type", "set");
- iks_insert_attrib(iq,"id", client->mid);
- aji_increment_mid(client->mid);
+ iks_insert_attrib(iq,"id", c->mid);
+ ast_aji_increment_mid(c->mid);
iks_insert_attrib(jingle,"type", "candidates");
iks_insert_attrib(jingle,"id", iks_find_attrib(pak->query,GOOGLE_SID));
iks_insert_attrib(jingle,"initiator",iks_find_attrib(pak->x,"from"));
@@ -439,17 +421,17 @@
iks_insert_attrib(candidate, "type", "relay");
iks_insert_attrib(candidate, "network", "0");
iks_insert_attrib(candidate, "generation", "0");
- iks_send(client->p,iq);
+ iks_send(c->p,iq);
tmp=tmp->next;
}
if(!p->candidates) { /*send default stun, and local, and relay */
snprintf(user, sizeof(user),"%08x%08x",thread_safe_rand(),thread_safe_rand());
snprintf(pass, sizeof(pass),"%08x%08x",thread_safe_rand(),thread_safe_rand());
- iks_insert_attrib(iq,"from", client->jid->full);
+ iks_insert_attrib(iq,"from", c->jid->full);
iks_insert_attrib(iq,"to", iks_find_attrib(pak->x,"from"));
iks_insert_attrib(iq,"type", "set");
- iks_insert_attrib(iq,"id", client->mid);
- aji_increment_mid(client->mid);
+ iks_insert_attrib(iq,"id", c->mid);
+ ast_aji_increment_mid(c->mid);
iks_insert_attrib(jingle,"type", "candidates");
iks_insert_attrib(jingle,"id", iks_find_attrib(pak->query,GOOGLE_SID));
iks_insert_attrib(jingle,"initiator",iks_find_attrib(pak->x,"from"));
@@ -464,24 +446,24 @@
iks_insert_attrib(candidate, "type", "local");
iks_insert_attrib(candidate, "network", "0");
iks_insert_attrib(candidate, "generation", "0");
- iks_send(client->p,iq);
+ iks_send(c->p,iq);
snprintf(user, sizeof(user),"%08x%08x",thread_safe_rand(),thread_safe_rand());
snprintf(pass, sizeof(pass),"%08x%08x",thread_safe_rand(),thread_safe_rand());
- iks_insert_attrib(iq,"id", client->mid);
- aji_increment_mid(client->mid);
+ iks_insert_attrib(iq,"id", c->mid);
+ ast_aji_increment_mid(c->mid);
iks_insert_attrib(candidate, "address", externip);
iks_insert_attrib(candidate, "port", port);
iks_insert_attrib(candidate, "username", user);
iks_insert_attrib(candidate, "password", pass);
iks_insert_attrib(candidate, "preference", "0.9");
iks_insert_attrib(candidate, "type", "stun");
- iks_send(client->p,iq);
+ iks_send(c->p,iq);
snprintf(user, sizeof(user),"%08x%08x",thread_safe_rand(),thread_safe_rand());
snprintf(pass, sizeof(pass),"%08x%08x",thread_safe_rand(),thread_safe_rand());
- iks_insert_attrib(iq,"id", client->mid);
- aji_increment_mid(client->mid);
+ iks_insert_attrib(iq,"id", c->mid);
+ ast_aji_increment_mid(c->mid);
iks_insert_attrib(candidate, "address", localip);
iks_insert_attrib(candidate, "port", port); /*FIX ME*/
iks_insert_attrib(candidate, "username", user);
@@ -489,7 +471,7 @@
iks_insert_attrib(candidate, "preference", "0.5");
iks_insert_attrib(candidate, "protocol", "ssltcp");
iks_insert_attrib(candidate, "type", "relay");
- iks_send(client->p,iq);
+ iks_send(c->p,iq);
}
iks_delete(candidate);
iks_delete(jingle);
@@ -545,18 +527,15 @@
ast_rtp_lookup_code(p->rtp, 1, codec);
}
-static int jingle_accept_call(struct aji_client *client, ikspak *pak)
-{
- struct jingle_pvt *tmp = NULL;
- struct jingle *peer = NULL;
+static int jingle_accept_call(struct jingle *client, ikspak *pak)
+{
+ struct jingle_pvt *tmp = client->p;
+ struct aji_client *c = client->connection;
iks *iq, *jingle, *description, /* *payload_ipcmwb, *payload_isac,*/ *payload_red, *payload_audio, *payload_cn;
int x;
int pref_codec = 0;
int alreadysent = 0;
char mid[50];
-
- if((peer = find_jingle(client,pak)))
- tmp = peer->p;
while(tmp) {
if(!strcasecmp(tmp->sid,iks_find_attrib(pak->query,GOOGLE_SID))) {
@@ -566,9 +545,9 @@
iks_insert_attrib(description,"xmlns",GOOGLE_NS);
for (x = 0; x < 32; x++) {
- if (!(pref_codec = ast_codec_pref_index(&peer->prefs, x)))
+ if (!(pref_codec = ast_codec_pref_index(&client->prefs, x)))
break;
- if (!(peer->capability & pref_codec))
+ if (!(client->capability & pref_codec))
continue;
if (alreadysent & pref_codec)
continue;
@@ -601,7 +580,7 @@
iks_insert_attrib(iq,"type","set");
- iks_insert_attrib(iq,"from",client->jid->full);
+ iks_insert_attrib(iq,"from",c->jid->full);
iks_insert_attrib(iq,"to",iks_find_attrib(pak->x,"from"));
snprintf(mid,sizeof(mid),"j:active:%s",tmp->sid);
iks_insert_attrib(iq,"id",mid);
@@ -618,7 +597,7 @@
iks_insert_node(description,payload_audio);
iks_insert_node(description,payload_cn);
- iks_send(client->p,iq);
+ iks_send(c->p,iq);
/* iks_delete(payload_ipcmwb);
iks_delete(payload_isac); */
iks_delete(payload_red);
@@ -633,13 +612,9 @@
return 1;
}
-static struct jingle_pvt *jingle_alloc2(struct aji_client *client, ikspak *pak)
-{
- struct jingle_pvt *tmp = NULL;
- struct jingle *peer =NULL;
-
- if((peer = find_jingle(client,pak)))
- tmp = peer->p;
+static struct jingle_pvt *jingle_alloc2(struct jingle *client, ikspak *pak)
+{
+ struct jingle_pvt *tmp = client->p;
if (!(tmp = ast_calloc(1, sizeof(*tmp)))) {
return NULL;
@@ -648,21 +623,19 @@
ast_mutex_init(&tmp->lock);
ast_mutex_lock(&jinglelock);
- tmp->next = peer->p;
- peer->p = tmp;
+ tmp->next = client->p;
+ client->p = tmp;
ast_mutex_unlock(&jinglelock);
return tmp;
}
-static int jingle_answer2(struct aji_client *client,ikspak *pak)
-{
- struct jingle_pvt *p ,*tmp = NULL;
- struct jingle *peer = NULL;
+static int jingle_answer2(struct jingle *client,ikspak *pak)
+{
+ struct jingle_pvt *p ,*tmp = client->p;
+ struct aji_client *c = client->connection;
struct ast_channel *chan;
iks *accept, *codec;
- if((peer = find_jingle(client,pak)))
- tmp = peer->p;
codec = iks_child(iks_child(iks_child(pak->x)));
chan = ast_channel_alloc(1);
@@ -693,19 +666,19 @@
ast_mutex_unlock(&p->lock);
accept = iks_new("iq");
iks_insert_attrib(accept,"type","result");
- iks_insert_attrib(accept,"from",client->jid->full);
+ iks_insert_attrib(accept,"from",c->jid->full);
iks_insert_attrib(accept,"to",iks_find_attrib(pak->x,"from"));
iks_insert_attrib(accept,"id",iks_find_attrib(pak->x,"id"));
- iks_send(client->p,accept);
+ iks_send(c->p,accept);
iks_delete(accept);
jingle_create_candidates(client,pak);
return 1;
}
-static int jingle_add_candidate(struct aji_client *client,ikspak *pak)
+static int jingle_add_candidate(struct jingle *client,ikspak *pak)
{
struct jingle_pvt *p =NULL,*tmp = NULL;
- struct jingle *peer = NULL;
+ struct aji_client *c = client->connection;
struct jingle_candidate *newcandidate = NULL;
struct sockaddr_in sin;
struct hostent *hp;
@@ -715,7 +688,7 @@
iks *receipt = NULL;
newcandidate = (struct jingle_candidate *)malloc(sizeof(struct jingle_candidate));
if(!newcandidate)
- return NULL;
+ return 0;
memset(newcandidate,0,sizeof(struct jingle_candidate));
candidate_node = iks_find(pak->query,"candidate");
ast_copy_string(newcandidate->name,iks_find_attrib(candidate_node, "name"),sizeof(newcandidate->name));
@@ -764,10 +737,10 @@
ast_verbose("sending\n");
receipt = iks_new("iq");
iks_insert_attrib(receipt,"type","result");
- iks_insert_attrib(receipt,"from",client->jid->full);
+ iks_insert_attrib(receipt,"from",c->jid->full);
iks_insert_attrib(receipt,"to",iks_find_attrib(pak->x,"from"));
iks_insert_attrib(receipt,"id",iks_find_attrib(pak->x,"id"));
- iks_send(client->p,receipt);
+ iks_send(c->p,receipt);
iks_delete(receipt);
return 1;
}
@@ -1121,7 +1094,7 @@
static int jingle_parser(void *udata, ikspak *pak)
{
- struct aji_client *client= ASTOBJ_REF((struct aji_client *) udata);;
+ struct jingle *client= ASTOBJ_REF((struct jingle *) udata);;
ast_verbose("WOOHOO!!!\n");
if(iks_find_with_attrib(pak->x,GOOGLE_NODE,"type",JINGLE_INITIATE))
@@ -1181,7 +1154,7 @@
if((client = ast_aji_get_client(var->value))) {
// client->jingle=member;
member->connection=client;
- // iks_filter_add_rule(client->f,jingle_parser, client, IKS_RULE_TYPE, IKS_RULE_FROM_PARTIAL, member->user, IKS_PAK_IQ, IKS_RULE_NS, "http://www.google.com/session", IKS_RULE_DONE);
+ iks_filter_add_rule(client->f,jingle_parser, member, IKS_RULE_TYPE, IKS_RULE_FROM_PARTIAL, member->user, IKS_PAK_IQ, IKS_RULE_NS, "http://www.google.com/session", IKS_RULE_DONE);
} else {
ast_log(LOG_ERROR, "connection referenced not found!\n"); return 0;
}
@@ -1249,17 +1222,20 @@
ast_copy_string(member->context,var->value,sizeof(member->context));
var = var->next;
}
+ ASTOBJ_UNLOCK(member);
clients = ast_aji_get_clients();
if(clients) {
ASTOBJ_CONTAINER_TRAVERSE(clients,1,{
ASTOBJ_WRLOCK(iterator);
- iks_filter_add_rule(iterator->f,jingle_parser, iterator, IKS_RULE_TYPE, IKS_PAK_IQ, IKS_RULE_NS, "http://www.google.com/session", IKS_RULE_DONE);
+ ASTOBJ_WRLOCK(member);
+ member->connection = iterator;
+ iks_filter_add_rule(iterator->f,jingle_parser, member, IKS_RULE_TYPE, IKS_PAK_IQ, IKS_RULE_NS, "http://www.google.com/session", IKS_RULE_DONE);
+ ASTOBJ_UNLOCK(member);
+ ASTOBJ_CONTAINER_LINK(&jingles,member);
ASTOBJ_UNLOCK(iterator);
});
}
-
ASTOBJ_UNLOCK(member);
- ASTOBJ_CONTAINER_LINK(&jingles,member);
ASTOBJ_UNREF(member,jingle_member_destroy);
} else {
if(jingle_create_member(cat, var, allowguest, prefs, context,member)) {
@@ -1322,7 +1298,7 @@
/*! \brief Unload the jingle channel from Asterisk */
int unload_module()
{
- struct jingle_pvt *p = NULL;
+// struct jingle_pvt *p = NULL;
struct aji_client *client = NULL;
client = ast_aji_get_client("asterisk");
/* First, take us out of the channel loop */
Modified: team/mogorman/asterisk-xmpp/include/asterisk/jabber.h
URL: http://svn.digium.com/view/asterisk/team/mogorman/asterisk-xmpp/include/asterisk/jabber.h?rev=19506&r1=19505&r2=19506&view=diff
==============================================================================
--- team/mogorman/asterisk-xmpp/include/asterisk/jabber.h (original)
+++ team/mogorman/asterisk-xmpp/include/asterisk/jabber.h Tue Apr 11 22:49:43 2006
@@ -116,6 +116,7 @@
int ast_aji_send(struct aji_client *client, char *address, char *message);
int ast_aji_disconnect(struct aji_client *client);
int ast_aji_check_roster(void);
+void ast_aji_increment_mid(char *mid);
int ast_aji_create_chat(struct aji_client *client,char *room, char *server, char *topic);
int ast_aji_invite_chat(struct aji_client *client, char *user, char *room, char *message);
int ast_aji_join_chat(struct aji_client *client,char *room);
Modified: team/mogorman/asterisk-xmpp/res/res_jabber.c
URL: http://svn.digium.com/view/asterisk/team/mogorman/asterisk-xmpp/res/res_jabber.c?rev=19506&r1=19505&r2=19506&view=diff
==============================================================================
--- team/mogorman/asterisk-xmpp/res/res_jabber.c (original)
+++ team/mogorman/asterisk-xmpp/res/res_jabber.c Tue Apr 11 22:49:43 2006
@@ -77,7 +77,6 @@
static void aji_pruneregister(struct aji_client *client);
static int aji_register_transport(void *udata,ikspak *pak);
static int aji_register_transport2(void *udata,ikspak *pak);
-void aji_increment_mid(char *mid);
static int aji_filter_roster(void *udata,ikspak *pak);
static int aji_dinfo_handler(void *udata,ikspak *pak);
static int aji_ditems_handler(void *udata,ikspak *pak);
@@ -304,7 +303,7 @@
auth = iks_make_auth(client->jid,client->password,iks_find_attrib(node,"id"));
iks_insert_attrib(auth,"id",client->mid);
- aji_increment_mid(client->mid);
+ ast_aji_increment_mid(client->mid);
iks_send(client->p,auth);
if(auth)
iks_delete(auth);
@@ -324,7 +323,7 @@
if(features & IKS_STREAM_BIND) {
iks_filter_add_rule (client->f, aji_client_connect, client, IKS_RULE_TYPE, IKS_PAK_IQ, IKS_RULE_SUBTYPE, IKS_TYPE_RESULT, IKS_RULE_DONE);
auth = iks_make_resource_bind(client->jid);
- aji_increment_mid(client->mid);
+ ast_aji_increment_mid(client->mid);
iks_send(client->p,auth);
if(auth)
iks_delete(auth);
@@ -333,7 +332,7 @@
iks_filter_add_rule (client->f, aji_client_connect, client, IKS_RULE_TYPE, IKS_PAK_IQ, IKS_RULE_SUBTYPE, IKS_TYPE_RESULT, IKS_RULE_ID, "auth", IKS_RULE_DONE);
auth =iks_make_session();
iks_insert_attrib(auth,"id","auth");
- aji_increment_mid(client->mid);
+ ast_aji_increment_mid(client->mid);
iks_send(client->p,auth);
if(auth)
iks_delete(auth);
@@ -769,7 +768,7 @@
iks_insert_attrib(iq,"type","get");
iks_insert_attrib(iq,"to",server);
iks_insert_attrib(iq,"id",client->mid);
- aji_increment_mid(client->mid);
+ ast_aji_increment_mid(client->mid);
return res;
}
@@ -821,7 +820,7 @@
namespace = iks_new("x");
iks_insert_attrib(invite,"to",user);
iks_insert_attrib(invite,"id",client->mid);
- aji_increment_mid(client->mid);
+ ast_aji_increment_mid(client->mid);
iks_insert_cdata(body,message,strlen(message));
iks_insert_attrib(namespace,"xmlns","jabber:x:conference");
iks_insert_attrib(namespace,"jid",room);
@@ -878,7 +877,7 @@
* \param message id.
* \return void.
*/
-void aji_increment_mid(char *mid)
+void ast_aji_increment_mid(char *mid)
{
int i=0;
for(i=strlen(mid)-1;i >= 0;i--)
@@ -921,7 +920,7 @@
send =iks_make_iq(IKS_TYPE_GET,"jabber:iq:register");
iks_insert_attrib(send,"to",buddy->host);
iks_insert_attrib(send,"id",client->mid);
- aji_increment_mid(client->mid);
+ ast_aji_increment_mid(client->mid);
iks_insert_attrib(send,"from",client->user);
res =iks_send(client->p,send);
if(send)
@@ -961,7 +960,7 @@
iks_insert_attrib(regiq,"to",buddy->host);
iks_insert_attrib(regiq,"type","set");
iks_insert_attrib(regiq,"id",client->mid);
- aji_increment_mid(client->mid);
+ ast_aji_increment_mid(client->mid);
iks_insert_attrib(regiq,"from",client->user);
iks_insert_attrib(regquery,"xmlns","jabber:iq:register");
iks_insert_cdata(reguser,buddy->user,strlen(buddy->user));
More information about the asterisk-commits
mailing list