From: Andreas Eversberg Date: Sun, 17 May 2009 14:06:26 +0000 (+0200) Subject: - Debug option now works for GSM. X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=commitdiff_plain;h=2490abbec40c3d8bcd1248fd09223586031f4540 - Debug option now works for GSM. - Fixed some GSM information elements. modified: README modified: default/interface.conf modified: gsm.cpp --- diff --git a/README b/README index fa0c1f3..88950e4 100644 --- a/README +++ b/README @@ -498,4 +498,7 @@ Changes after Version 1.5 -> interface.conf has a tones_dir options for individual interfaces. -> interface.conf has priority over tones_dir in options.conf. -> exnsion's settings has pritority over other tones_dir setting. +- Debug option now works for GSM. +- Fixed some GSM information elements. + diff --git a/default/interface.conf b/default/interface.conf index b89ff6e..66859dd 100644 --- a/default/interface.conf +++ b/default/interface.conf @@ -164,6 +164,7 @@ #earlyb no #channel-in free #channel-out any +#nodtmf # Hint: Enter "lcr interface" for quick help on interface options. diff --git a/gsm.cpp b/gsm.cpp index 77ec791..3150694 100644 --- a/gsm.cpp +++ b/gsm.cpp @@ -391,15 +391,17 @@ void Pgsm::setup_ind(unsigned int msg_type, unsigned int callref, struct gsm_mnc /* release in case the ID is already in use */ add_trace("error", NULL, "callref already in use"); end_trace(); - gsm_trace_header(p_m_mISDNport, this, MNCC_REJ_REQ, DIRECTION_OUT); - add_trace("cause", "location", "1"); - add_trace("cause", "value", "47"); - add_trace("reason", NULL, "callref already in use"); - end_trace(); mncc = create_mncc(MNCC_REJ_REQ, callref); + gsm_trace_header(p_m_mISDNport, this, MNCC_REJ_REQ, DIRECTION_OUT); mncc->cause = 1; + mncc->cause_coding = 3; mncc->cause_location = 1; mncc->cause_value = 47; + add_trace("cause", "coding", "%d", mncc->cause_coding); + add_trace("cause", "location", "%d", mncc->cause_location); + add_trace("cause", "value", "%d", mncc->cause_value); + add_trace("reason", NULL, "callref already in use"); + end_trace(); send_and_free_mncc(gsm->network, mncc->msg_type, mncc); new_state(PORT_STATE_RELEASE); p_m_delete = 1; @@ -410,15 +412,17 @@ void Pgsm::setup_ind(unsigned int msg_type, unsigned int callref, struct gsm_mnc /* if blocked, release call with MT_RELEASE_COMPLETE */ if (p_m_mISDNport->ifport->block) { - gsm_trace_header(p_m_mISDNport, this, MNCC_REJ_REQ, DIRECTION_OUT); - add_trace("cause", "location", "1"); - add_trace("cause", "value", "27"); - add_trace("reason", NULL, "port blocked"); - end_trace(); mncc = create_mncc(MNCC_REJ_REQ, p_m_g_callref); + gsm_trace_header(p_m_mISDNport, this, MNCC_REJ_REQ, DIRECTION_OUT); mncc->cause = 1; + mncc->cause_coding = 3; mncc->cause_location = 1; mncc->cause_value = 27; + add_trace("cause", "coding", "%d", mncc->cause_coding); + add_trace("cause", "location", "%d", mncc->cause_location); + add_trace("cause", "value", "%d", mncc->cause_value); + add_trace("reason", NULL, "port is blocked"); + end_trace(); send_and_free_mncc(gsm->network, mncc->msg_type, mncc); new_state(PORT_STATE_RELEASE); p_m_delete = 1; @@ -479,15 +483,17 @@ void Pgsm::setup_ind(unsigned int msg_type, unsigned int callref, struct gsm_mnc ret = seize_bchannel(channel, 1); if (ret < 0) { no_channel: - gsm_trace_header(p_m_mISDNport, this, MNCC_REJ_REQ, DIRECTION_OUT); - add_trace("cause", "location", "1"); - add_trace("cause", "value", "34"); - add_trace("reason", NULL, "no channel"); - end_trace(); mncc = create_mncc(MNCC_REJ_REQ, p_m_g_callref); + gsm_trace_header(p_m_mISDNport, this, MNCC_REJ_REQ, DIRECTION_OUT); mncc->cause = 1; + mncc->cause_coding = 3; mncc->cause_location = 1; mncc->cause_value = 34; + add_trace("cause", "coding", "%d", mncc->cause_coding); + add_trace("cause", "location", "%d", mncc->cause_location); + add_trace("cause", "value", "%d", mncc->cause_value); + add_trace("reason", NULL, "no channel"); + end_trace(); send_and_free_mncc(gsm->network, mncc->msg_type, mncc); new_state(PORT_STATE_RELEASE); p_m_delete = 1; @@ -514,10 +520,10 @@ void Pgsm::setup_ind(unsigned int msg_type, unsigned int callref, struct gsm_mnc /* modify lchan to GSM codec V1 */ gsm_trace_header(p_m_mISDNport, this, MNCC_LCHAN_MODIFY, DIRECTION_OUT); - end_trace(); mode = create_mncc(MNCC_LCHAN_MODIFY, p_m_g_callref); mode->lchan_mode = 0x01; /* GSM V1 */ add_trace("mode", NULL, "0x%02x", mode->lchan_mode); + end_trace(); send_and_free_mncc(gsm->network, mode->msg_type, mode); /* send call proceeding */ @@ -532,8 +538,8 @@ void Pgsm::setup_ind(unsigned int msg_type, unsigned int callref, struct gsm_mnc add_trace("progress", "location", "%d", proceeding->progress_location); add_trace("progress", "descr", "%d", proceeding->progress_descr); } - send_and_free_mncc(gsm->network, proceeding->msg_type, proceeding); end_trace(); + send_and_free_mncc(gsm->network, proceeding->msg_type, proceeding); new_state(PORT_STATE_IN_PROCEEDING); @@ -608,6 +614,7 @@ void Pgsm::call_conf_ind(unsigned int msg_type, unsigned int callref, struct gsm gsm_trace_header(p_m_mISDNport, this, msg_type, DIRECTION_IN); if (mncc->cause) { + add_trace("cause", "coding", "%d", mncc->cause_coding); add_trace("cause", "location", "%", mncc->cause_location); add_trace("cause", "value", "%", mncc->cause_value); } @@ -618,8 +625,8 @@ void Pgsm::call_conf_ind(unsigned int msg_type, unsigned int callref, struct gsm mode = create_mncc(MNCC_LCHAN_MODIFY, p_m_g_callref); mode->lchan_mode = 0x01; /* GSM V1 */ add_trace("mode", NULL, "0x%02x", mode->lchan_mode); - send_and_free_mncc(gsm->network, mode->msg_type, mode); end_trace(); + send_and_free_mncc(gsm->network, mode->msg_type, mode); } @@ -697,20 +704,25 @@ void Pgsm::disc_ind(unsigned int msg_type, unsigned int callref, struct gsm_mncc if (mncc->cause) { location = mncc->cause_location; cause = mncc->cause_value; + add_trace("cause", "coding", "%d", mncc->cause_coding); add_trace("cause", "location", "%d", location); add_trace("cause", "value", "%d", cause); } end_trace(); /* send release */ - gsm_trace_header(p_m_mISDNport, this, MNCC_REL_REQ, DIRECTION_OUT); - add_trace("cause", "location", "%d", 1); - add_trace("cause", "value", "%d", cause); - end_trace(); resp = create_mncc(MNCC_REL_REQ, p_m_g_callref); + gsm_trace_header(p_m_mISDNport, this, MNCC_REL_REQ, DIRECTION_OUT); +#if 0 resp->cause = 1; + resp->cause_coding = 3; resp->cause_location = 1; resp->cause_value = cause; + add_trace("cause", "coding", "%d", resp->cause_coding); + add_trace("cause", "location", "%d", resp->cause_location); + add_trace("cause", "value", "%d", resp->cause_value); +#endif + end_trace(); send_and_free_mncc(gsm->network, resp->msg_type, resp); /* sending release to endpoint */ @@ -736,8 +748,9 @@ void Pgsm::rel_ind(unsigned int msg_type, unsigned int callref, struct gsm_mncc if (mncc->cause) { location = mncc->cause_location; cause = mncc->cause_value; - add_trace("cause", "location", "%d", location); - add_trace("cause", "value", "%d", cause); + add_trace("cause", "coding", "%d", mncc->cause_coding); + add_trace("cause", "location", "%d", mncc->cause_location); + add_trace("cause", "value", "%d", mncc->cause_value); } end_trace(); @@ -873,15 +886,16 @@ static int message_bcs(void *net, int msg_type, void *arg) if (!mISDNport) { struct gsm_mncc *rej; - gsm_trace_header(NULL, NULL, MNCC_REJ_REQ, DIRECTION_OUT); - add_trace("cause", "location", "1"); - add_trace("cause", "value", "27"); - add_trace("reason", NULL, "GSM port not loaded"); - end_trace(); rej = create_mncc(MNCC_REJ_REQ, callref); rej->cause = 1; + rej->cause_coding = 3; rej->cause_location = 1; rej->cause_value = 27; + gsm_trace_header(NULL, NULL, MNCC_REJ_REQ, DIRECTION_OUT); + add_trace("cause", "coding", "%d", rej->cause_coding); + add_trace("cause", "location", "%d", rej->cause_location); + add_trace("cause", "value", "%d", rej->cause_value); + end_trace(); send_and_free_mncc(gsm->network, rej->msg_type, rej); return 0; } @@ -1018,7 +1032,6 @@ void Pgsm::message_setup(unsigned int epoint_id, int message_id, union parameter // SCPY(&p_m_tones_dir, param->setup.ext.tones_dir); /* screen outgoing caller id */ do_screen(1, p_callerinfo.id, sizeof(p_callerinfo.id), &p_callerinfo.ntype, &p_callerinfo.present, p_m_mISDNport->ifport->interface); - do_screen(1, p_callerinfo.id2, sizeof(p_callerinfo.id2), &p_callerinfo.ntype2, &p_callerinfo.present2, p_m_mISDNport->ifport->interface); /* attach only if not already */ epointlist = p_epointlist; @@ -1088,7 +1101,7 @@ void Pgsm::message_setup(unsigned int epoint_id, int message_id, union parameter /* dialing information */ mncc->called = 1; SCPY(mncc->called_number, p_dialinginfo.id); - add_trace("dialing", "number", "%s", mncc->calling_number); + add_trace("dialing", "number", "%s", mncc->called_number); /* sending user-user */ @@ -1143,8 +1156,8 @@ void Pgsm::message_setup(unsigned int epoint_id, int message_id, union parameter /* bearer capability */ //todo - send_and_free_mncc(gsm->network, mncc->msg_type, mncc); end_trace(); + send_and_free_mncc(gsm->network, mncc->msg_type, mncc); new_state(PORT_STATE_OUT_SETUP); @@ -1198,8 +1211,8 @@ void Pgsm::message_alerting(unsigned int epoint_id, int message_id, union parame add_trace("progress", "location", "%d", mncc->progress_location); add_trace("progress", "descr", "%d", mncc->progress_descr); } - send_and_free_mncc(gsm->network, mncc->msg_type, mncc); end_trace(); + send_and_free_mncc(gsm->network, mncc->msg_type, mncc); new_state(PORT_STATE_IN_ALERTING); @@ -1296,8 +1309,10 @@ void Pgsm::message_disconnect(unsigned int epoint_id, int message_id, union para add_trace("progress", "descr", "%d", mncc->progress_descr); } mncc->cause = 1; + mncc->cause_coding = 3; mncc->cause_location = param->disconnectinfo.location; mncc->cause_value = param->disconnectinfo.cause; + add_trace("cause", "coding", "%d", mncc->cause_coding); add_trace("cause", "location", "%d", mncc->cause_location); add_trace("cause", "value", "%d", mncc->cause_value); end_trace(); @@ -1324,8 +1339,10 @@ void Pgsm::message_release(unsigned int epoint_id, int message_id, union paramet mncc = create_mncc(MNCC_REL_REQ, p_m_g_callref); gsm_trace_header(p_m_mISDNport, this, MNCC_REL_REQ, DIRECTION_OUT); mncc->cause = 1; + mncc->cause_coding = 3; mncc->cause_location = param->disconnectinfo.location; mncc->cause_value = param->disconnectinfo.cause; + add_trace("cause", "coding", "%d", mncc->cause_coding); add_trace("cause", "location", "%d", mncc->cause_location); add_trace("cause", "value", "%d", mncc->cause_value); end_trace(); @@ -1588,6 +1605,9 @@ int gsm_init(void) return gsm_exit(-EINVAL); } + /* set debug */ + debug_parse_category_mask(gsm->conf.debug); + /* init database */ if (gsm->conf.hlr[0] == '/') SCPY(hlr, gsm->conf.hlr);