aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libmsc/mncc_sock.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc/src/libmsc/mncc_sock.c')
-rw-r--r--openbsc/src/libmsc/mncc_sock.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/openbsc/src/libmsc/mncc_sock.c b/openbsc/src/libmsc/mncc_sock.c
index dd0a44fb5..adb56fccd 100644
--- a/openbsc/src/libmsc/mncc_sock.c
+++ b/openbsc/src/libmsc/mncc_sock.c
@@ -37,6 +37,8 @@
#include <openbsc/debug.h>
#include <openbsc/mncc.h>
#include <openbsc/gsm_data.h>
+#include <openbsc/transaction.h>
+#include <openbsc/rtp_proxy.h>
struct mncc_sock_state {
struct gsm_network *net;
@@ -50,6 +52,18 @@ int mncc_sock_from_cc(struct gsm_network *net, struct msgb *msg)
struct gsm_mncc *mncc_in = (struct gsm_mncc *) msgb_data(msg);
int msg_type = mncc_in->msg_type;
+ /* application uses RTP for this transaction, we send our data via RTP,
+ * otherwise we send it through MNCC interface */
+ if (mncc_is_data_frame(msg_type)) {
+ struct gsm_trans *trans = trans_find_by_callref(net, mncc_in->callref);
+
+ if (trans && trans->cc.rs) {
+ rtp_send_frame(trans->cc.rs, (struct gsm_data_frame *) mncc_in);
+ msgb_free(msg);
+ return 0;
+ }
+ }
+
/* Check if we currently have a MNCC handler connected */
if (net->mncc_state->conn_bfd.fd < 0) {
LOGP(DMNCC, LOGL_ERROR, "mncc_sock receives %s for external CC app "