[Asterisk-cvs] asterisk/channels chan_sip.c,1.473,1.474

markster at lists.digium.com markster at lists.digium.com
Wed Aug 18 10:08:57 CDT 2004


Update of /usr/cvsroot/asterisk/channels
In directory localhost.localdomain:/tmp/cvs-serv17858/channels

Modified Files:
	chan_sip.c 
Log Message:
Make sure jointcapability really indicates joint capability (bug #2210)


Index: chan_sip.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_sip.c,v
retrieving revision 1.473
retrieving revision 1.474
diff -u -d -r1.473 -r1.474
--- chan_sip.c	18 Aug 2004 02:16:04 -0000	1.473
+++ chan_sip.c	18 Aug 2004 13:55:03 -0000	1.474
@@ -264,6 +264,7 @@
 	int capability;				/* Special capability (codec) */
 	int novideo;				/* Didn't get video in invite, don't offer */
 	int jointcapability;			/* Supported capability at both ends (codecs ) */
+	int peercapability;			/* Supported peer capability */
 	int prefcodec;				/* Preferred codec (outbound only) */
 	int noncodeccapability;
 	int outgoing;				/* Outgoing or incoming call? */
@@ -2735,7 +2736,8 @@
 		ast_rtp_get_current_formats(p->vrtp,
 				&vpeercapability, &vpeernoncodeccapability);
 	p->jointcapability = p->capability & (peercapability | vpeercapability);
-	p->noncodeccapability = noncodeccapability & (peernoncodeccapability | vpeernoncodeccapability);
+	p->peercapability = (peercapability | vpeercapability);
+	p->noncodeccapability = noncodeccapability & p->peercapability;
 	
 	if (debug) {
 		const unsigned slen=80;
@@ -3322,7 +3324,7 @@
 		ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
 		return -1;
 	}
-	capability = p->jointcapability;
+	capability = p->capability;
 		
 	if (!p->sessionid) {
 		p->sessionid = getpid();
@@ -5262,6 +5264,8 @@
 			p->restrictcid = user->restrictcid;
 			p->capability = user->capability;
 			p->jointcapability = user->capability;
+			if (p->peercapability)
+				p->jointcapability &= p->peercapability;
 			p->promiscredir = user->promiscredir;
 			if (user->dtmfmode) {
 				p->dtmfmode = user->dtmfmode;
@@ -5343,6 +5347,8 @@
 				p->pickupgroup = peer->pickupgroup;
 				p->capability = peer->capability;
 				p->jointcapability = peer->capability;
+				if (p->peercapability)
+					p->jointcapability &= p->peercapability;
 				p->promiscredir = peer->promiscredir;
 				if (peer->dtmfmode) {
 					p->dtmfmode = peer->dtmfmode;
@@ -5812,6 +5818,7 @@
 			ast_cli(fd, "  Call-ID:                %s\n", cur->callid);
 			ast_cli(fd, "  Our Codec Capability:   %d\n", cur->capability);
 			ast_cli(fd, "  Non-Codec Capability:   %d\n", cur->noncodeccapability);
+			ast_cli(fd, "  Their Codec Capability:   %d\n", cur->peercapability);
 			ast_cli(fd, "  Joint Codec Capability:   %d\n", cur->jointcapability);
 			ast_cli(fd, "  Format                  %s\n", ast_getformatname(cur->owner ? cur->owner->nativeformats : 0) );
 			ast_cli(fd, "  Theoretical Address:    %s:%d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), cur->sa.sin_addr), ntohs(cur->sa.sin_port));
@@ -8671,7 +8678,7 @@
 static int sip_get_codec(struct ast_channel *chan)
 {
 	struct sip_pvt *p = chan->pvt->pvt;
-	return p->capability;	
+	return p->peercapability;	
 }
 
 static struct ast_rtp_protocol sip_rtp = {




More information about the svn-commits mailing list