fixup ipv6
Tweaked-by: neels Change-Id: I7d46aa7fb002922cfbb583a11f69e042283350c6
This commit is contained in:
parent
f2a1921b00
commit
35189bf414
|
@ -1436,17 +1436,15 @@ int iuup_rx_payload(struct msgb *msg, void *node_priv)
|
||||||
*/
|
*/
|
||||||
int iuup_tx_msg(struct msgb *msg, void *node_priv)
|
int iuup_tx_msg(struct msgb *msg, void *node_priv)
|
||||||
{
|
{
|
||||||
const struct in_addr zero_addr = {};
|
|
||||||
struct osmo_rtp_msg_ctx *mc = OSMO_RTP_MSG_CTX(msg);
|
struct osmo_rtp_msg_ctx *mc = OSMO_RTP_MSG_CTX(msg);
|
||||||
struct mgcp_conn_rtp *conn_src = mc->conn_src;
|
struct mgcp_conn_rtp *conn_src = mc->conn_src;
|
||||||
struct mgcp_conn_rtp *conn_dst = node_priv;
|
struct mgcp_conn_rtp *conn_dst = node_priv;
|
||||||
struct sockaddr_in *from_addr = mc->from_addr;
|
|
||||||
struct mgcp_rtp_end *rtp_end = &conn_dst->end;
|
struct mgcp_rtp_end *rtp_end = &conn_dst->end;
|
||||||
struct in_addr to_addr = rtp_end->addr;
|
struct osmo_sockaddr *to_addr = &rtp_end->addr;
|
||||||
uint16_t to_port = rtp_end->rtp_port;
|
uint16_t to_port = osmo_sockaddr_port(&to_addr->u.sa);
|
||||||
|
char ipbuf[INET6_ADDRSTRLEN];
|
||||||
|
|
||||||
if (conn_src == conn_dst
|
if (conn_src == conn_dst && to_addr->u.sa.sa_family == AF_UNSPEC && !to_port) {
|
||||||
&& !memcmp(&zero_addr, &to_addr, sizeof(zero_addr)) && !to_port) {
|
|
||||||
LOG_CONN_RTP(conn_dst, LOGL_DEBUG, "iuup_tx_msg(): direct IuUP reply\n");
|
LOG_CONN_RTP(conn_dst, LOGL_DEBUG, "iuup_tx_msg(): direct IuUP reply\n");
|
||||||
/* IuUP wants to send a message back to the same peer that sent an RTP package, but there
|
/* IuUP wants to send a message back to the same peer that sent an RTP package, but there
|
||||||
* is no address configured for that peer yet. It is probably an IuUP Initialization ACK
|
* is no address configured for that peer yet. It is probably an IuUP Initialization ACK
|
||||||
|
@ -1458,14 +1456,13 @@ int iuup_tx_msg(struct msgb *msg, void *node_priv)
|
||||||
* use and can tell this MGW about it, so this "loopback" is, for some 3G cells, the only
|
* use and can tell this MGW about it, so this "loopback" is, for some 3G cells, the only
|
||||||
* chance we have to get a successful RAB Assignment done (particularly the nano3G does
|
* chance we have to get a successful RAB Assignment done (particularly the nano3G does
|
||||||
* this). */
|
* this). */
|
||||||
to_addr = from_addr->sin_addr;
|
to_addr = mc->from_addr;
|
||||||
to_port = from_addr->sin_port;
|
to_port = osmo_sockaddr_port(&to_addr->u.sa);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_CONN_RTP(conn_dst, LOGL_DEBUG, "iuup_tx_msg(%u bytes) to %s:%u\n", msgb_length(msg),
|
LOG_CONN_RTP(conn_dst, LOGL_DEBUG, "iuup_tx_msg(%u bytes) to %s:%u\n", msgb_length(msg),
|
||||||
inet_ntoa(to_addr), ntohs(to_port));
|
osmo_sockaddr_ntop(&to_addr->u.sa, ipbuf), to_port);
|
||||||
|
|
||||||
return mgcp_udp_send(rtp_end->rtp.fd, &to_addr, to_port, (char*)msgb_data(msg), msgb_length(msg));
|
return mgcp_udp_send(rtp_end->rtp.fd, to_addr, to_port, (char*)msgb_data(msg), msgb_length(msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void iuup_init(struct mgcp_conn_rtp *conn_src)
|
static void iuup_init(struct mgcp_conn_rtp *conn_src)
|
||||||
|
|
Loading…
Reference in New Issue