[svn-commits] branch mogorman/asterisk-xmpp r19701 - /team/mogorman/asterisk-xmpp/channels/

svn-commits at lists.digium.com svn-commits at lists.digium.com
Wed Apr 12 21:47:08 MST 2006


Author: mogorman
Date: Wed Apr 12 23:47:07 2006
New Revision: 19701

URL: http://svn.digium.com/view/asterisk?rev=19701&view=rev
Log: (empty)

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=19701&r1=19700&r2=19701&view=diff
==============================================================================
--- team/mogorman/asterisk-xmpp/channels/chan_jingle.c (original)
+++ team/mogorman/asterisk-xmpp/channels/chan_jingle.c Wed Apr 12 23:47:07 2006
@@ -1120,6 +1120,52 @@
 	return 1;
 }
 
+static struct jingle_candidate *jingle_create_candidate(char *args)
+{
+	char *name, *type, *preference, *protocol;
+	struct axi_candidate *res;
+	res= malloc(sizeof(struct axi_candidate));
+	memset(res,0,sizeof(struct axi_candidate));
+	if(args)
+		name = args;
+	if((args = strchr(args,','))) {
+		*args='\0';
+		args++;
+		preference = args;
+	}
+	if((args = strchr(args, ','))) {
+		*args='\0';
+		args++;
+		protocol=args;
+	}
+	if((args = strchr(args, ','))) {
+		*args='\0';
+		args++;
+		type=args;
+	}
+	if(name)
+		ast_copy_string(res->name,name,sizeof(res->name));
+	if(preference) {
+		res->preference = atof(preference);
+	}
+	if(protocol) {
+		if(!strcasecmp("udp",protocol))
+			res->protocol=AXI_PROTOCOL_UDP;
+		if(!strcasecmp("ssltcp",protocol))
+			res->protocol=AXI_PROTOCOL_SSLTCP;
+	}
+	if(type) {
+		if(!strcasecmp("stun",type))
+			res->type = AXI_CONNECT_STUN;
+		if(!strcasecmp("local",type))
+			res->type = AXI_CONNECT_LOCAL;
+		if(!strcasecmp("relay",type))
+			res->type = AXI_CONNECT_RELAY;
+	}
+
+	return res;
+}
+
 static int jingle_create_member(char *label, struct ast_variable *var, int allowguest, struct ast_codec_pref prefs, char *context, struct jingle *member)
 {
 	struct aji_client *client=NULL;
@@ -1131,6 +1177,7 @@
 	member->allowguest=allowguest;
 	member->prefs=prefs;
 	while(var) {
+		struct jingle_candidate *candidate=NULL;
 		if(!strcasecmp(var->name,"username"))
 			ast_copy_string(member->user, var->value, sizeof(member->user));
 		else if(!strcasecmp(var->name,"disallow"))
@@ -1139,6 +1186,13 @@
 			ast_parse_allow_disallow(&member->prefs, &member->capability, var->value, 1);
 		else if (!strcasecmp(var->name, "context"))
 			ast_copy_string(member->context,var->value,sizeof(member->context));
+		else if (!strcasecmp(var->name, "candidate")) {
+			candidate = jingle_create_candidate(var->value);
+			if(candidate) {
+				candidate->next = client->ourcandidates;
+				client->ourcandidates = canidate;
+			}
+		}
 		else if (!strcasecmp(var->name, "connection")) {
 			if((client = ast_aji_get_client(var->value))) {
 		//		client->jingle=member;
@@ -1178,6 +1232,7 @@
 	
 	cat = ast_category_browse(cfg,NULL);
 	for(var = ast_variable_browse(cfg, "general"); var; var = var->next) {
+		struct jingle_candidate *candidate = NULL;
 		if(!strcasecmp(var->name, "allowguest"))
 			allowguest = (ast_true(ast_variable_retrieve(cfg,"general","allowguest")))?1:0;
 		else if (!strcasecmp(var->name, "disallow")) 
@@ -1188,8 +1243,17 @@
 			ast_copy_string(context,var->value,sizeof(context));
 		else if (!strcasecmp(var->name, "externip"))
 			ast_copy_string(externip,var->value,sizeof(externip));
+		else if (!strcasecmp(var->name, "candidate")) {
+			candidate = jingle_create_candidate(var->value);
+			if(candidate) {
+				candidate->next = client->ourcandidates;
+				client->ourcandidates = canidate;
+			}
+		}
+
 	}
 	while(cat) {
+		struct jingle_candidate *candidate = NULL;
 		if(strcasecmp(cat, "general")) {
 			var = ast_variable_browse(cfg, cat);
 			member = (struct jingle *) malloc(sizeof(struct jingle));
@@ -1197,7 +1261,6 @@
 			ASTOBJ_INIT(member);
 			ASTOBJ_WRLOCK(member);
 			if(!strcasecmp(cat, "guest")) {
-				ast_verbose("step guest\n");
 				ast_copy_string(member->name, "guest", sizeof(member->name));
 				ast_copy_string(member->user, "guest", sizeof(member->user));
 				ast_copy_string(member->context, context, sizeof(member->context));
@@ -1210,6 +1273,14 @@
 						ast_parse_allow_disallow(&member->prefs, &member->capability, var->value, 1);
 					else if (!strcasecmp(var->name, "context"))
 						ast_copy_string(member->context,var->value,sizeof(member->context));
+					else if (!strcasecmp(var->name, "candidate")) {
+						candidate = jingle_create_candidate(var->value);
+						if(candidate) {
+							candidate->next = client->ourcandidates;
+							client->ourcandidates = canidate;
+						}
+					}
+
 					var = var->next;
 				}
 				ASTOBJ_UNLOCK(member);



More information about the svn-commits mailing list