port = ss5_hunt_line(mISDNport);
else
#endif
- port = new Pdss1((mISDNport->ntmode)?PORT_TYPE_DSS1_NT_OUT:PORT_TYPE_DSS1_TE_OUT, mISDNport, portname, &port_settings, channel, mISDNport->ifport->channel_force, mode);
+ port = new Pdss1((mISDNport->ntmode)?PORT_TYPE_DSS1_NT_OUT:PORT_TYPE_DSS1_TE_OUT, mISDNport, portname, &port_settings, mISDNport->ifport->interface, channel, mISDNport->ifport->channel_force, mode);
earlyb = mISDNport->earlyb;
#else
trace_header("INTERFACE (has no function)", DIRECTION_NONE);
port = ss5_hunt_line(mISDNport);
else
#endif
- port = new Pdss1((mISDNport->ntmode)?PORT_TYPE_DSS1_NT_OUT:PORT_TYPE_DSS1_TE_OUT, mISDNport, portname, &port_settings, channel, mISDNport->ifport->channel_force, mode);
+ port = new Pdss1((mISDNport->ntmode)?PORT_TYPE_DSS1_NT_OUT:PORT_TYPE_DSS1_TE_OUT, mISDNport, portname, &port_settings, mISDNport->ifport->interface, channel, mISDNport->ifport->channel_force, mode);
earlyb = mISDNport->earlyb;
#else
trace_header("INTERFACE (has no function)", DIRECTION_NONE);
port = ss5_hunt_line(mISDNport);
else
#endif
- port = new Pdss1((mISDNport->ntmode)?PORT_TYPE_DSS1_NT_OUT:PORT_TYPE_DSS1_TE_OUT, mISDNport, portname, &port_settings, channel, mISDNport->ifport->channel_force, mode);
+ port = new Pdss1((mISDNport->ntmode)?PORT_TYPE_DSS1_NT_OUT:PORT_TYPE_DSS1_TE_OUT, mISDNport, portname, &port_settings, mISDNport->ifport->interface, channel, mISDNport->ifport->channel_force, mode);
if (!port)
FATAL("No memory for Port instance\n");
earlyb = mISDNport->earlyb;
port = ss5_hunt_line(mISDNport);
else
#endif
- port = new Pdss1((mISDNport->ntmode)?PORT_TYPE_DSS1_NT_OUT:PORT_TYPE_DSS1_TE_OUT, mISDNport, portname, &port_settings, channel, mISDNport->ifport->channel_force, mode);
+ port = new Pdss1((mISDNport->ntmode)?PORT_TYPE_DSS1_NT_OUT:PORT_TYPE_DSS1_TE_OUT, mISDNport, portname, &port_settings, mISDNport->ifport->interface, channel, mISDNport->ifport->channel_force, mode);
earlyb = mISDNport->earlyb;
#else
trace_header("INTERFACE (has no function)", DIRECTION_NONE);
/*
* constructor
*/
-Pdss1::Pdss1(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel, int exclusive, int mode) : PmISDN(type, mISDNport, portname, settings, channel, exclusive, mode)
+Pdss1::Pdss1(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, struct interface *interface, int channel, int exclusive, int mode) : PmISDN(type, mISDNport, portname, settings, interface, channel, exclusive, mode)
{
p_callerinfo.itype = (mISDNport->ifport->interface->extension)?INFO_ITYPE_ISDN_EXTENSION:INFO_ITYPE_ISDN;
p_m_d_ntmode = mISDNport->ntmode;
case MT_SETUP:
/* creating port object, transparent until setup with hdlc */
SPRINT(name, "%s-%d-in", mISDNport->ifport->interface->name, mISDNport->portnum);
- if (!(pdss1 = new Pdss1(PORT_TYPE_DSS1_NT_IN, mISDNport, name, NULL, 0, 0, B_MODE_TRANSPARENT)))
+ if (!(pdss1 = new Pdss1(PORT_TYPE_DSS1_NT_IN, mISDNport, name, NULL, mISDNport->ifport->interface, 0, 0, B_MODE_TRANSPARENT)))
FATAL("Cannot create Port instance.\n");
pdss1->message_isdn(cmd, pid, l3m);
case MT_RESUME:
/* creating port object, transparent until setup with hdlc */
SPRINT(name, "%s-%d-in", mISDNport->ifport->interface->name, mISDNport->portnum);
- if (!(pdss1 = new Pdss1(PORT_TYPE_DSS1_NT_IN, mISDNport, name, NULL, 0, 0, B_MODE_TRANSPARENT)))
+ if (!(pdss1 = new Pdss1(PORT_TYPE_DSS1_NT_IN, mISDNport, name, NULL, mISDNport->ifport->interface, 0, 0, B_MODE_TRANSPARENT)))
FATAL("Cannot create Port instance.\n");
pdss1->message_isdn(cmd, pid, l3m);
break;
class Pdss1 : public PmISDN
{
public:
- Pdss1(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel, int exclusive, int mode);
+ Pdss1(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, struct interface *interface, int channel, int exclusive, int mode);
~Pdss1();
unsigned int p_m_d_l3id; /* current l3 process id */
struct lcr_work p_m_d_delete; /* timer for audio transmission */
/*
* constructor
*/
-Pgsm::Pgsm(int type, char *portname, struct port_settings *settings, struct interface *interface) : Port(type, portname, settings)
+Pgsm::Pgsm(int type, char *portname, struct port_settings *settings, struct interface *interface) : Port(type, portname, settings, interface)
{
p_g_tones = 0;
if (interface->is_tones == IS_YES)
p_g_rtp_bridge = 1;
p_g_rtp_payloads = 0;
memset(&p_g_samples, 0, sizeof(p_g_samples));
- SCPY(p_g_interface_name, interface->name);
p_callerinfo.itype = (interface->extension)?INFO_ITYPE_ISDN_EXTENSION:INFO_ITYPE_ISDN;
memset(&p_g_delete, 0, sizeof(p_g_delete));
add_work(&p_g_delete, delete_event, this, 0);
return;
p_g_media_type = media_type;
- gsm_trace_header(p_g_interface_name, this, MNCC_LCHAN_MODIFY, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_LCHAN_MODIFY, DIRECTION_OUT);
mode = create_mncc(MNCC_LCHAN_MODIFY, p_g_callref);
switch (media_type) {
case MEDIA_TYPE_GSM_EFR:
struct lcr_msg *message;
struct gsm_mncc *frame;
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
end_trace();
message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_PROCEEDING);
new_state(PORT_STATE_OUT_PROCEEDING);
if (p_g_earlyb && !p_g_tch_connected) { /* only if ... */
- gsm_trace_header(p_g_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
end_trace();
frame = create_mncc(MNCC_FRAME_RECV, p_g_callref);
send_and_free_mncc(p_g_lcr_gsm, frame->msg_type, frame);
struct lcr_msg *message;
struct gsm_mncc *frame;
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
end_trace();
message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_ALERTING);
new_state(PORT_STATE_OUT_ALERTING);
if (p_g_earlyb && !p_g_tch_connected) { /* only if ... */
- gsm_trace_header(p_g_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
end_trace();
frame = create_mncc(MNCC_FRAME_RECV, p_g_callref);
send_and_free_mncc(p_g_lcr_gsm, frame->msg_type, frame);
p_connectinfo.present = INFO_PRESENT_ALLOWED;
p_connectinfo.screen = INFO_SCREEN_NETWORK;
p_connectinfo.ntype = INFO_NTYPE_UNKNOWN;
- SCPY(p_connectinfo.interface, p_g_interface_name);
+ SCPY(p_connectinfo.interface, p_interface_name);
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
if (p_connectinfo.id[0])
add_trace("connect", "number", "%s", p_connectinfo.id);
else if (mncc->imsi[0])
end_trace();
/* send resp */
- gsm_trace_header(p_g_interface_name, this, MNCC_SETUP_COMPL_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_SETUP_COMPL_REQ, DIRECTION_OUT);
resp = create_mncc(MNCC_SETUP_COMPL_REQ, p_g_callref);
end_trace();
send_and_free_mncc(p_g_lcr_gsm, resp->msg_type, resp);
new_state(PORT_STATE_CONNECT);
if (!p_g_tch_connected) { /* only if ... */
- gsm_trace_header(p_g_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
end_trace();
frame = create_mncc(MNCC_FRAME_RECV, p_g_callref);
send_and_free_mncc(p_g_lcr_gsm, frame->msg_type, frame);
{
struct gsm_mncc *frame;
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
end_trace();
new_state(PORT_STATE_CONNECT);
if (!p_g_tch_connected) { /* only if ... */
- gsm_trace_header(p_g_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
end_trace();
frame = create_mncc(MNCC_FRAME_RECV, p_g_callref);
send_and_free_mncc(p_g_lcr_gsm, frame->msg_type, frame);
int cause = 16, location = 0;
struct gsm_mncc *resp;
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
if (mncc->fields & MNCC_F_CAUSE) {
location = mncc->cause.location;
cause = mncc->cause.value;
/* send release */
resp = create_mncc(MNCC_REL_REQ, p_g_callref);
- gsm_trace_header(p_g_interface_name, this, MNCC_REL_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_REL_REQ, DIRECTION_OUT);
#if 0
resp->fields |= MNCC_F_CAUSE;
resp->cause.coding = 3;
int location = 0, cause = 16;
struct lcr_msg *message;
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
if (mncc->fields & MNCC_F_CAUSE) {
location = mncc->cause.location;
cause = mncc->cause.value;
{
struct lcr_msg *message;
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
add_trace("notify", NULL, "%d", mncc->notify);
end_trace();
memcpy(&p_g_notify_pending->param, param, sizeof(union parameter));
} else {
/* sending notification */
- gsm_trace_header(p_g_interface_name, this, MNCC_NOTIFY_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_NOTIFY_REQ, DIRECTION_OUT);
add_trace("notify", NULL, "%d", notify);
end_trace();
mncc = create_mncc(MNCC_NOTIFY_REQ, p_g_callref);
struct gsm_mncc *mncc;
/* send alert */
- gsm_trace_header(p_g_interface_name, this, MNCC_ALERT_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_ALERT_REQ, DIRECTION_OUT);
mncc = create_mncc(MNCC_ALERT_REQ, p_g_callref);
if (p_g_tones) {
mncc->fields |= MNCC_F_PROGRESS;
new_state(PORT_STATE_IN_ALERTING);
if (p_g_tones && !p_g_tch_connected) { /* only if ... */
- gsm_trace_header(p_g_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
end_trace();
mncc = create_mncc(MNCC_FRAME_RECV, p_g_callref);
send_and_free_mncc(p_g_lcr_gsm, mncc->msg_type, mncc);
/* 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_g_interface_name);
+ do_screen(1, p_connectinfo.id, sizeof(p_connectinfo.id), &p_connectinfo.ntype, &p_connectinfo.present, p_interface_name);
/* send connect */
mncc = create_mncc(MNCC_SETUP_RSP, p_g_callref);
- gsm_trace_header(p_g_interface_name, this, MNCC_SETUP_RSP, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_SETUP_RSP, DIRECTION_OUT);
/* caller information */
mncc->fields |= MNCC_F_CONNECTED;
mncc->connected.plan = 1;
/* send disconnect */
mncc = create_mncc(MNCC_DISC_REQ, p_g_callref);
- gsm_trace_header(p_g_interface_name, this, MNCC_DISC_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_DISC_REQ, DIRECTION_OUT);
if (p_g_tones) {
mncc->fields |= MNCC_F_PROGRESS;
mncc->progress.coding = 3; /* GSM */
new_state(PORT_STATE_OUT_DISCONNECT);
if (p_g_tones && !p_g_tch_connected) { /* only if ... */
- gsm_trace_header(p_g_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
end_trace();
mncc = create_mncc(MNCC_FRAME_RECV, p_g_callref);
send_and_free_mncc(p_g_lcr_gsm, mncc->msg_type, mncc);
/* send release */
mncc = create_mncc(MNCC_REL_REQ, p_g_callref);
- gsm_trace_header(p_g_interface_name, this, MNCC_REL_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_REL_REQ, DIRECTION_OUT);
mncc->fields |= MNCC_F_CAUSE;
mncc->cause.coding = 3;
mncc->cause.location = param->disconnectinfo.location;
Pgsm(int type, char *portname, struct port_settings *settings, struct interface *interface);
~Pgsm();
- char p_g_interface_name[64];
signed short p_g_samples[160]; /* last received audi packet */
int p_g_tones; /* set, if tones are to be generated */
int p_g_earlyb; /* set, if patterns are available */
unsigned char payload_types[8];
int payloads = 0;
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
if (mncc->fields & MNCC_F_CAUSE) {
add_trace("cause", "coding", "%d", mncc->cause.coding);
add_trace("cause", "location", "%", mncc->cause.location);
message_put(message);
/* send release */
mncc = create_mncc(MNCC_REL_REQ, p_g_callref);
- gsm_trace_header(p_g_interface_name, this, MNCC_REL_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_REL_REQ, DIRECTION_OUT);
mncc->fields |= MNCC_F_CAUSE;
mncc->cause.coding = 3;
mncc->cause.location = LOCATION_PRIVATE_LOCAL;
{
struct gsm_mncc *resp;
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
add_trace("keypad", NULL, "%c", mncc->keypad);
end_trace();
SPRINT(p_dialinginfo.id, "%c", mncc->keypad);
p_dialinginfo.ntype = INFO_NTYPE_UNKNOWN;
/* send resp */
- gsm_trace_header(p_g_interface_name, this, MNCC_START_DTMF_RSP, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_START_DTMF_RSP, DIRECTION_OUT);
add_trace("keypad", NULL, "%c", mncc->keypad);
end_trace();
resp = create_mncc(MNCC_START_DTMF_RSP, p_g_callref);
{
struct gsm_mncc *resp;
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
add_trace("keypad", NULL, "%c", mncc->keypad);
end_trace();
/* send resp */
- gsm_trace_header(p_g_interface_name, this, MNCC_STOP_DTMF_RSP, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_STOP_DTMF_RSP, DIRECTION_OUT);
add_trace("keypad", NULL, "%c", mncc->keypad);
end_trace();
resp = create_mncc(MNCC_STOP_DTMF_RSP, p_g_callref);
struct lcr_msg *message;
struct gsm_mncc *resp, *frame;
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
end_trace();
/* notify the hold of call */
message_put(message);
/* acknowledge hold */
- gsm_trace_header(p_g_interface_name, this, MNCC_HOLD_CNF, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_HOLD_CNF, DIRECTION_OUT);
end_trace();
resp = create_mncc(MNCC_HOLD_CNF, p_g_callref);
send_and_free_mncc(p_g_lcr_gsm, resp->msg_type, resp);
/* disable audio */
if (p_g_tch_connected) { /* it should be true */
- gsm_trace_header(p_g_interface_name, this, MNCC_FRAME_DROP, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_FRAME_DROP, DIRECTION_OUT);
end_trace();
frame = create_mncc(MNCC_FRAME_DROP, p_g_callref);
send_and_free_mncc(p_g_lcr_gsm, frame->msg_type, frame);
struct lcr_msg *message;
struct gsm_mncc *resp, *frame;
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
end_trace();
/* notify the retrieve of call */
message_put(message);
/* acknowledge retr */
- gsm_trace_header(p_g_interface_name, this, MNCC_RETRIEVE_CNF, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_RETRIEVE_CNF, DIRECTION_OUT);
end_trace();
resp = create_mncc(MNCC_RETRIEVE_CNF, p_g_callref);
send_and_free_mncc(p_g_lcr_gsm, resp->msg_type, resp);
/* enable audio */
if (!p_g_tch_connected) { /* it should be true */
- gsm_trace_header(p_g_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
end_trace();
frame = create_mncc(MNCC_FRAME_RECV, p_g_callref);
send_and_free_mncc(p_g_lcr_gsm, frame->msg_type, frame);
*payloads = 0;
- gsm_trace_header(p_g_interface_name, this, 1 /* codec negotioation */, DIRECTION_NONE);
+ gsm_trace_header(p_interface_name, this, 1 /* codec negotioation */, DIRECTION_NONE);
if ((mncc->fields & MNCC_F_BEARER_CAP)) {
/* select preferred payload type from list */
int i;
unsigned char payload_types[8];
int payloads = 0;
- interface = getinterfacebyname(p_g_interface_name);
+ interface = getinterfacebyname(p_interface_name);
if (!interface) {
- PERROR("Cannot find interface %s.\n", p_g_interface_name);
+ PERROR("Cannot find interface %s.\n", p_interface_name);
return;
}
/* process given callref */
- gsm_trace_header(p_g_interface_name, this, 0, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, 0, DIRECTION_IN);
add_trace("callref", "new", "0x%x", callref);
if (p_g_callref) {
/* release in case the ID is already in use */
add_trace("error", NULL, "callref already in use");
end_trace();
mncc = create_mncc(MNCC_REJ_REQ, callref);
- gsm_trace_header(p_g_interface_name, this, MNCC_REJ_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_REJ_REQ, DIRECTION_OUT);
mncc->fields |= MNCC_F_CAUSE;
mncc->cause.coding = 3;
mncc->cause.location = 1;
SCPY(p_callerinfo.imsi, mncc->imsi);
p_callerinfo.screen = INFO_SCREEN_NETWORK;
p_callerinfo.ntype = INFO_NTYPE_UNKNOWN;
- SCPY(p_callerinfo.interface, p_g_interface_name);
+ SCPY(p_callerinfo.interface, p_interface_name);
/* dialing information */
SCAT(p_dialinginfo.id, mncc->called.number);
/* if no given payload type is supported, we reject the call */
if (!payloads) {
mncc = create_mncc(MNCC_REJ_REQ, callref);
- gsm_trace_header(p_g_interface_name, this, MNCC_REJ_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_REJ_REQ, DIRECTION_OUT);
mncc->fields |= MNCC_F_CAUSE;
mncc->cause.coding = 3;
mncc->cause.location = 1;
/* useruser */
/* what infos did we got ... */
- gsm_trace_header(p_g_interface_name, this, msg_type, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, msg_type, DIRECTION_IN);
if (p_callerinfo.id[0])
add_trace("calling", "number", "%s", p_callerinfo.id);
else
modify_lchan(media_types[0]);
/* send call proceeding */
- gsm_trace_header(p_g_interface_name, this, MNCC_CALL_PROC_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_CALL_PROC_REQ, DIRECTION_OUT);
proceeding = create_mncc(MNCC_CALL_PROC_REQ, p_g_callref);
if (p_g_tones) {
proceeding->fields |= MNCC_F_PROGRESS;
new_state(PORT_STATE_IN_PROCEEDING);
if (p_g_tones && !p_g_tch_connected) { /* only if ... */
- gsm_trace_header(p_g_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
end_trace();
frame = create_mncc(MNCC_FRAME_RECV, p_g_callref);
send_and_free_mncc(p_g_lcr_gsm, frame->msg_type, frame);
/* no GSM MNCC connection */
if (p_g_lcr_gsm->mncc_lfd.fd < 0) {
- gsm_trace_header(p_g_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
add_trace("failure", NULL, "No MNCC connection.");
end_trace();
message = message_create(p_serial, epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE);
/* no number */
if (!p_dialinginfo.id[0]) {
- gsm_trace_header(p_g_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
add_trace("failure", NULL, "No dialed subscriber given.");
end_trace();
message = message_create(p_serial, epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE);
int i;
p_g_rtp_payloads = 0;
- gsm_trace_header(p_g_interface_name, this, 1 /* codec negotioation */, DIRECTION_NONE);
+ gsm_trace_header(p_interface_name, this, 1 /* codec negotioation */, DIRECTION_NONE);
for (i = 0; i < param->setup.rtpinfo.payloads; i++) {
switch (param->setup.rtpinfo.media_types[i]) {
case MEDIA_TYPE_GSM:
}
end_trace();
if (!p_g_rtp_payloads) {
- gsm_trace_header(p_g_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
add_trace("failure", NULL, "No payload given that is supported by GSM");
end_trace();
message = message_create(p_serial, epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE);
// 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_g_interface_name);
+ do_screen(1, p_callerinfo.id, sizeof(p_callerinfo.id), &p_callerinfo.ntype, &p_callerinfo.present, p_interface_name);
/* attach only if not already */
epointlist = p_epointlist;
epointlist_new(epoint_id);
/* creating l3id */
- gsm_trace_header(p_g_interface_name, this, 0, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, 0, DIRECTION_OUT);
p_g_callref = new_callref++;
add_trace("callref", "new", "0x%x", p_g_callref);
end_trace();
- gsm_trace_header(p_g_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
mncc = create_mncc(MNCC_SETUP_REQ, p_g_callref);
/* caller information */
mncc->fields |= MNCC_F_CALLING;
struct gsm_mncc *proceeding, *frame;
struct interface *interface;
- interface = getinterfacebyname(p_g_interface_name);
+ interface = getinterfacebyname(p_interface_name);
if (!interface) {
- PERROR("Cannot find interface %s.\n", p_g_interface_name);
+ PERROR("Cannot find interface %s.\n", p_interface_name);
return;
}
/* process given callref */
- gsm_trace_header(p_g_interface_name, this, 0, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, 0, DIRECTION_IN);
add_trace("callref", "new", "0x%x", callref);
if (p_g_callref) {
/* release in case the ID is already in use */
add_trace("error", NULL, "callref already in use");
end_trace();
mncc = create_mncc(MNCC_REJ_REQ, callref);
- gsm_trace_header(p_g_interface_name, this, MNCC_REJ_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_REJ_REQ, DIRECTION_OUT);
mncc->fields |= MNCC_F_CAUSE;
mncc->cause.coding = 3;
mncc->cause.location = 1;
p_g_callref = callref;
end_trace();
- gsm_trace_header(p_g_interface_name, this, MNCC_SETUP_IND, DIRECTION_IN);
+ gsm_trace_header(p_interface_name, this, MNCC_SETUP_IND, DIRECTION_IN);
/* caller information */
p_callerinfo.ntype = INFO_NTYPE_NOTPRESENT;
if (mncc->fields & MNCC_F_CALLING) {
add_trace("calling", "screen", "%d", mncc->calling.screen);
add_trace("calling", "number", "%s", mncc->calling.number);
}
- SCPY(p_callerinfo.interface, p_g_interface_name);
+ SCPY(p_callerinfo.interface, p_interface_name);
/* dialing information */
if (mncc->fields & MNCC_F_CALLED) {
SCAT(p_dialinginfo.id, mncc->called.number);
modify_lchan(RTP_PT_GSM_FULL);
/* send call proceeding */
- gsm_trace_header(p_g_interface_name, this, MNCC_CALL_CONF_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_CALL_CONF_REQ, DIRECTION_OUT);
proceeding = create_mncc(MNCC_CALL_CONF_REQ, p_g_callref);
/* bearer capability (mandatory, if not present in setup message) */
if (!(mncc->fields & MNCC_F_BEARER_CAP)) {
new_state(PORT_STATE_IN_PROCEEDING);
if (p_g_tones && !p_g_tch_connected) { /* only if ... */
- gsm_trace_header(p_g_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_FRAME_RECV, DIRECTION_OUT);
end_trace();
frame = create_mncc(MNCC_FRAME_RECV, p_g_callref);
send_and_free_mncc(p_g_lcr_gsm, frame->msg_type, frame);
/* no instance */
if (!p_g_lcr_gsm || p_g_lcr_gsm->mncc_lfd.fd < 0) {
- gsm_trace_header(p_g_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
add_trace("failure", NULL, "MS %s instance is unavailable", p_g_ms_name);
end_trace();
message = message_create(p_serial, epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE);
/* no number */
if (!p_dialinginfo.id[0]) {
- gsm_trace_header(p_g_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
add_trace("failure", NULL, "No dialed subscriber given.");
end_trace();
message = message_create(p_serial, epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE);
epointlist_new(epoint_id);
/* creating l3id */
- gsm_trace_header(p_g_interface_name, this, 0, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, 0, DIRECTION_OUT);
p_g_callref = new_callref++;
add_trace("callref", "new", "0x%x", p_g_callref);
end_trace();
- gsm_trace_header(p_g_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_SETUP_REQ, DIRECTION_OUT);
mncc = create_mncc(MNCC_SETUP_REQ, p_g_callref);
if (!strncasecmp(p_dialinginfo.id, "emerg", 5)) {
mncc->emergency = 1;
p_g_dtmf_state = DTMF_ST_IDLE;
return;
}
- gsm_trace_header(p_g_interface_name, this, MNCC_START_DTMF_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_START_DTMF_REQ, DIRECTION_OUT);
dtmf = create_mncc(MNCC_START_DTMF_REQ, p_g_callref);
dtmf->keypad = p_g_dtmf[p_g_dtmf_index++];
p_g_dtmf_state = DTMF_ST_START;
PDEBUG(DEBUG_GSM, "DTMF is on\n");
break;
case DTMF_ST_MARK:
- gsm_trace_header(p_g_interface_name, this, MNCC_STOP_DTMF_REQ, DIRECTION_OUT);
+ gsm_trace_header(p_interface_name, this, MNCC_STOP_DTMF_REQ, DIRECTION_OUT);
dtmf = create_mncc(MNCC_STOP_DTMF_REQ, p_g_callref);
p_g_dtmf_state = DTMF_ST_STOP;
end_trace();
/*
* constructor
*/
-PmISDN::PmISDN(int type, mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel, int exclusive, int mode) : Port(type, portname, settings)
+PmISDN::PmISDN(int type, mISDNport *mISDNport, char *portname, struct port_settings *settings, struct interface *interface, int channel, int exclusive, int mode) : Port(type, portname, settings, interface)
{
p_m_mISDNport = mISDNport;
p_m_portnum = mISDNport->portnum;
class PmISDN : public Port
{
public:
- PmISDN(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel, int exclusive, int mode);
+ PmISDN(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, struct interface *interface, int channel, int exclusive, int mode);
~PmISDN();
void bchannel_receive(struct mISDNhead *hh, unsigned char *data, int len);
void transmit(unsigned char *buffer, int length);
/*
* port constructor
*/
-Port::Port(int type, const char *portname, struct port_settings *settings)
+Port::Port(int type, const char *portname, struct port_settings *settings, struct interface *interface)
{
class Port *temp, **tempp;
memset(&p_settings, 0, sizeof(p_settings));
}
SCPY(p_name, portname);
+ if (interface)
+ SCPY(p_interface_name, interface->name);
p_tone_dir[0] = '\0';
p_type = type;
p_serial = port_serial++;
classuse++;
- PDEBUG(DEBUG_PORT, "new port (%d) of type 0x%x, name '%s'\n", p_serial, type, portname);
+ PDEBUG(DEBUG_PORT, "new port (%d) of type 0x%x, name '%s' interface '%s'\n", p_serial, type, portname, p_interface_name);
}
class Port *temp, **tempp;
struct lcr_msg *message;
- PDEBUG(DEBUG_PORT, "removing port (%d) of type 0x%x, name '%s'\n", p_serial, p_type, p_name);
+ PDEBUG(DEBUG_PORT, "removing port (%d) of type 0x%x, name '%s' interface '%s'\n", p_serial, p_type, p_name, p_interface_name);
if (p_bridge) {
PDEBUG(DEBUG_PORT, "Removing us from bridge %u\n", p_bridge->bridge_id);
{
public:
/* methods */
- Port(int type, const char *portname, struct port_settings *settings);
+ Port(int type, const char *portname, struct port_settings *settings, struct interface *interface);
virtual ~Port();
class Port *next; /* next port in list */
int p_type; /* type of port */
virtual void update_load(void);
struct port_settings p_settings;
+ char p_interface_name[64];
/* tone */
char p_tone_dir[256]; /* name of current directory */
/*
* constructor
*/
-Premote::Premote(int type, char *portname, struct port_settings *settings, struct interface *interface, int remote_id) : Port(type, portname, settings)
+Premote::Premote(int type, char *portname, struct port_settings *settings, struct interface *interface, int remote_id) : Port(type, portname, settings, interface)
{
union parameter param;
p_callerinfo.itype = (interface->extension)?INFO_ITYPE_ISDN_EXTENSION:INFO_ITYPE_ISDN;
p_r_ref = new_remote++;
SCPY(p_r_remote_app, interface->remote_app);
- SCPY(p_r_interface_name, interface->name);
p_r_tones = (interface->is_tones == IS_YES);
/* send new ref to remote socket */
switch (message_type) {
case MESSAGE_SETUP:
struct interface *interface;
- interface = getinterfacebyname(p_r_interface_name);
+ interface = getinterfacebyname(p_interface_name);
if (!interface) {
- PERROR("Cannot find interface %s.\n", p_r_interface_name);
+ PERROR("Cannot find interface %s.\n", p_interface_name);
return 0;
}
/* attach only if not already */
break;
case MESSAGE_SETUP:
- interface = getinterfacebyname(p_r_interface_name);
+ interface = getinterfacebyname(p_interface_name);
if (!interface) {
- PERROR("Cannot find interface %s.\n", p_r_interface_name);
+ PERROR("Cannot find interface %s.\n", p_interface_name);
return;
}
unsigned int p_r_ref;
int p_r_remote_id; /* remote instance (socket) */
char p_r_remote_app[32];
- char p_r_interface_name[64];
int p_r_tones;
int message_epoint(unsigned int epoint_id, int message_id, union parameter *param);
/*
* initialize SIP port
*/
-Psip::Psip(int type, char *portname, struct port_settings *settings, struct interface *interface) : Port(type, portname, settings)
+Psip::Psip(int type, char *portname, struct port_settings *settings, struct interface *interface) : Port(type, portname, settings, interface)
{
p_s_rtp_bridge = 0;
if (interface->rtp_bridge)
memset(&port_settings, 0, sizeof(port_settings));
SCPY(port_settings.tones_dir, options.tones_dir);
- ss5port = new Pss5(PORT_TYPE_SS5_IDLE, mISDNport, portname, &port_settings, i + (i>=15) + 1, 1, B_MODE_TRANSPARENT);
+ ss5port = new Pss5(PORT_TYPE_SS5_IDLE, mISDNport, portname, &port_settings, mISDNport->ifport->interface, i + (i>=15) + 1, 1, B_MODE_TRANSPARENT);
if (!ss5port)
FATAL("No memory for Pss5 class.\n");
if (!ss5port->p_m_b_channel)
/*
* constructor
*/
-Pss5::Pss5(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel, int exclusive, int mode) : PmISDN(type, mISDNport, portname, settings, channel, exclusive, mode)
+Pss5::Pss5(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, struct interface *interface, int channel, int exclusive, int mode) : PmISDN(type, mISDNport, portname, settings, interface, channel, exclusive, mode)
{
p_callerinfo.itype = (mISDNport->ifport->interface->extension)?INFO_ITYPE_ISDN_EXTENSION:INFO_ITYPE_ISDN;
p_m_s_state = SS5_STATE_IDLE;
class Pss5 : public PmISDN
{
public:
- Pss5(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel, int exclusive, int mode);
+ Pss5(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, struct interface *interface, int channel, int exclusive, int mode);
~Pss5();
int message_epoint(unsigned int epoint_id, int message, union parameter *param);
void set_tone(const char *dir, const char *name);
/*
* initialize vbox port
*/
-VBoxPort::VBoxPort(int type, struct port_settings *settings) : Port(type, "vbox", settings)
+VBoxPort::VBoxPort(int type, struct port_settings *settings) : Port(type, "vbox", settings, NULL)
{
p_vbox_timeout = 0;
p_vbox_announce_fh = -1;