aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openbsc/include/openbsc/mncc.h5
-rw-r--r--openbsc/src/libmsc/gsm_04_08.c6
-rw-r--r--openbsc/src/libmsc/mncc_builtin.c10
3 files changed, 13 insertions, 8 deletions
diff --git a/openbsc/include/openbsc/mncc.h b/openbsc/include/openbsc/mncc.h
index 2a170cd4d..10192addd 100644
--- a/openbsc/include/openbsc/mncc.h
+++ b/openbsc/include/openbsc/mncc.h
@@ -191,6 +191,11 @@ struct gsm_mncc_rtp {
uint32_t payload_msg_type;
};
+struct gsm_mncc_bridge {
+ uint32_t msg_type;
+ uint32_t callref[2];
+};
+
const char *get_mncc_name(int value);
void mncc_set_cause(struct gsm_mncc *data, int loc, int val);
void cc_tx_to_mncc(struct gsm_network *net, struct msgb *msg);
diff --git a/openbsc/src/libmsc/gsm_04_08.c b/openbsc/src/libmsc/gsm_04_08.c
index 7db758666..9d7e2aaad 100644
--- a/openbsc/src/libmsc/gsm_04_08.c
+++ b/openbsc/src/libmsc/gsm_04_08.c
@@ -1662,10 +1662,10 @@ static int tch_map(struct gsm_lchan *lchan, struct gsm_lchan *remote_lchan)
}
/* bridge channels of two transactions */
-static int tch_bridge(struct gsm_network *net, uint32_t *refs)
+static int tch_bridge(struct gsm_network *net, struct gsm_mncc_bridge *bridge)
{
- struct gsm_trans *trans1 = trans_find_by_callref(net, refs[0]);
- struct gsm_trans *trans2 = trans_find_by_callref(net, refs[1]);
+ struct gsm_trans *trans1 = trans_find_by_callref(net, bridge->callref[0]);
+ struct gsm_trans *trans2 = trans_find_by_callref(net, bridge->callref[1]);
if (!trans1 || !trans2)
return -EIO;
diff --git a/openbsc/src/libmsc/mncc_builtin.c b/openbsc/src/libmsc/mncc_builtin.c
index 7d5a7f163..77df6fba3 100644
--- a/openbsc/src/libmsc/mncc_builtin.c
+++ b/openbsc/src/libmsc/mncc_builtin.c
@@ -186,7 +186,7 @@ static int mncc_setup_cnf(struct gsm_call *call, int msg_type,
struct gsm_mncc connect_ack, frame_recv;
struct gsm_network *net = call->net;
struct gsm_call *remote;
- uint32_t refs[2];
+ struct gsm_mncc_bridge bridge = { .msg_type = MNCC_BRIDGE };
/* acknowledge connect */
memset(&connect_ack, 0, sizeof(struct gsm_mncc));
@@ -202,19 +202,19 @@ static int mncc_setup_cnf(struct gsm_call *call, int msg_type,
mncc_tx_to_cc(remote->net, MNCC_SETUP_RSP, connect);
/* bridge tch */
- refs[0] = call->callref;
- refs[1] = call->remote_ref;
+ bridge.callref[0] = call->callref;
+ bridge.callref[1] = call->remote_ref;
DEBUGP(DMNCC, "(call %x) Bridging with remote.\n", call->callref);
/* in direct mode, we always have to bridge the channels */
if (ipacc_rtp_direct)
- return mncc_tx_to_cc(call->net, MNCC_BRIDGE, refs);
+ return mncc_tx_to_cc(call->net, MNCC_BRIDGE, &bridge);
/* proxy mode */
if (!net->handover.active) {
/* in the no-handover case, we can bridge, i.e. use
* the old RTP proxy code */
- return mncc_tx_to_cc(call->net, MNCC_BRIDGE, refs);
+ return mncc_tx_to_cc(call->net, MNCC_BRIDGE, &bridge);
} else {
/* in case of handover, we need to re-write the RTP
* SSRC, sequence and timestamp values and thus