rtp_stream: allow multiple codecs to be set
Many members, arguments and logging says "codec", which should accurately now say "codecs" (plural). Postpone such renaming to a separate patch, to better show actual functional changes here. Related: SYS#5066 Change-Id: If9c67b298b30f893ec661f84c9fc622ad01b5ee5neels/codecs_fmtp
parent
d2b43e647e
commit
bc934c0d80
|
@ -12,6 +12,7 @@ struct gsm_network;
|
|||
struct gsm_trans;
|
||||
struct rtp_stream;
|
||||
enum rtp_direction;
|
||||
struct sdp_audio_codecs;
|
||||
|
||||
extern struct osmo_tdef g_mgw_tdefs[];
|
||||
|
||||
|
@ -74,7 +75,8 @@ int call_leg_local_bridge(struct call_leg *cl1, uint32_t call_id1, struct gsm_tr
|
|||
int call_leg_ensure_rtp_alloc(struct call_leg *cl, enum rtp_direction dir, uint32_t call_id,
|
||||
struct gsm_trans *for_trans);
|
||||
int call_leg_ensure_ci(struct call_leg *cl, enum rtp_direction dir, uint32_t call_id, struct gsm_trans *for_trans,
|
||||
const enum mgcp_codecs *codec_if_known, const struct osmo_sockaddr_str *remote_addr_if_known);
|
||||
const struct sdp_audio_codecs *codecs_if_known,
|
||||
const struct osmo_sockaddr_str *remote_addr_if_known);
|
||||
struct osmo_sockaddr_str *call_leg_local_ip(struct call_leg *cl, enum rtp_direction dir);
|
||||
|
||||
void call_leg_rtp_stream_gone(struct call_leg *cl, struct rtp_stream *rtps);
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include <osmocom/msc/neighbor_ident.h>
|
||||
#include <osmocom/msc/ran_msg.h>
|
||||
#include <osmocom/msc/mncc_call.h>
|
||||
|
||||
#include <osmocom/msc/sdp_msg.h>
|
||||
|
||||
struct gsm0808_handover_required;
|
||||
|
||||
|
@ -92,7 +92,7 @@ struct msc_ho_state {
|
|||
struct {
|
||||
/* Saved RTP IP:port and codec in case we need to roll back */
|
||||
struct osmo_sockaddr_str ran_remote_rtp;
|
||||
enum mgcp_codecs codec;
|
||||
struct sdp_audio_codecs codec;
|
||||
} old_cell;
|
||||
};
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
#include <osmocom/core/sockaddr_str.h>
|
||||
#include <osmocom/mgcp_client/mgcp_client.h>
|
||||
#include <osmocom/msc/sdp_msg.h>
|
||||
|
||||
struct gsm_trans;
|
||||
|
||||
|
@ -38,7 +39,7 @@ struct rtp_stream {
|
|||
bool remote_sent_to_mgw;
|
||||
|
||||
bool codec_known;
|
||||
enum mgcp_codecs codec;
|
||||
struct sdp_audio_codecs codec;
|
||||
bool codec_sent_to_mgw;
|
||||
|
||||
struct osmo_mgcpc_ep_ci *ci;
|
||||
|
@ -64,7 +65,9 @@ struct rtp_stream *rtp_stream_alloc(struct call_leg *parent_call_leg, enum rtp_d
|
|||
int rtp_stream_ensure_ci(struct rtp_stream *rtps, struct osmo_mgcpc_ep *at_endpoint);
|
||||
int rtp_stream_do_mdcx(struct rtp_stream *rtps);
|
||||
|
||||
void rtp_stream_set_codec(struct rtp_stream *rtps, enum mgcp_codecs codec);
|
||||
void rtp_stream_set_codec(struct rtp_stream *rtps, const struct sdp_audio_codecs *codecs);
|
||||
void rtp_stream_set_one_codec(struct rtp_stream *rtps, const struct sdp_audio_codec *codec);
|
||||
bool rtp_stream_set_codecs_from_mgcp_codec(struct rtp_stream *rtps, enum mgcp_codecs codec);
|
||||
void rtp_stream_set_remote_addr(struct rtp_stream *rtps, const struct osmo_sockaddr_str *r);
|
||||
void rtp_stream_set_remote_osmux_cid(struct rtp_stream *rtps, uint8_t osmux_cid);
|
||||
int rtp_stream_commit(struct rtp_stream *rtps);
|
||||
|
|
|
@ -312,7 +312,8 @@ struct osmo_sockaddr_str *call_leg_local_ip(struct call_leg *cl, enum rtp_direct
|
|||
* MDCX.
|
||||
*/
|
||||
int call_leg_ensure_ci(struct call_leg *cl, enum rtp_direction dir, uint32_t call_id, struct gsm_trans *for_trans,
|
||||
const enum mgcp_codecs *codec_if_known, const struct osmo_sockaddr_str *remote_addr_if_known)
|
||||
const struct sdp_audio_codecs *codec_if_known,
|
||||
const struct osmo_sockaddr_str *remote_addr_if_known)
|
||||
{
|
||||
if (call_leg_ensure_rtp_alloc(cl, dir, call_id, for_trans))
|
||||
return -EIO;
|
||||
|
@ -322,7 +323,7 @@ int call_leg_ensure_ci(struct call_leg *cl, enum rtp_direction dir, uint32_t cal
|
|||
cl->rtp[dir]->remote_osmux_cid = -1; /* wildcard */
|
||||
}
|
||||
if (codec_if_known)
|
||||
rtp_stream_set_codec(cl->rtp[dir], *codec_if_known);
|
||||
rtp_stream_set_codec(cl->rtp[dir], codec_if_known);
|
||||
if (remote_addr_if_known && osmo_sockaddr_str_is_nonzero(remote_addr_if_known))
|
||||
rtp_stream_set_remote_addr(cl->rtp[dir], remote_addr_if_known);
|
||||
return rtp_stream_ensure_ci(cl->rtp[dir], cl->mgw_endpoint);
|
||||
|
@ -331,7 +332,7 @@ int call_leg_ensure_ci(struct call_leg *cl, enum rtp_direction dir, uint32_t cal
|
|||
int call_leg_local_bridge(struct call_leg *cl1, uint32_t call_id1, struct gsm_trans *trans1,
|
||||
struct call_leg *cl2, uint32_t call_id2, struct gsm_trans *trans2)
|
||||
{
|
||||
enum mgcp_codecs codec;
|
||||
struct sdp_audio_codecs *codec;
|
||||
|
||||
cl1->local_bridge = cl2;
|
||||
cl2->local_bridge = cl1;
|
||||
|
@ -342,14 +343,14 @@ int call_leg_local_bridge(struct call_leg *cl1, uint32_t call_id1, struct gsm_tr
|
|||
LOG_CALL_LEG(cl1, LOGL_ERROR, "RAN-side RTP stream codec is not known, not ready for bridging\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
codec = cl1->rtp[RTP_TO_RAN]->codec;
|
||||
codec = &cl1->rtp[RTP_TO_RAN]->codec;
|
||||
|
||||
if (!cl1->rtp[RTP_TO_CN] || !cl2->rtp[RTP_TO_CN])
|
||||
return -ENOTCONN;
|
||||
|
||||
call_leg_ensure_ci(cl1, RTP_TO_CN, call_id1, trans1,
|
||||
&codec, &cl2->rtp[RTP_TO_CN]->local);
|
||||
codec, &cl2->rtp[RTP_TO_CN]->local);
|
||||
call_leg_ensure_ci(cl2, RTP_TO_CN, call_id2, trans2,
|
||||
&codec, &cl1->rtp[RTP_TO_CN]->local);
|
||||
codec, &cl1->rtp[RTP_TO_CN]->local);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1750,30 +1750,32 @@ int gsm48_tch_rtp_create(struct gsm_trans *trans)
|
|||
struct call_leg *cl = msc_a->cc.call_leg;
|
||||
struct osmo_sockaddr_str *rtp_cn_local;
|
||||
struct rtp_stream *rtp_cn = cl ? cl->rtp[RTP_TO_CN] : NULL;
|
||||
uint32_t payload_type;
|
||||
int payload_msg_type;
|
||||
const struct mgcp_conn_peer *mgcp_info;
|
||||
int mncc_payload_msg_type;
|
||||
struct sdp_audio_codec *codec;
|
||||
const struct codec_mapping *m;
|
||||
|
||||
if (!rtp_cn) {
|
||||
LOG_TRANS_CAT(trans, DMNCC, LOGL_ERROR, "Cannot RTP CREATE to MNCC, no RTP set up for the CN side\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!rtp_cn->codec_known) {
|
||||
codec_filter_run(&trans->cc.codecs);
|
||||
LOG_TRANS(trans, LOGL_DEBUG, "codecs: %s\n", codec_filter_to_str(&trans->cc.codecs));
|
||||
|
||||
if (!trans->cc.codecs.result.audio_codecs.count) {
|
||||
LOG_TRANS_CAT(trans, DMNCC, LOGL_ERROR,
|
||||
"Cannot RTP CREATE to MNCC, no codec set up for the RTP CN side\n");
|
||||
"Cannot RTP CREATE to MNCC, there is no codec available\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Codec */
|
||||
payload_msg_type = mgcp_codec_to_mncc_payload_msg_type(rtp_cn->codec);
|
||||
/* Modify the MGW endpoint if necessary, usually this should already match and not cause MGCP. */
|
||||
rtp_stream_set_codec(rtp_cn, &trans->cc.codecs.result.audio_codecs);
|
||||
rtp_stream_commit(rtp_cn);
|
||||
|
||||
/* Payload Type number */
|
||||
mgcp_info = osmo_mgcpc_ep_ci_get_rtp_info(rtp_cn->ci);
|
||||
if (mgcp_info && mgcp_info->ptmap_len)
|
||||
payload_type = map_codec_to_pt(mgcp_info->ptmap, mgcp_info->ptmap_len, rtp_cn->codec);
|
||||
else
|
||||
payload_type = rtp_cn->codec;
|
||||
/* Populate the legacy MNCC codec elements: payload_type and payload_msg_type */
|
||||
codec = &rtp_cn->codec.codec[0];
|
||||
m = codec_mapping_by_subtype_name(codec->subtype_name);
|
||||
mncc_payload_msg_type = m ? m->mncc_payload_msg_type : 0;
|
||||
|
||||
rtp_cn_local = call_leg_local_ip(cl, RTP_TO_CN);
|
||||
if (!rtp_cn_local) {
|
||||
|
@ -1781,7 +1783,8 @@ int gsm48_tch_rtp_create(struct gsm_trans *trans)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
return mncc_recv_rtp(net, trans, trans->callref, MNCC_RTP_CREATE, rtp_cn_local, payload_type, payload_msg_type);
|
||||
return mncc_recv_rtp(net, trans, trans->callref, MNCC_RTP_CREATE, rtp_cn_local,
|
||||
codec->payload_type, mncc_payload_msg_type);
|
||||
}
|
||||
|
||||
static int tch_rtp_connect(struct gsm_network *net, const struct gsm_mncc_rtp *rtp)
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include <osmocom/msc/rtp_stream.h>
|
||||
#include <osmocom/msc/msub.h>
|
||||
#include <osmocom/msc/vlr.h>
|
||||
#include <osmocom/msc/codec_sdp_cc_t9n.h>
|
||||
|
||||
struct osmo_fsm mncc_call_fsm;
|
||||
static bool mncc_call_tx_rtp_create(struct mncc_call *mncc_call);
|
||||
|
@ -269,30 +270,11 @@ static bool mncc_call_rx_rtp_create(struct mncc_call *mncc_call)
|
|||
|
||||
LOG_MNCC_CALL(mncc_call, LOGL_DEBUG, "Got RTP_CREATE, responding with " OSMO_SOCKADDR_STR_FMT " %s\n",
|
||||
OSMO_SOCKADDR_STR_FMT_ARGS(&mncc_call->rtps->local),
|
||||
osmo_mgcpc_codec_name(mncc_call->rtps->codec));
|
||||
sdp_audio_codecs_to_str(&mncc_call->rtps->codec));
|
||||
/* Already know what RTP IP:port to tell the MNCC. Send it. */
|
||||
return mncc_call_tx_rtp_create(mncc_call);
|
||||
}
|
||||
|
||||
/* Convert enum mgcp_codecs to an gsm_mncc_rtp->payload_msg_type value. */
|
||||
uint32_t mgcp_codec_to_mncc_payload_msg_type(enum mgcp_codecs codec)
|
||||
{
|
||||
switch (codec) {
|
||||
default:
|
||||
/* disclaimer: i have no idea what i'm doing. */
|
||||
case CODEC_GSM_8000_1:
|
||||
return GSM_TCHF_FRAME;
|
||||
case CODEC_GSMEFR_8000_1:
|
||||
return GSM_TCHF_FRAME_EFR;
|
||||
case CODEC_GSMHR_8000_1:
|
||||
return GSM_TCHH_FRAME;
|
||||
case CODEC_AMR_8000_1:
|
||||
case CODEC_AMRWB_16000_1:
|
||||
//return GSM_TCHF_FRAME;
|
||||
return GSM_TCH_FRAME_AMR;
|
||||
}
|
||||
}
|
||||
|
||||
static bool mncc_call_tx_rtp_create(struct mncc_call *mncc_call)
|
||||
{
|
||||
if (!mncc_call->rtps || !osmo_sockaddr_str_is_nonzero(&mncc_call->rtps->local)) {
|
||||
|
@ -314,8 +296,16 @@ static bool mncc_call_tx_rtp_create(struct mncc_call *mncc_call)
|
|||
}
|
||||
|
||||
if (mncc_call->rtps->codec_known) {
|
||||
mncc_msg.rtp.payload_type = 0; /* ??? */
|
||||
mncc_msg.rtp.payload_msg_type = mgcp_codec_to_mncc_payload_msg_type(mncc_call->rtps->codec);
|
||||
struct sdp_audio_codec *codec = &mncc_call->rtps->codec.codec[0];
|
||||
const struct codec_mapping *m = codec_mapping_by_subtype_name(codec->subtype_name);
|
||||
|
||||
if (!m) {
|
||||
mncc_call_error(mncc_call, "Failed to resolve audio codec '%s'\n",
|
||||
sdp_audio_codec_to_str(codec));
|
||||
return false;
|
||||
}
|
||||
mncc_msg.rtp.payload_type = codec->payload_type;
|
||||
mncc_msg.rtp.payload_msg_type = m->mncc_payload_msg_type;
|
||||
}
|
||||
|
||||
if (mncc_call_tx(mncc_call, &mncc_msg))
|
||||
|
|
|
@ -1315,6 +1315,8 @@ static void msc_a_up_call_assignment_complete(struct msc_a *msc_a, const struct
|
|||
struct rtp_stream *rtps_to_ran = msc_a->cc.call_leg ? msc_a->cc.call_leg->rtp[RTP_TO_RAN] : NULL;
|
||||
const enum mgcp_codecs *codec_if_known = ac->assignment_complete.codec_present ?
|
||||
&ac->assignment_complete.codec : NULL;
|
||||
struct sdp_audio_codecs *codecs;
|
||||
const struct codec_mapping *m;
|
||||
|
||||
if (!rtps_to_ran) {
|
||||
LOG_MSC_A(msc_a, LOGL_ERROR, "Rx Assignment Complete, but no RTP stream is set up\n");
|
||||
|
@ -1332,10 +1334,20 @@ static void msc_a_up_call_assignment_complete(struct msc_a *msc_a, const struct
|
|||
return;
|
||||
}
|
||||
|
||||
/* Update RAN-side endpoint CI: */
|
||||
if (codec_if_known)
|
||||
rtp_stream_set_codec(rtps_to_ran, *codec_if_known);
|
||||
if (codec_if_known) {
|
||||
m = codec_mapping_by_mgcp_codec(*codec_if_known);
|
||||
if (!m) {
|
||||
LOG_TRANS(cc_trans, LOGL_ERROR, "Unknown codec in Assignment Complete: %s\n",
|
||||
osmo_mgcpc_codec_name(ac->assignment_complete.codec));
|
||||
call_leg_release(msc_a->cc.call_leg);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Update RAN-side endpoint CI: */
|
||||
rtp_stream_set_one_codec(rtps_to_ran, &m->sdp);
|
||||
}
|
||||
rtp_stream_set_remote_addr(rtps_to_ran, &ac->assignment_complete.remote_rtp);
|
||||
|
||||
if (rtps_to_ran->use_osmux)
|
||||
rtp_stream_set_remote_osmux_cid(rtps_to_ran,
|
||||
ac->assignment_complete.osmux_cid);
|
||||
|
@ -1352,8 +1364,9 @@ static void msc_a_up_call_assignment_complete(struct msc_a *msc_a, const struct
|
|||
* endpoint,
|
||||
* - the Assignment has chosen a speech codec
|
||||
* go on to create the CN side RTP stream's CI. */
|
||||
codecs = cc_trans->cc.codecs.result.audio_codecs.count ? &cc_trans->cc.codecs.result.audio_codecs : NULL;
|
||||
if (call_leg_ensure_ci(msc_a->cc.call_leg, RTP_TO_CN, cc_trans->callref, cc_trans,
|
||||
codec_if_known, NULL)) {
|
||||
codecs, NULL)) {
|
||||
LOG_MSC_A_CAT(msc_a, DCC, LOGL_ERROR, "Error creating MGW CI towards CN\n");
|
||||
call_leg_release(msc_a->cc.call_leg);
|
||||
return;
|
||||
|
@ -1745,7 +1758,8 @@ static int msc_a_start_assignment(struct msc_a *msc_a, struct gsm_trans *cc_tran
|
|||
struct call_leg *cl = msc_a->cc.call_leg;
|
||||
struct msc_i *msc_i = msc_a_msc_i(msc_a);
|
||||
struct gsm_network *net = msc_a_net(msc_a);
|
||||
enum mgcp_codecs codec, *codec_ptr;
|
||||
struct sdp_audio_codecs *codecs;
|
||||
struct sdp_audio_codecs _codecs;
|
||||
|
||||
OSMO_ASSERT(!msc_a->cc.active_trans);
|
||||
msc_a->cc.active_trans = cc_trans;
|
||||
|
@ -1782,12 +1796,14 @@ static int msc_a_start_assignment(struct msc_a *msc_a, struct gsm_trans *cc_tran
|
|||
return osmo_fsm_inst_dispatch(msc_a->c.fi, MSC_EV_CALL_LEG_RTP_LOCAL_ADDR_AVAILABLE, cl->rtp[RTP_TO_RAN]);
|
||||
|
||||
if (msc_a->c.ran->type == OSMO_RAT_UTRAN_IU) {
|
||||
codec = CODEC_IUFP;
|
||||
codec_ptr = &codec;
|
||||
/* The hNodeB facing side of RTP talks IuUP. Hard code the RAN facing codec to "IUFP". */
|
||||
_codecs = (struct sdp_audio_codecs){0};
|
||||
sdp_audio_codecs_add_mgcp_codec(&_codecs, CODEC_IUFP);
|
||||
codecs = &_codecs;
|
||||
} else {
|
||||
codec_ptr = NULL;
|
||||
codecs = cc_trans->cc.codecs.result.audio_codecs.count ? &cc_trans->cc.codecs.result.audio_codecs : NULL;
|
||||
}
|
||||
return call_leg_ensure_ci(msc_a->cc.call_leg, RTP_TO_RAN, cc_trans->callref, cc_trans, codec_ptr, NULL);
|
||||
return call_leg_ensure_ci(msc_a->cc.call_leg, RTP_TO_RAN, cc_trans->callref, cc_trans, codecs, NULL);
|
||||
}
|
||||
|
||||
int msc_a_try_call_assignment(struct gsm_trans *cc_trans)
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include <osmocom/msc/call_leg.h>
|
||||
#include <osmocom/msc/rtp_stream.h>
|
||||
#include <osmocom/msc/mncc_call.h>
|
||||
#include <osmocom/msc/codec_sdp_cc_t9n.h>
|
||||
|
||||
struct osmo_fsm msc_ho_fsm;
|
||||
|
||||
|
@ -726,9 +727,14 @@ static void msc_ho_rtp_switch_to_new_cell(struct msc_a *msc_a)
|
|||
|
||||
/* Switch over to the new peer */
|
||||
rtp_stream_set_remote_addr(rtp_to_ran, &msc_a->ho.new_cell.ran_remote_rtp);
|
||||
if (msc_a->ho.new_cell.codec_present)
|
||||
rtp_stream_set_codec(rtp_to_ran, msc_a->ho.new_cell.codec);
|
||||
else
|
||||
if (msc_a->ho.new_cell.codec_present) {
|
||||
struct sdp_audio_codecs codecs = {};
|
||||
if (!sdp_audio_codecs_add_mgcp_codec(&codecs, msc_a->ho.new_cell.codec)) {
|
||||
LOG_HO(msc_a, LOGL_ERROR,
|
||||
"Cannot resolve codec: %s\n", osmo_mgcpc_codec_name(msc_a->ho.new_cell.codec));
|
||||
} else
|
||||
rtp_stream_set_codec(rtp_to_ran, &codecs);
|
||||
} else
|
||||
LOG_HO(msc_a, LOGL_ERROR, "No codec is set\n");
|
||||
rtp_stream_commit(rtp_to_ran);
|
||||
}
|
||||
|
@ -768,7 +774,7 @@ static void msc_ho_rtp_rollback_to_old_cell(struct msc_a *msc_a)
|
|||
|
||||
/* Switch back to the old cell */
|
||||
rtp_stream_set_remote_addr(rtp_to_ran, &msc_a->ho.old_cell.ran_remote_rtp);
|
||||
rtp_stream_set_codec(rtp_to_ran, msc_a->ho.old_cell.codec);
|
||||
rtp_stream_set_codec(rtp_to_ran, &msc_a->ho.old_cell.codec);
|
||||
rtp_stream_commit(rtp_to_ran);
|
||||
}
|
||||
|
||||
|
|
|
@ -450,9 +450,12 @@ static int msc_t_patch_and_send_ho_request_ack(struct msc_t *msc_t, const struct
|
|||
if (r->codec_present) {
|
||||
LOG_MSC_T(msc_t, LOGL_DEBUG, "From Handover Request Ack, got %s\n",
|
||||
osmo_mgcpc_codec_name(r->codec));
|
||||
rtp_stream_set_codec(rtp_ran, r->codec);
|
||||
if (!rtp_stream_set_codecs_from_mgcp_codec(rtp_ran, r->codec)) {
|
||||
LOG_MSC_T(msc_t, LOGL_ERROR, "Cannot resolve codec in Handover Request Ack: %s\n",
|
||||
osmo_mgcpc_codec_name(r->codec));
|
||||
}
|
||||
if (rtp_cn)
|
||||
rtp_stream_set_codec(rtp_cn, r->codec);
|
||||
rtp_stream_set_codecs_from_mgcp_codec(rtp_cn, r->codec);
|
||||
} else {
|
||||
LOG_MSC_T(msc_t, LOGL_DEBUG, "No codec in Handover Request Ack\n");
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include <osmocom/msc/transaction.h>
|
||||
#include <osmocom/msc/call_leg.h>
|
||||
#include <osmocom/msc/rtp_stream.h>
|
||||
#include <osmocom/msc/codec_sdp_cc_t9n.h>
|
||||
|
||||
#define LOG_RTPS(rtps, level, fmt, args...) \
|
||||
LOGPFSML(rtps->fi, level, fmt, ##args)
|
||||
|
@ -311,8 +312,23 @@ static int rtp_stream_do_mgcp_verb(struct rtp_stream *rtps, enum mgcp_verb verb,
|
|||
verb_info.conn_mode = rtps->crcx_conn_mode;
|
||||
|
||||
if (rtps->codec_known) {
|
||||
verb_info.codecs[0] = rtps->codec;
|
||||
verb_info.codecs_len = 1;
|
||||
/* Send the list of codecs to the MGW. Ideally we would just feed the SDP directly, but for legacy
|
||||
* reasons we still need to translate to a struct mgcp_conn_peer representation to send it. */
|
||||
struct sdp_audio_codec *codec;
|
||||
int i = 0;
|
||||
foreach_sdp_audio_codec(codec, &rtps->codec) {
|
||||
const struct codec_mapping *m = codec_mapping_by_subtype_name(codec->subtype_name);
|
||||
if (!m)
|
||||
continue;
|
||||
verb_info.codecs[i] = m->mgcp;
|
||||
verb_info.ptmap[i] = (struct ptmap){
|
||||
.codec = m->mgcp,
|
||||
.pt = codec->payload_type,
|
||||
};
|
||||
i++;
|
||||
verb_info.codecs_len = i;
|
||||
verb_info.ptmap_len = i;
|
||||
}
|
||||
rtps->codec_sent_to_mgw = true;
|
||||
}
|
||||
if (osmo_sockaddr_str_is_nonzero(&rtps->remote)) {
|
||||
|
@ -361,10 +377,6 @@ void rtp_stream_release(struct rtp_stream *rtps)
|
|||
* least one of them has not yet been sent to the MGW in a previous CRCX or MDCX. */
|
||||
int rtp_stream_commit(struct rtp_stream *rtps)
|
||||
{
|
||||
if (!rtps->ci) {
|
||||
LOG_RTPS(rtps, LOGL_DEBUG, "Not committing: no MGW endpoint CI set up\n");
|
||||
return -1;
|
||||
}
|
||||
if (!osmo_sockaddr_str_is_nonzero(&rtps->remote)) {
|
||||
LOG_RTPS(rtps, LOGL_DEBUG, "Not committing: no remote RTP address known\n");
|
||||
return -1;
|
||||
|
@ -377,6 +389,10 @@ int rtp_stream_commit(struct rtp_stream *rtps)
|
|||
LOG_RTPS(rtps, LOGL_DEBUG, "Not committing: both remote RTP address and codec already set up at MGW\n");
|
||||
return 0;
|
||||
}
|
||||
if (!rtps->ci) {
|
||||
LOG_RTPS(rtps, LOGL_DEBUG, "Not committing: no MGW endpoint CI set up\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
LOG_RTPS(rtps, LOGL_DEBUG, "Committing: Tx MDCX to update the MGW: updating%s%s%s\n",
|
||||
rtps->remote_sent_to_mgw ? "" : " remote-RTP-IP-port",
|
||||
|
@ -385,19 +401,49 @@ int rtp_stream_commit(struct rtp_stream *rtps)
|
|||
return rtp_stream_do_mdcx(rtps);
|
||||
}
|
||||
|
||||
void rtp_stream_set_codec(struct rtp_stream *rtps, enum mgcp_codecs codec)
|
||||
void rtp_stream_set_codec(struct rtp_stream *rtps, const struct sdp_audio_codecs *codec)
|
||||
{
|
||||
if (!codec || !codec->count)
|
||||
return;
|
||||
if (sdp_audio_codecs_cmp(&rtps->codec, codec, false, true) == 0) {
|
||||
LOG_RTPS(rtps, LOGL_DEBUG, "no change: codecs already set to %s\n",
|
||||
sdp_audio_codecs_to_str(&rtps->codec));
|
||||
return;
|
||||
}
|
||||
if (rtps->fi->state == RTP_STREAM_ST_ESTABLISHED)
|
||||
rtp_stream_state_chg(rtps, RTP_STREAM_ST_ESTABLISHING);
|
||||
LOG_RTPS(rtps, LOGL_DEBUG, "setting codec to %s\n", osmo_mgcpc_codec_name(codec));
|
||||
rtps->codec = codec;
|
||||
LOG_RTPS(rtps, LOGL_DEBUG, "setting codec to %s\n", sdp_audio_codecs_to_str(codec));
|
||||
rtps->codec = *codec;
|
||||
rtps->codec_known = true;
|
||||
rtps->codec_sent_to_mgw = false;
|
||||
rtp_stream_update_id(rtps);
|
||||
}
|
||||
|
||||
/* Convenience shortcut to call rtp_stream_set_codecs() with a list of only one sdp_audio_codec record. */
|
||||
void rtp_stream_set_one_codec(struct rtp_stream *rtps, const struct sdp_audio_codec *codec)
|
||||
{
|
||||
struct sdp_audio_codecs codecs = {};
|
||||
sdp_audio_codecs_add_copy(&codecs, codec);
|
||||
rtp_stream_set_codec(rtps, &codecs);
|
||||
}
|
||||
|
||||
/* For legacy, rather use rtp_stream_set_codecs() with a full codecs list. */
|
||||
bool rtp_stream_set_codecs_from_mgcp_codec(struct rtp_stream *rtps, enum mgcp_codecs codec)
|
||||
{
|
||||
struct sdp_audio_codecs codecs = {};
|
||||
if (!sdp_audio_codecs_add_mgcp_codec(&codecs, codec))
|
||||
return false;
|
||||
rtp_stream_set_codec(rtps, &codecs);
|
||||
return true;
|
||||
}
|
||||
|
||||
void rtp_stream_set_remote_addr(struct rtp_stream *rtps, const struct osmo_sockaddr_str *r)
|
||||
{
|
||||
if (osmo_sockaddr_str_cmp(&rtps->remote, r) == 0) {
|
||||
LOG_RTPS(rtps, LOGL_DEBUG, "remote addr already " OSMO_SOCKADDR_STR_FMT ", no change\n",
|
||||
OSMO_SOCKADDR_STR_FMT_ARGS(r));
|
||||
return;
|
||||
}
|
||||
if (rtps->fi->state == RTP_STREAM_ST_ESTABLISHED)
|
||||
rtp_stream_state_chg(rtps, RTP_STREAM_ST_ESTABLISHING);
|
||||
LOG_RTPS(rtps, LOGL_DEBUG, "setting remote addr to " OSMO_SOCKADDR_STR_FMT "\n", OSMO_SOCKADDR_STR_FMT_ARGS(r));
|
||||
|
|
|
@ -304,7 +304,7 @@ DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVI
|
|||
MGW <--CRCX to RTP_TO_RAN-- MSC: callref=0x80000001
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){UNINITIALIZED}: Allocated
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){UNINITIALIZED}: is child of call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483649:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to VND.3GPP.IUFP/16000
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483649:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to VND.3GPP.IUFP#96
|
||||
- MGW acknowledges the CRCX, triggering Assignment
|
||||
MGW --CRCX OK to RTP_TO_RAN--> MSC
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){ESTABLISHING}: Received Event CALL_LEG_EV_RTP_STREAM_ADDR_AVAILABLE
|
||||
|
@ -314,18 +314,21 @@ DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE
|
|||
DMSC dummy_msc_i(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){0}: Received Event MSC_I_EV_FROM_A_FORWARD_ACCESS_SIGNALLING_REQUEST
|
||||
- Assignment succeeds, triggering CRCX to CN
|
||||
DIUCS msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){MSC_A_ST_COMMUNICATING}: RAN decode: ASSIGNMENT_COMPLETE
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483649:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to AMR/8000/1
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483649:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to AMR:octet-align=1#112
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483649:RTP_TO_RAN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: setting remote addr to 1.2.3.4:1234
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483649:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Not committing: no MGW endpoint CI set up
|
||||
MGW <--CRCX to RTP_TO_CN-- MSC: callref=0x80000001
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){UNINITIALIZED}: Allocated
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){UNINITIALIZED}: is child of call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483649:RTP_TO_CN:no-CI){UNINITIALIZED}: setting codec to AMR/8000/1
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483649:RTP_TO_CN:no-CI){UNINITIALIZED}: setting codec to AMR:octet-align=1#112
|
||||
- CN RTP address is available, trigger MNCC_RTP_CREATE
|
||||
MGW --CRCX OK to RTP_TO_CN--> MSC
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){ESTABLISHING}: Received Event CALL_LEG_EV_RTP_STREAM_ADDR_AVAILABLE
|
||||
DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){MSC_A_ST_COMMUNICATING}: Received Event MSC_EV_CALL_LEG_RTP_LOCAL_ADDR_AVAILABLE
|
||||
DIUCS msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){MSC_A_ST_COMMUNICATING}: MGW endpoint's RTP address available for the CI RTP_TO_CN: 10.23.23.1:23 (osmux=no:-2)
|
||||
DCC trans(CC:INITIATED IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ callref-0x80000001 tid-8) codecs: RAN={AMR:octet-align=1#112,AMR-WB:octet-align=1#113} MS={AMR:octet-align=1#112,GSM-EFR#110,GSM#3,GSM-HR-08#111} result=:0{AMR:octet-align=1#112}
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483649:RTP_TO_CN:no-CI){UNINITIALIZED}: no change: codecs already set to AMR:octet-align=1#112
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483649:RTP_TO_CN:no-CI){UNINITIALIZED}: Not committing: no remote RTP address known
|
||||
DMNCC trans(CC:INITIATED IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ callref-0x80000001 tid-8) tx MNCC_RTP_CREATE
|
||||
MSC --> MNCC: callref 0x80000001: MNCC_RTP_CREATE
|
||||
- MNCC says that's fine
|
||||
|
@ -786,7 +789,7 @@ DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_R
|
|||
MGW <--CRCX to RTP_TO_RAN-- MSC: callref=0x423
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){UNINITIALIZED}: Allocated
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){UNINITIALIZED}: is child of call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to VND.3GPP.IUFP/16000
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to VND.3GPP.IUFP#96
|
||||
DMNCC trans(CC:MO_TERM_CALL_CONF IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP callref-0x423 tid-0) tx MNCC_CALL_CONF_IND
|
||||
MSC --> MNCC: callref 0x423: MNCC_CALL_CONF_IND
|
||||
DREF msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_COMMUNICATING}: - rx_from_ms: now used by 1 (cc)
|
||||
|
@ -804,18 +807,20 @@ DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RES
|
|||
DMSC dummy_msc_i(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){0}: Received Event MSC_I_EV_FROM_A_FORWARD_ACCESS_SIGNALLING_REQUEST
|
||||
- Assignment completes, triggering CRCX to CN
|
||||
DIUCS msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_COMMUNICATING}: RAN decode: ASSIGNMENT_COMPLETE
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to AMR/8000/1
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to AMR:octet-align=1#112
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: setting remote addr to 1.2.3.4:1234
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Not committing: no MGW endpoint CI set up
|
||||
MGW <--CRCX to RTP_TO_CN-- MSC: callref=0x423
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){UNINITIALIZED}: Allocated
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){UNINITIALIZED}: is child of call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI){UNINITIALIZED}: setting codec to AMR/8000/1
|
||||
- When the CN side RTP address is known, send MNCC_RTP_CREATE
|
||||
MGW --CRCX OK to RTP_TO_CN--> MSC
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){ESTABLISHING}: Received Event CALL_LEG_EV_RTP_STREAM_ADDR_AVAILABLE
|
||||
DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_COMMUNICATING}: Received Event MSC_EV_CALL_LEG_RTP_LOCAL_ADDR_AVAILABLE
|
||||
DIUCS msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_COMMUNICATING}: MGW endpoint's RTP address available for the CI RTP_TO_CN: 10.23.23.1:23 (osmux=no:-2)
|
||||
DCC trans(CC:MO_TERM_CALL_CONF IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP callref-0x423 tid-0) codecs: RAN={AMR:octet-align=1#112,AMR-WB:octet-align=1#113} MS={AMR:octet-align=1#112,GSM-EFR#110,GSM#3,GSM-HR-08#111} result=:0{AMR:octet-align=1#112}
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI){UNINITIALIZED}: setting codec to AMR:octet-align=1#112
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: Not committing: no remote RTP address known
|
||||
DMNCC trans(CC:MO_TERM_CALL_CONF IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP callref-0x423 tid-0) tx MNCC_RTP_CREATE
|
||||
MSC --> MNCC: callref 0x423: MNCC_RTP_CREATE
|
||||
- Total time passed: 1.000023 s
|
||||
|
@ -903,9 +908,9 @@ DREF VLR subscr IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100 + vlr_subscr_c
|
|||
DREF VLR subscr IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100 - vlr_subscr_cancel_attach_fsm: now used by 3 (attached,active-conn,msc_a_fsm_releasing_onenter)
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){ESTABLISHING}: state_chg to RELEASING
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){RELEASING}: Terminating (cause = OSMO_FSM_TERM_REGULAR)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI){UNINITIALIZED}: Terminating in cascade, depth 2 (cause = OSMO_FSM_TERM_PARENT, caused by: call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP))
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI){UNINITIALIZED}: Removing from parent call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI){UNINITIALIZED}: Deferring: will deallocate with call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: Terminating in cascade, depth 2 (cause = OSMO_FSM_TERM_PARENT, caused by: call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP))
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: Removing from parent call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: Deferring: will deallocate with call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Terminating in cascade, depth 2 (cause = OSMO_FSM_TERM_PARENT, caused by: call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP))
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Removing from parent call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Deferring: will deallocate with call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
|
@ -1258,7 +1263,7 @@ DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_R
|
|||
MGW <--CRCX to RTP_TO_RAN-- MSC: callref=0x423
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){UNINITIALIZED}: Allocated
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){UNINITIALIZED}: is child of call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to VND.3GPP.IUFP/16000
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to VND.3GPP.IUFP#96
|
||||
DMNCC trans(CC:MO_TERM_CALL_CONF IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP callref-0x423 tid-0) tx MNCC_CALL_CONF_IND
|
||||
MSC --> MNCC: callref 0x423: MNCC_CALL_CONF_IND
|
||||
DREF msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_COMMUNICATING}: - rx_from_ms: now used by 1 (cc)
|
||||
|
@ -1276,18 +1281,20 @@ DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RES
|
|||
DMSC dummy_msc_i(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){0}: Received Event MSC_I_EV_FROM_A_FORWARD_ACCESS_SIGNALLING_REQUEST
|
||||
- Assignment completes, triggering CRCX to CN
|
||||
DIUCS msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_COMMUNICATING}: RAN decode: ASSIGNMENT_COMPLETE
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to AMR/8000/1
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to AMR:octet-align=1#112
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: setting remote addr to 1.2.3.4:1234
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Not committing: no MGW endpoint CI set up
|
||||
MGW <--CRCX to RTP_TO_CN-- MSC: callref=0x423
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){UNINITIALIZED}: Allocated
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){UNINITIALIZED}: is child of call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI){UNINITIALIZED}: setting codec to AMR/8000/1
|
||||
- When the CN side RTP address is known, send MNCC_RTP_CREATE
|
||||
MGW --CRCX OK to RTP_TO_CN--> MSC
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){ESTABLISHING}: Received Event CALL_LEG_EV_RTP_STREAM_ADDR_AVAILABLE
|
||||
DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_COMMUNICATING}: Received Event MSC_EV_CALL_LEG_RTP_LOCAL_ADDR_AVAILABLE
|
||||
DIUCS msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_COMMUNICATING}: MGW endpoint's RTP address available for the CI RTP_TO_CN: 10.23.23.1:23 (osmux=no:-2)
|
||||
DCC trans(CC:MO_TERM_CALL_CONF IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP callref-0x423 tid-0) codecs: RAN={AMR:octet-align=1#112,AMR-WB:octet-align=1#113} MS={AMR:octet-align=1#112,GSM-EFR#110,GSM#3,GSM-HR-08#111} result=:0{AMR:octet-align=1#112}
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI){UNINITIALIZED}: setting codec to AMR:octet-align=1#112
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: Not committing: no remote RTP address known
|
||||
DMNCC trans(CC:MO_TERM_CALL_CONF IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP callref-0x423 tid-0) tx MNCC_RTP_CREATE
|
||||
MSC --> MNCC: callref 0x423: MNCC_RTP_CREATE
|
||||
- Total time passed: 1.000023 s
|
||||
|
@ -1328,9 +1335,9 @@ DREF msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RES
|
|||
DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_RELEASING}: Received Event MSC_A_EV_UNUSED
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){ESTABLISHING}: state_chg to RELEASING
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){RELEASING}: Terminating (cause = OSMO_FSM_TERM_REGULAR)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI){UNINITIALIZED}: Terminating in cascade, depth 2 (cause = OSMO_FSM_TERM_PARENT, caused by: call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP))
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI){UNINITIALIZED}: Removing from parent call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI){UNINITIALIZED}: Deferring: will deallocate with call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: Terminating in cascade, depth 2 (cause = OSMO_FSM_TERM_PARENT, caused by: call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP))
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: Removing from parent call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: Deferring: will deallocate with call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Terminating in cascade, depth 2 (cause = OSMO_FSM_TERM_PARENT, caused by: call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP))
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Removing from parent call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Deferring: will deallocate with call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
|
@ -1676,7 +1683,7 @@ DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVI
|
|||
MGW <--CRCX to RTP_TO_RAN-- MSC: callref=0x80000002
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){UNINITIALIZED}: Allocated
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){UNINITIALIZED}: is child of call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483650:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to VND.3GPP.IUFP/16000
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483650:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to VND.3GPP.IUFP#96
|
||||
- MGW acknowledges the CRCX, triggering Assignment
|
||||
MGW --CRCX OK to RTP_TO_RAN--> MSC
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){ESTABLISHING}: Received Event CALL_LEG_EV_RTP_STREAM_ADDR_AVAILABLE
|
||||
|
@ -1686,18 +1693,21 @@ DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE
|
|||
DMSC dummy_msc_i(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){0}: Received Event MSC_I_EV_FROM_A_FORWARD_ACCESS_SIGNALLING_REQUEST
|
||||
- Assignment succeeds, triggering CRCX to CN
|
||||
DIUCS msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){MSC_A_ST_COMMUNICATING}: RAN decode: ASSIGNMENT_COMPLETE
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483650:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to AMR/8000/1
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483650:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to AMR:octet-align=1#112
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483650:RTP_TO_RAN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: setting remote addr to 1.2.3.4:1234
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483650:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Not committing: no MGW endpoint CI set up
|
||||
MGW <--CRCX to RTP_TO_CN-- MSC: callref=0x80000002
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){UNINITIALIZED}: Allocated
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){UNINITIALIZED}: is child of call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483650:RTP_TO_CN:no-CI){UNINITIALIZED}: setting codec to AMR/8000/1
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483650:RTP_TO_CN:no-CI){UNINITIALIZED}: setting codec to AMR:octet-align=1#112
|
||||
- CN RTP address is available, trigger MNCC_RTP_CREATE
|
||||
MGW --CRCX OK to RTP_TO_CN--> MSC
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){ESTABLISHING}: Received Event CALL_LEG_EV_RTP_STREAM_ADDR_AVAILABLE
|
||||
DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){MSC_A_ST_COMMUNICATING}: Received Event MSC_EV_CALL_LEG_RTP_LOCAL_ADDR_AVAILABLE
|
||||
DIUCS msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){MSC_A_ST_COMMUNICATING}: MGW endpoint's RTP address available for the CI RTP_TO_CN: 10.23.23.1:23 (osmux=no:-2)
|
||||
DCC trans(CC:INITIATED IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ callref-0x80000002 tid-8) codecs: RAN={AMR:octet-align=1#112,AMR-WB:octet-align=1#113} MS={AMR:octet-align=1#112,GSM-EFR#110,GSM#3,GSM-HR-08#111} result=:0{AMR:octet-align=1#112}
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483650:RTP_TO_CN:no-CI){UNINITIALIZED}: no change: codecs already set to AMR:octet-align=1#112
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483650:RTP_TO_CN:no-CI){UNINITIALIZED}: Not committing: no remote RTP address known
|
||||
DMNCC trans(CC:INITIATED IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ callref-0x80000002 tid-8) tx MNCC_RTP_CREATE
|
||||
MSC --> MNCC: callref 0x80000002: MNCC_RTP_CREATE
|
||||
- MNCC says that's fine
|
||||
|
@ -2105,7 +2115,7 @@ DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVI
|
|||
MGW <--CRCX to RTP_TO_RAN-- MSC: callref=0x80000003
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){UNINITIALIZED}: Allocated
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){UNINITIALIZED}: is child of call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483651:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to VND.3GPP.IUFP/16000
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483651:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to VND.3GPP.IUFP#96
|
||||
- MGW acknowledges the CRCX, triggering Assignment
|
||||
MGW --CRCX OK to RTP_TO_RAN--> MSC
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){ESTABLISHING}: Received Event CALL_LEG_EV_RTP_STREAM_ADDR_AVAILABLE
|
||||
|
@ -2115,18 +2125,21 @@ DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE
|
|||
DMSC dummy_msc_i(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){0}: Received Event MSC_I_EV_FROM_A_FORWARD_ACCESS_SIGNALLING_REQUEST
|
||||
- Assignment succeeds, triggering CRCX to CN
|
||||
DIUCS msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){MSC_A_ST_COMMUNICATING}: RAN decode: ASSIGNMENT_COMPLETE
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483651:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to AMR/8000/1
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483651:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codec to AMR:octet-align=1#112
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483651:RTP_TO_RAN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: setting remote addr to 1.2.3.4:1234
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483651:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Not committing: no MGW endpoint CI set up
|
||||
MGW <--CRCX to RTP_TO_CN-- MSC: callref=0x80000003
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){UNINITIALIZED}: Allocated
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){UNINITIALIZED}: is child of call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483651:RTP_TO_CN:no-CI){UNINITIALIZED}: setting codec to AMR/8000/1
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483651:RTP_TO_CN:no-CI){UNINITIALIZED}: setting codec to AMR:octet-align=1#112
|
||||
- CN RTP address is available, trigger MNCC_RTP_CREATE
|
||||
MGW --CRCX OK to RTP_TO_CN--> MSC
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){ESTABLISHING}: Received Event CALL_LEG_EV_RTP_STREAM_ADDR_AVAILABLE
|
||||
DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){MSC_A_ST_COMMUNICATING}: Received Event MSC_EV_CALL_LEG_RTP_LOCAL_ADDR_AVAILABLE
|
||||
DIUCS msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ){MSC_A_ST_COMMUNICATING}: MGW endpoint's RTP address available for the CI RTP_TO_CN: 10.23.23.1:23 (osmux=no:-2)
|
||||
DCC trans(CC:INITIATED IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ callref-0x80000003 tid-8) codecs: RAN={AMR:octet-align=1#112,AMR-WB:octet-align=1#113} MS={AMR:octet-align=1#112,GSM-EFR#110,GSM#3,GSM-HR-08#111} result=:0{AMR:octet-align=1#112}
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483651:RTP_TO_CN:no-CI){UNINITIALIZED}: no change: codecs already set to AMR:octet-align=1#112
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ:trans-8:call-2147483651:RTP_TO_CN:no-CI){UNINITIALIZED}: Not committing: no remote RTP address known
|
||||
DMNCC trans(CC:INITIATED IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:CM_SERVICE_REQ callref-0x80000003 tid-8) tx MNCC_RTP_CREATE
|
||||
MSC --> MNCC: callref 0x80000003: MNCC_RTP_CREATE
|
||||
- MNCC says that's fine
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
#include <osmocom/msc/msc_t.h>
|
||||
#include <osmocom/msc/call_leg.h>
|
||||
#include <osmocom/msc/rtp_stream.h>
|
||||
#include <osmocom/msc/codec_sdp_cc_t9n.h>
|
||||
|
||||
#include "msc_vlr_tests.h"
|
||||
|
||||
|
@ -842,9 +843,11 @@ void expect_crcx(enum rtp_direction towards)
|
|||
|
||||
/* override, requires '-Wl,--wrap=call_leg_ensure_ci' */
|
||||
int __real_call_leg_ensure_ci(struct call_leg *cl, enum rtp_direction dir, uint32_t call_id, struct gsm_trans *for_trans,
|
||||
const enum mgcp_codecs *codec_if_known, const struct osmo_sockaddr_str *remote_addr_if_known);
|
||||
const struct sdp_audio_codecs *codecs_if_known,
|
||||
const struct osmo_sockaddr_str *remote_addr_if_known);
|
||||
int __wrap_call_leg_ensure_ci(struct call_leg *cl, enum rtp_direction dir, uint32_t call_id, struct gsm_trans *for_trans,
|
||||
const enum mgcp_codecs *codec_if_known, const struct osmo_sockaddr_str *remote_addr_if_known)
|
||||
const struct sdp_audio_codecs *codecs_if_known,
|
||||
const struct osmo_sockaddr_str *remote_addr_if_known)
|
||||
{
|
||||
if (!cl->rtp[dir]) {
|
||||
log("MGW <--CRCX to %s-- MSC: callref=0x%x", rtp_direction_name(dir), call_id);
|
||||
|
@ -854,8 +857,8 @@ int __wrap_call_leg_ensure_ci(struct call_leg *cl, enum rtp_direction dir, uint3
|
|||
got_crcx = true;
|
||||
|
||||
call_leg_ensure_rtp_alloc(cl, dir, call_id, for_trans);
|
||||
if (codec_if_known)
|
||||
rtp_stream_set_codec(cl->rtp[dir], *codec_if_known);
|
||||
if (codecs_if_known)
|
||||
rtp_stream_set_codec(cl->rtp[dir], codecs_if_known);
|
||||
if (remote_addr_if_known && osmo_sockaddr_str_is_nonzero(remote_addr_if_known))
|
||||
rtp_stream_set_remote_addr(cl->rtp[dir], remote_addr_if_known);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue