[Asterisk-cvs] asterisk/channels chan_sip.c,1.616,1.617

markster at lists.digium.com markster at lists.digium.com
Wed Jan 5 17:38:37 CST 2005


Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv21138/channels

Modified Files:
	chan_sip.c 
Log Message:
If pedantic mode enabled, look for media-level addresses


Index: chan_sip.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_sip.c,v
retrieving revision 1.616
retrieving revision 1.617
diff -u -d -r1.616 -r1.617
--- chan_sip.c	5 Jan 2005 23:18:00 -0000	1.616
+++ chan_sip.c	5 Jan 2005 23:43:34 -0000	1.617
@@ -2629,6 +2629,7 @@
 	struct hostent *hp;
 	struct ast_hostent ahp;
 	int codec;
+	int destiterator = 0;
 	int iterator;
 	int sendonly = 0;
 	int x,y;
@@ -2643,7 +2644,8 @@
 		return -1;
 	}
 	m = get_sdp(req, "m");
-	c = get_sdp(req, "c");
+	sdpLineNum_iterator_init(&destiterator);
+	c = get_sdp_iterate(&destiterator, req, "c");
 	if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
 		ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
 		return -1;
@@ -2702,7 +2704,21 @@
 			}
 		}
 	}
-
+	/* Check for Media-description-level-address for audio */
+	if (pedanticsipchecking) {
+		c = get_sdp_iterate(&destiterator, req, "c");
+		if (!ast_strlen_zero(c)) {
+			if (sscanf(c, "IN IP4 %256s", host) != 1) {
+				ast_log(LOG_WARNING, "Invalid secondary host in c= line, '%s'\n", c);
+			} else {
+				/* XXX This could block for a long time, and block the main thread! XXX */
+				hp = ast_gethostbyname(host, &ahp);
+				if (!hp) {
+					ast_log(LOG_WARNING, "Unable to lookup host in secondary c= line, '%s'\n", c);
+				}
+			}
+		}
+	}
 	/* RTP addresses and ports for audio and video */
 	sin.sin_family = AF_INET;
 	memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
@@ -2716,6 +2732,21 @@
 			ast_log(LOG_DEBUG,"Peer audio RTP is at port %s:%d\n",ast_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
 		}
 	}
+	/* Check for Media-description-level-address for video */
+	if (pedanticsipchecking) {
+		c = get_sdp_iterate(&destiterator, req, "c");
+		if (!ast_strlen_zero(c)) {
+			if (sscanf(c, "IN IP4 %256s", host) != 1) {
+				ast_log(LOG_WARNING, "Invalid secondary host in c= line, '%s'\n", c);
+			} else {
+				/* XXX This could block for a long time, and block the main thread! XXX */
+				hp = ast_gethostbyname(host, &ahp);
+				if (!hp) {
+					ast_log(LOG_WARNING, "Unable to lookup host in secondary c= line, '%s'\n", c);
+				}
+			}
+		}
+	}
 	/* Setup video port number */
 	sin.sin_port = htons(vportno);
 	if (p->vrtp && sin.sin_port) {




More information about the svn-commits mailing list