Browse Source

try to fix null c= address issue

pull/11/head
Richard Fuchs 12 years ago
parent
commit
a7784f5ca3
1 changed files with 18 additions and 4 deletions
  1. +18
    -4
      daemon/call.c

+ 18
- 4
daemon/call.c View File

@ -1405,10 +1405,18 @@ static struct endpoint_map *__get_endpoint_map(struct call_media *media, unsigne
}
if (!ep) /* creating wildcard map */
break;
if (memcmp(&em->endpoint, ep, sizeof(*ep)))
/* handle zero endpoint address */
if (is_addr_unspecified(&ep->ip46) || is_addr_unspecified(&em->endpoint.ip46)) {
if (ep->port != em->endpoint.port)
continue;
}
else if (memcmp(&em->endpoint, ep, sizeof(*ep)))
continue;
if (em->sfds.length >= num_ports)
if (em->sfds.length >= num_ports) {
if (is_addr_unspecified(&em->endpoint.ip46))
em->endpoint.ip46 = ep->ip46;
return em;
}
/* endpoint matches, but not enough ports. flush existing ports
* and allocate a new set. */
__C_DBG("endpoint matches, doesn't have enough ports");
@ -1899,8 +1907,8 @@ int monologue_offer_answer(struct call_monologue *monologue, GQueue *streams,
num_ports *= 2;
if (!sp->rtp_endpoint.port || is_addr_unspecified(&sp->rtp_endpoint.ip46)) {
/* Zero port or endpoint: stream has been rejected.
if (!sp->rtp_endpoint.port) {
/* Zero port: stream has been rejected.
* RFC 3264, chapter 6:
* If a stream is rejected, the offerer and answerer MUST NOT
* generate media (or RTCP packets) for that stream. */
@ -1908,6 +1916,12 @@ int monologue_offer_answer(struct call_monologue *monologue, GQueue *streams,
__disable_streams(other_media, num_ports);
goto init;
}
if (is_addr_unspecified(&sp->rtp_endpoint.ip46)) {
/* Zero endpoint address, equivalent to setting the media stream
* to sendonly or inactive */
MEDIA_CLEAR(media, RECV);
MEDIA_CLEAR(other_media, SEND);
}
/* get that many ports for each side, and one packet stream for each port, then


Loading…
Cancel
Save