X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=dss1.cpp;h=6a718ab8dcbf7605ad32e86fc07b30cece5e3b21;hp=c819835f6bec6be8130c6c41964ebd3522f903e8;hb=57defecea870c265179b69f811416c7a4659b0ee;hpb=a12d7eee22a72f4c999535892763dde15212e89e diff --git a/dss1.cpp b/dss1.cpp index c819835..6a718ab 100644 --- a/dss1.cpp +++ b/dss1.cpp @@ -16,7 +16,9 @@ extern "C" { } #include +#ifdef OLD_MT_ASSIGN extern unsigned int mt_assign_pid; +#endif #include "ie.cpp" @@ -727,8 +729,7 @@ void Pdss1::setup_ind(unsigned int cmd, unsigned int pid, struct l3_msg *l3m) FATAL("Incoming call but already got an endpoint.\n"); if (!(epoint = new Endpoint(p_serial, 0))) FATAL("No memory for Endpoint instance\n"); - if (!(epoint->ep_app = new DEFAULT_ENDPOINT_APP(epoint, 0))) //incoming - FATAL("No memory for Endpoint Application instance\n"); + epoint->ep_app = new_endpointapp(epoint, 0, p_m_mISDNport->ifport->interface->app); //incoming epointlist_new(epoint->ep_serial); /* send setup message to endpoit */ @@ -1941,7 +1942,9 @@ void Pdss1::message_information(unsigned int epoint_id, int message_id, union pa void Pdss1::message_setup(unsigned int epoint_id, int message_id, union parameter *param) { l3_msg *l3m; +#ifdef OLD_MT_ASSIGN int ret; +#endif int plan, type, screen, present, reason; int plan2, type2, screen2, present2; int capability, mode, rate, coding, user, presentation, interpretation, hlc, exthlc; @@ -1968,8 +1971,8 @@ void Pdss1::message_setup(unsigned int epoint_id, int message_id, union paramete memcpy(&p_capainfo, ¶m->setup.capainfo, sizeof(p_capainfo)); memcpy(&p_redirinfo, ¶m->setup.redirinfo, sizeof(p_redirinfo)); /* 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); + do_screen(1, p_callerinfo.id, sizeof(p_callerinfo.id), &p_callerinfo.ntype, &p_callerinfo.present, p_m_mISDNport->ifport->interface->name); + do_screen(1, p_callerinfo.id2, sizeof(p_callerinfo.id2), &p_callerinfo.ntype2, &p_callerinfo.present2, p_m_mISDNport->ifport->interface->name); /* only display at connect state: this case happens if endpoint is in connected mode */ if (p_state==PORT_STATE_CONNECT) { @@ -2011,10 +2014,18 @@ void Pdss1::message_setup(unsigned int epoint_id, int message_id, union paramete /* creating l3id */ l1l2l3_trace_header(p_m_mISDNport, this, L3_NEW_L3ID_REQ, DIRECTION_OUT); +#ifdef OLD_MT_ASSIGN /* see MT_ASSIGN notes at do_layer3() */ mt_assign_pid = 0; ret = p_m_mISDNport->ml3->to_layer3(p_m_mISDNport->ml3, MT_ASSIGN, 0, NULL); - if (mt_assign_pid == 0 || ret < 0) { + if (mt_assign_pid == 0 || ret < 0) + p_m_d_l3id = mt_assign_pid; + mt_assign_pid = ~0; +#else + p_m_d_l3id = request_new_pid(p_m_mISDNport->ml3); + if (p_m_d_l3id == MISDN_PID_NONE) +#endif + { struct lcr_msg *message; add_trace("callref", NULL, "no free id"); @@ -2027,8 +2038,10 @@ void Pdss1::message_setup(unsigned int epoint_id, int message_id, union paramete trigger_work(&p_m_d_delete); return; } +#ifdef OLD_MT_ASSIGN p_m_d_l3id = mt_assign_pid; mt_assign_pid = ~0; +#endif add_trace("callref", "new", "0x%x", p_m_d_l3id); end_trace(); @@ -2036,7 +2049,7 @@ void Pdss1::message_setup(unsigned int epoint_id, int message_id, union paramete l3m = create_l3msg(); l1l2l3_trace_header(p_m_mISDNport, this, L3_SETUP_REQ, DIRECTION_OUT); /* channel information */ - if (channel >= 0) /* it should */ + if (p_m_d_ntmode || channel != CHANNEL_ANY) /* only omit channel id in te-mode/any channel */ enc_ie_channel_id(l3m, exclusive, channel); /* caller information */ plan = 1; @@ -2473,7 +2486,7 @@ void Pdss1::message_connect(unsigned int epoint_id, int message_id, union parame /* copy connected information */ memcpy(&p_connectinfo, ¶m->connectinfo, sizeof(p_connectinfo)); /* screen outgoing caller id */ - do_screen(1, p_connectinfo.id, sizeof(p_connectinfo.id), &p_connectinfo.ntype, &p_connectinfo.present, p_m_mISDNport->ifport->interface); + do_screen(1, p_connectinfo.id, sizeof(p_connectinfo.id), &p_connectinfo.ntype, &p_connectinfo.present, p_m_mISDNport->ifport->interface->name); /* only display at connect state */ if (p_state == PORT_STATE_CONNECT) @@ -2987,6 +3000,11 @@ int stack2manager(struct mISDNport *mISDNport, unsigned int cmd, unsigned int pi // facility als broadcast break; + case MT_L2IDLE: + // L2 became idle - we could sent a MT_L2RELEASE if we are the L2 master + PDEBUG(DEBUG_ISDN, "Got L2 idle\n"); + break; + default: PERROR("unhandled message: cmd(0x%x) pid(0x%x)\n", cmd, pid); port = port_first;