If pedantic mode enabled, look for media-level addresses
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4688 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
66676fbd26
commit
887f92b7bb
1 changed files with 33 additions and 2 deletions
|
@ -2629,6 +2629,7 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||||
struct hostent *hp;
|
struct hostent *hp;
|
||||||
struct ast_hostent ahp;
|
struct ast_hostent ahp;
|
||||||
int codec;
|
int codec;
|
||||||
|
int destiterator = 0;
|
||||||
int iterator;
|
int iterator;
|
||||||
int sendonly = 0;
|
int sendonly = 0;
|
||||||
int x,y;
|
int x,y;
|
||||||
|
@ -2643,7 +2644,8 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
m = get_sdp(req, "m");
|
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)) {
|
if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
|
||||||
ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
|
ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -2702,7 +2704,21 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* 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 */
|
/* RTP addresses and ports for audio and video */
|
||||||
sin.sin_family = AF_INET;
|
sin.sin_family = AF_INET;
|
||||||
memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
|
memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
|
||||||
|
@ -2716,6 +2732,21 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||||
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));
|
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 */
|
/* Setup video port number */
|
||||||
sin.sin_port = htons(vportno);
|
sin.sin_port = htons(vportno);
|
||||||
if (p->vrtp && sin.sin_port) {
|
if (p->vrtp && sin.sin_port) {
|
||||||
|
|
Reference in a new issue