|
|
|
|
@ -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
|
|
|
|
|
|