aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libmsc/msc_ifaces.c
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-09-22 20:28:35 +0200
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2017-02-23 20:28:56 +0100
commit9245b7ce593f0b1c51a3c1dee3ba1bf5d74a6c39 (patch)
tree3d8589d13d20129acb3f6411aeead4abdf49d0c3 /openbsc/src/libmsc/msc_ifaces.c
parentc3e30e6eef4b138e5387e84806aed1bda38a6736 (diff)
bridge calls via mgcpgw
Diffstat (limited to 'openbsc/src/libmsc/msc_ifaces.c')
-rw-r--r--openbsc/src/libmsc/msc_ifaces.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/openbsc/src/libmsc/msc_ifaces.c b/openbsc/src/libmsc/msc_ifaces.c
index 2937b54f6..585927c73 100644
--- a/openbsc/src/libmsc/msc_ifaces.c
+++ b/openbsc/src/libmsc/msc_ifaces.c
@@ -186,3 +186,32 @@ int msc_call_assignment(struct gsm_trans *trans)
return -EINVAL;
}
}
+
+int msc_call_bridge(struct gsm_trans *trans1, struct gsm_trans *trans2)
+{
+ struct gsm_subscriber_connection *conn1 = trans1->conn;
+ struct gsm_subscriber_connection *conn2 = trans2->conn;
+
+ struct mgcpgw_client *mgcp = conn1->network->mgcpgw.client;
+ OSMO_ASSERT(mgcp);
+
+ const char *ip = mgcpgw_client_remote_addr_str(mgcp);
+
+ /* First setup the counterparts' endpoints, so that when transmission
+ * starts the originating addresses are already known to be valid. */
+ mgcpgw_client_tx_mdcx(mgcp, conn1->iu.mgcp_rtp_endpoint,
+ ip, conn2->iu.mgcp_rtp_port_cn,
+ MGCP_CONN_LOOPBACK);
+ mgcpgw_client_tx_mdcx(mgcp, conn2->iu.mgcp_rtp_endpoint,
+ ip, conn1->iu.mgcp_rtp_port_cn,
+ MGCP_CONN_LOOPBACK);
+ /* Now enable sending to and receiving from the peer. */
+ mgcpgw_client_tx_mdcx(mgcp, conn1->iu.mgcp_rtp_endpoint,
+ ip, conn2->iu.mgcp_rtp_port_cn,
+ MGCP_CONN_RECV_SEND);
+ mgcpgw_client_tx_mdcx(mgcp, conn2->iu.mgcp_rtp_endpoint,
+ ip, conn1->iu.mgcp_rtp_port_cn,
+ MGCP_CONN_RECV_SEND);
+
+ return 0;
+}