mncc: Support IPv6 addresses (new version mncc 7)

Change-Id: I6002b648bcb2055dcbbdae3f688f6e2cb7282b7f
diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c
index 8cfb611..ed29e84 100644
--- a/src/libmsc/gsm_04_08_cc.c
+++ b/src/libmsc/gsm_04_08_cc.c
@@ -1623,8 +1623,8 @@
 	rtp->callref = callref;
 	rtp->msg_type = cmd;
 	if (rtp_addr) {
-		rtp->ip = osmo_htonl(inet_addr(rtp_addr->ip));
-		rtp->port = rtp_addr->port;
+		if (osmo_sockaddr_str_to_sockaddr(rtp_addr, &rtp->addr) < 0)
+			return -EINVAL;
 	}
 	rtp->payload_type = payload_type;
 	rtp->payload_msg_type = payload_msg_type;
@@ -1710,6 +1710,7 @@
 	struct call_leg *cl;
 	struct rtp_stream *rtps;
 	struct osmo_sockaddr_str rtp_addr;
+	char ipbuf[INET6_ADDRSTRLEN];
 
 	/* FIXME: in *rtp we should get the codec information of the remote
 	 * leg. We will have to populate trans->conn->rtp.codec_cn with a
@@ -1735,7 +1736,9 @@
 		return -EIO;
 	}
 
-	LOG_TRANS_CAT(trans, DMNCC, LOGL_DEBUG, "rx %s\n", get_mncc_name(MNCC_RTP_CONNECT));
+	LOG_TRANS_CAT(trans, DMNCC, LOGL_DEBUG, "rx %s %s:%u\n", get_mncc_name(MNCC_RTP_CONNECT),
+		      osmo_sockaddr_ntop((const struct sockaddr*)&rtp->addr, ipbuf),
+		      osmo_sockaddr_port((const struct sockaddr*)&rtp->addr));
 
 	cl = trans->msc_a->cc.call_leg;
 	rtps = cl ? cl->rtp[RTP_TO_CN] : NULL;
@@ -1746,7 +1749,11 @@
 		return -EINVAL;
 	}
 
-	osmo_sockaddr_str_from_32n(&rtp_addr, rtp->ip, rtp->port);
+	if (osmo_sockaddr_str_from_sockaddr(&rtp_addr, &rtp->addr) < 0) {
+		LOG_TRANS_CAT(trans, DMNCC, LOGL_ERROR, "RTP connect with invalid IP addr\n");
+		mncc_recv_rtp_err(net, trans, rtp->callref, MNCC_RTP_CONNECT);
+		return -EINVAL;
+	}
 	rtp_stream_set_remote_addr(rtps, &rtp_addr);
 	rtp_stream_commit(rtps);
 	return 0;