X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=gsm_bs.cpp;h=ee4bf045439c2f97a609d428cabcfb1e020618a4;hp=fc59125a71689034117a71869375a26f9cefbcc1;hb=49dd4be5b9955ad714e81bd0639875235c8894ef;hpb=97fb04eee95f8109a8e80aa38a5c43226863279a diff --git a/gsm_bs.cpp b/gsm_bs.cpp index fc59125..ee4bf04 100644 --- a/gsm_bs.cpp +++ b/gsm_bs.cpp @@ -64,6 +64,25 @@ Pgsm_bs::~Pgsm_bs() PDEBUG(DEBUG_GSM, "Destroyed GSM BS process(%s).\n", p_name); } +static const char *media_type2name(unsigned char media_type) { + switch (media_type) { + case MEDIA_TYPE_ULAW: + return "PCMU"; + case MEDIA_TYPE_ALAW: + return "PCMA"; + case MEDIA_TYPE_GSM: + return "GSM"; + case MEDIA_TYPE_GSM_HR: + return "GSM-HR"; + case MEDIA_TYPE_GSM_EFR: + return "GSM-EFR"; + case MEDIA_TYPE_AMR: + return "AMR"; + } + + return "UKN"; +} + /* PROCEEDING INDICATION (from MS) */ void Pgsm_bs::call_conf_ind(unsigned int msg_type, unsigned int callref, struct gsm_mncc *mncc) { @@ -160,15 +179,24 @@ void Pgsm_bs::start_dtmf_ind(unsigned int msg_type, unsigned int callref, struct send_and_free_mncc(p_g_lcr_gsm, resp->msg_type, resp); if (p_g_rtp_bridge) { - class Port *remote = bridge_remote(); - - if (remote) { - struct lcr_msg *message; - - /* send dtmf information, because we bridge RTP directly */ - message = message_create(0, remote->p_serial, EPOINT_TO_PORT, MESSAGE_DTMF); - message->param.dtmf = mncc->keypad; - message_put(message); + /* if two members are bridged */ + if (p_bridge && p_bridge->first && p_bridge->first->next && !p_bridge->first->next->next) { + class Port *remote = NULL; + + /* select other member */ + if (p_bridge->first->port == this) + remote = p_bridge->first->next->port; + if (p_bridge->first->next->port == this) + remote = p_bridge->first->port; + + if (remote) { + struct lcr_msg *message; + + /* send dtmf information, because we bridge RTP directly */ + message = message_create(0, remote->p_serial, EPOINT_TO_PORT, MESSAGE_DTMF); + message->param.dtmf = mncc->keypad; + message_put(message); + } } } else { /* generate DTMF tones, since we do audio forwarding inside LCR */ @@ -296,7 +324,7 @@ void Pgsm_bs::select_payload_type(struct gsm_mncc *mncc, unsigned char *payload_ if ((mncc->fields & MNCC_F_BEARER_CAP)) { /* select preferred payload type from list */ int i; - uint8_t dynamic_type = 96; + unsigned char dynamic_type = 96; add_trace("bearer", "capa", "given by MS"); for (i = 0; mncc->bearer_cap.speech_ver[i] >= 0; i++) {