[asterisk-commits] branch mogorman/asterisk-xmpp r20131 - /team/mogorman/asterisk-xmpp/channels/

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Fri Apr 14 13:36:29 MST 2006


Author: markster
Date: Fri Apr 14 15:36:28 2006
New Revision: 20131

URL: http://svn.digium.com/view/asterisk?rev=20131&view=rev
Log:
Get answer code isolated into proper answer location!

Modified:
    team/mogorman/asterisk-xmpp/channels/chan_jingle.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=20131&r1=20130&r2=20131&view=diff
==============================================================================
--- team/mogorman/asterisk-xmpp/channels/chan_jingle.c (original)
+++ team/mogorman/asterisk-xmpp/channels/chan_jingle.c Fri Apr 14 15:36:28 2006
@@ -193,16 +193,132 @@
 	return 0;
 }
 
+static void add_codec_to_answer(const struct jingle_pvt *p, int codec, iks *description)
+{
+	ast_verbose("Adding codec 0x%x (%s) to SDP\n", codec, ast_getformatname(codec));
+	if(!strcasecmp("ulaw",ast_getformatname(codec))) {
+		iks *payload_eg711u , *payload_pcmu;
+		payload_pcmu = iks_new("payload-type");
+		iks_insert_attrib(payload_pcmu,"id","0");
+		iks_insert_attrib(payload_pcmu,"name","PCMU");
+		iks_insert_attrib(payload_pcmu,"xmlns",GOOGLE_NS);
+		payload_eg711u = iks_new("payload-type");
+		iks_insert_attrib(payload_eg711u,"id","100");
+		iks_insert_attrib(payload_eg711u,"name","EG711U");
+		iks_insert_attrib(payload_eg711u,"xmlns",GOOGLE_NS);
+		iks_insert_node(description,payload_pcmu);
+		iks_insert_node(description,payload_eg711u);
+	}
+	if(!strcasecmp("alaw",ast_getformatname(codec))) {
+		iks *payload_eg711a , *payload_pcma;
+		payload_pcma = iks_new("payload-type");
+		iks_insert_attrib(payload_pcma,"id","8");
+		iks_insert_attrib(payload_pcma,"name","PCMA");
+		iks_insert_attrib(payload_pcma,"xmlns",GOOGLE_NS);
+		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,"xmlns",GOOGLE_NS);
+		iks_insert_node(description,payload_pcma);
+		iks_insert_node(description,payload_eg711a);
+	}
+	if(!strcasecmp("ilbc",ast_getformatname(codec))) {
+		iks *payload_ilbc;
+		payload_ilbc= iks_new("payload-type");
+		iks_insert_attrib(payload_ilbc,"id","102");
+		iks_insert_attrib(payload_ilbc,"name","iLBC");
+		iks_insert_attrib(payload_ilbc,"xmlns",GOOGLE_NS);
+		iks_insert_node(description,payload_ilbc);
+	}
+	if(!strcasecmp("g723",ast_getformatname(codec))) {
+		iks *payload_g723;
+		payload_g723= iks_new("payload-type");
+		iks_insert_attrib(payload_g723,"id","4");
+		iks_insert_attrib(payload_g723,"name","G723");
+		iks_insert_attrib(payload_g723,"xmlns",GOOGLE_NS);
+		iks_insert_node(description,payload_g723);
+	}
+	ast_rtp_lookup_code(p->rtp, 1, codec);
+}
+
+static int jingle_accept_call(struct jingle *client, struct jingle_pvt *p)
+{
+	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];
+
+	iq = iks_new("iq");
+	jingle = iks_new(GOOGLE_NODE);
+	description = iks_new("description");
+	if (iq && jingle && description) {
+		iks_insert_attrib(description,"xmlns",GOOGLE_NS);
+
+		for (x = 0; x < 32; x++) {
+			if (!(pref_codec = ast_codec_pref_index(&client->prefs, x)))
+				 break;
+			if (!(client->capability & pref_codec))
+				continue;
+			if (alreadysent & pref_codec)
+				continue;
+			if (pref_codec <= AST_FORMAT_MAX_AUDIO)
+				add_codec_to_answer(p, pref_codec, description);
+			else
+				add_codec_to_answer(p, pref_codec, description);
+			alreadysent |= pref_codec;
+		}
+		payload_red= iks_new("payload-type");
+			iks_insert_attrib(payload_red,"id","117");
+			iks_insert_attrib(payload_red,"name","red");
+			iks_insert_attrib(payload_red,"xmlns",GOOGLE_NS);
+		payload_audio= iks_new("payload-type");
+			iks_insert_attrib(payload_audio,"id","106");
+			iks_insert_attrib(payload_audio,"name","audio/telephone-event");
+			iks_insert_attrib(payload_audio,"xmlns",GOOGLE_NS);
+		payload_cn= iks_new("payload-type");
+			iks_insert_attrib(payload_cn,"id","13");
+			iks_insert_attrib(payload_cn,"name","CN");
+			iks_insert_attrib(payload_cn,"xmlns",GOOGLE_NS);
+			
+			
+			iks_insert_attrib(iq,"type","set");
+			iks_insert_attrib(iq,"from",c->jid->full);
+			iks_insert_attrib(iq,"to",p->from);
+			snprintf(mid,sizeof(mid),"j:active:%s",tmp->sid);
+			iks_insert_attrib(iq,"id",mid);
+		
+			iks_insert_attrib(jingle, "xmlns", GOOGLE_NS);
+			iks_insert_attrib(jingle, "action", JINGLE_ACCEPT);
+			iks_insert_attrib(jingle, "initiator", p->initiator ? client->connection->jid->full : p->from);
+			iks_insert_attrib(jingle, GOOGLE_SID, tmp->sid);
+			iks_insert_node(iq,jingle);
+			iks_insert_node(jingle,description);
+			iks_insert_node(description,payload_red);
+			iks_insert_node(description,payload_audio);
+			iks_insert_node(description,payload_cn);
+
+			iks_send(c->p,iq);
+			iks_delete(payload_red);
+			iks_delete(payload_audio);
+			iks_delete(payload_cn);
+			iks_delete(description);
+			iks_delete(jingle);
+			iks_delete(iq);
+	}
+	return 1;
+}
+
 static int jingle_answer(struct ast_channel *ast)
 {
 	struct jingle_pvt *p = ast->tech_pvt;
-	int isoutbound =1;
-	int res = -1;
-
+	struct jingle *client = p->parent;
+	int res = 0;
+	ast_log(LOG_DEBUG, "Answer!\n");
 	ast_mutex_lock(&p->lock);
-	// Pass along answer since somebody answered us 
-	struct ast_frame answer = { AST_FRAME_CONTROL, AST_CONTROL_ANSWER };
-	res = jingle_queue_frame(p, isoutbound, &answer, ast);
+	jingle_accept_call(client, p);
 	ast_mutex_unlock(&p->lock);
 	return res;
 }
@@ -539,139 +655,6 @@
 	return 1;
 }
 
-static void add_codec_to_answer(const struct jingle_pvt *p, int codec, iks *description)
-{
-	ast_verbose("Adding codec 0x%x (%s) to SDP\n", codec, ast_getformatname(codec));
-	if(!strcasecmp("ulaw",ast_getformatname(codec))) {
-		iks *payload_eg711u , *payload_pcmu;
-		payload_pcmu = iks_new("payload-type");
-		iks_insert_attrib(payload_pcmu,"id","0");
-		iks_insert_attrib(payload_pcmu,"name","PCMU");
-		iks_insert_attrib(payload_pcmu,"xmlns",GOOGLE_NS);
-		payload_eg711u = iks_new("payload-type");
-		iks_insert_attrib(payload_eg711u,"id","100");
-		iks_insert_attrib(payload_eg711u,"name","EG711U");
-		iks_insert_attrib(payload_eg711u,"xmlns",GOOGLE_NS);
-		iks_insert_node(description,payload_pcmu);
-		iks_insert_node(description,payload_eg711u);
-	}
-	if(!strcasecmp("alaw",ast_getformatname(codec))) {
-		iks *payload_eg711a , *payload_pcma;
-		payload_pcma = iks_new("payload-type");
-		iks_insert_attrib(payload_pcma,"id","8");
-		iks_insert_attrib(payload_pcma,"name","PCMA");
-		iks_insert_attrib(payload_pcma,"xmlns",GOOGLE_NS);
-		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,"xmlns",GOOGLE_NS);
-		iks_insert_node(description,payload_pcma);
-		iks_insert_node(description,payload_eg711a);
-	}
-	if(!strcasecmp("ilbc",ast_getformatname(codec))) {
-		iks *payload_ilbc;
-		payload_ilbc= iks_new("payload-type");
-		iks_insert_attrib(payload_ilbc,"id","102");
-		iks_insert_attrib(payload_ilbc,"name","iLBC");
-		iks_insert_attrib(payload_ilbc,"xmlns",GOOGLE_NS);
-		iks_insert_node(description,payload_ilbc);
-	}
-	if(!strcasecmp("g723",ast_getformatname(codec))) {
-		iks *payload_g723;
-		payload_g723= iks_new("payload-type");
-		iks_insert_attrib(payload_g723,"id","4");
-		iks_insert_attrib(payload_g723,"name","G723");
-		iks_insert_attrib(payload_g723,"xmlns",GOOGLE_NS);
-		iks_insert_node(description,payload_g723);
-	}
-	ast_rtp_lookup_code(p->rtp, 1, codec);
-}
-
-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];
-
-	while(tmp) {
-		if(!strcasecmp(tmp->sid,iks_find_attrib(pak->query,GOOGLE_SID))) {
-			iq = iks_new("iq");
-			jingle = iks_new(GOOGLE_NODE);
-			description = iks_new("description");
-			iks_insert_attrib(description,"xmlns",GOOGLE_NS);
-
-			for (x = 0; x < 32; x++) {
-				if (!(pref_codec = ast_codec_pref_index(&client->prefs, x)))
-					 break;
-				if (!(client->capability & pref_codec))
-					continue;
-				if (alreadysent & pref_codec)
-					continue;
-				if (pref_codec <= AST_FORMAT_MAX_AUDIO)
-					add_codec_to_answer(tmp, pref_codec, description);
-				else
-					add_codec_to_answer(tmp, pref_codec, description);
-				alreadysent |= pref_codec;
-			}
-/*			payload_ipcmwb= iks_new("payload-type");
-			iks_insert_attrib(payload_ipcmwb,"id","97");
-			iks_insert_attrib(payload_ipcmwb,"name","IPCMWB");
-			iks_insert_attrib(payload_ipcmwb,"xmlns","http://www.google.com/session/phone");
-			payload_isac= iks_new("payload-type");
-			iks_insert_attrib(payload_isac,"id","103");
-			iks_insert_attrib(payload_isac,"name","ISAC");
-			iks_insert_attrib(payload_isac,"xmlns","http://www.google.com/session/phone"); */
-			payload_red= iks_new("payload-type");
-			iks_insert_attrib(payload_red,"id","117");
-			iks_insert_attrib(payload_red,"name","red");
-			iks_insert_attrib(payload_red,"xmlns",GOOGLE_NS);
-			payload_audio= iks_new("payload-type");
-			iks_insert_attrib(payload_audio,"id","106");
-			iks_insert_attrib(payload_audio,"name","audio/telephone-event");
-			iks_insert_attrib(payload_audio,"xmlns",GOOGLE_NS);
-			payload_cn= iks_new("payload-type");
-			iks_insert_attrib(payload_cn,"id","13");
-			iks_insert_attrib(payload_cn,"name","CN");
-			iks_insert_attrib(payload_cn,"xmlns",GOOGLE_NS);
-			
-			
-			iks_insert_attrib(iq,"type","set");
-			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);
-		
-			iks_insert_attrib(jingle, "xmlns", GOOGLE_NS);
-			iks_insert_attrib(jingle, "action", JINGLE_ACCEPT);
-			iks_insert_attrib(jingle, "initiator", iks_find_attrib(pak->x,"from"));
-			iks_insert_attrib(jingle, GOOGLE_SID, tmp->sid);
-			iks_insert_node(iq,jingle);
-			iks_insert_node(jingle,description);
-	/*		iks_insert_node(description,payload_ipcmwb);
-			iks_insert_node(description,payload_isac);*/
-			iks_insert_node(description,payload_red);
-			iks_insert_node(description,payload_audio);
-			iks_insert_node(description,payload_cn);
-
-			iks_send(c->p,iq);
-	/*		iks_delete(payload_ipcmwb);
-			iks_delete(payload_isac); */
-			iks_delete(payload_red);
-			iks_delete(payload_audio);
-			iks_delete(payload_cn);
-			iks_delete(description);
-			iks_delete(jingle);
-			iks_delete(iq);
-		}
-		tmp=tmp->next;
-	}
-	return 1;
-}
-
 static struct jingle_pvt *jingle_alloc(struct jingle *client, const char *from, const char *sid)
 {
 	struct jingle_pvt *tmp = client->p;
@@ -687,6 +670,7 @@
 		return NULL;
 	}
 	ast_copy_string(tmp->from, from, sizeof(tmp->from));
+	ast_copy_string(tmp->exten, "s", sizeof(tmp->exten));
 	if (sid)
 		ast_copy_string(tmp->sid, sid, sizeof(tmp->sid));
 	else
@@ -901,6 +885,7 @@
 			codec= iks_next(codec);
 		}
 		ast_mutex_unlock(&p->lock);
+		ast_setstate(chan, AST_STATE_RING);
 		res = ast_pbx_start(chan);
 		jingle_create_candidates(client, p, pak);
 
@@ -1304,7 +1289,6 @@
 		jingle_add_candidate(client,pak);
 		if(flipflop == 2) {
 			flipflop = 0;
-			jingle_accept_call(client,pak);
 		}
 		else {
 			ast_verbose("COUNT IS %d\n",flipflop);



More information about the asterisk-commits mailing list