X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=apppbx.cpp;h=e491a5731e5de115611882ea7d0c5803bafa77c2;hp=b5615914e6d030a2047ff5ac82aa1f9e081ae5d9;hb=d2b113f2c4f11acfaee1b2e0fd2f03744a89f6d4;hpb=153bf9b2f40504eb7fde8d7c5bcb996227deece3 diff --git a/apppbx.cpp b/apppbx.cpp index b561591..e491a57 100644 --- a/apppbx.cpp +++ b/apppbx.cpp @@ -73,6 +73,7 @@ EndpointAppPBX::EndpointAppPBX(class Endpoint *epoint, int origin) : EndpointApp e_dtmf = 0; e_dtmf_time = 0; e_dtmf_last = 0; + e_enablekeypad = 0; e_cfnr_release = 0; e_cfnr_call = 0; e_password_timeout = 0; @@ -238,6 +239,7 @@ void EndpointAppPBX::release(int release, int joinlocation, int joincause, int p e_dtmf = 0; e_dtmf_time = 0; e_dtmf_last = 0; + e_enablekeypad = 0; e_cfnr_release = 0; e_cfnr_call = 0; e_multipoint_cause = 0; @@ -621,7 +623,7 @@ foundif: if (!interface->ifport) { /* no ports */ - trace_header("CHANNEL SELECTION (interface has no active ports, skipping)", DIRECTION_NONE); + trace_header("CHANNEL SELECTION (active ports, skipping)", DIRECTION_NONE); add_trace("interface", NULL, "%s", interface->name); end_trace(); interface = interface->next; @@ -672,7 +674,7 @@ foundif: /* see if link is up on PTP*/ if (mISDNport->l2hold && !mISDNport->l2link) { - trace_header("CHANNEL SELECTION (port holds layer 2, but layer 2 is down, skipping)", DIRECTION_NONE); + trace_header("CHANNEL SELECTION (port's layer 2 is down, skipping)", DIRECTION_NONE); add_trace("port", NULL, "%d", ifport->portnum); add_trace("position", NULL, "%d", index); end_trace(); @@ -809,6 +811,11 @@ foundif: if (ifport != ifport_start) goto nextport; + if (!ifname) { + interface = interface->next; + goto checknext; + } + return(NULL); /* no port found */ } @@ -1471,7 +1478,7 @@ void EndpointAppPBX::port_setup(struct port_list *portlist, int message_type, un memcpy(&e_dialinginfo, ¶m->setup.dialinginfo, sizeof(e_dialinginfo)); memcpy(&e_redirinfo, ¶m->setup.redirinfo, sizeof(e_redirinfo)); memcpy(&e_capainfo, ¶m->setup.capainfo, sizeof(e_capainfo)); - e_dtmf = param->setup.dtmf; +// e_dtmf = param->setup.dtmf; /* screen incoming caller id */ interface = interface_first; while(interface) @@ -1661,7 +1668,7 @@ void EndpointAppPBX::port_information(struct port_list *portlist, int message_ty /* keypad when connected */ if (e_state == EPOINT_STATE_CONNECT) { - if (e_ext.keypad) + if (e_ext.keypad || e_enablekeypad) { PDEBUG(DEBUG_EPOINT, "EPOINT(%d) keypad information received during connect: %s.\n", ea_endpoint->ep_serial, param->information.id); /* processing keypad function */ @@ -1942,6 +1949,9 @@ void EndpointAppPBX::port_alerting(struct port_list *portlist, int message_type, /* signal to call tool */ admin_call_response(e_adminid, ADMIN_CALL_ALERTING, "", 0, 0, 0); +//#warning hack!! +// if (e_adminid) +// set_tone(portlist, "hold"); new_state(EPOINT_STATE_OUT_ALERTING); /* check if pattern is available */ @@ -1980,7 +1990,7 @@ void EndpointAppPBX::port_connect(struct port_list *portlist, int message_type, { struct lcr_msg *message; char buffer[256]; - unsigned long port_id = portlist->port_id; + unsigned int port_id = portlist->port_id; struct port_list *tportlist; class Port *port; struct interface *interface; @@ -2190,7 +2200,7 @@ void EndpointAppPBX::port_disconnect_release(struct port_list *portlist, int mes { struct lcr_msg *message; char buffer[256]; - unsigned long port_id = portlist->port_id; + unsigned int port_id = portlist->port_id; int cause, location; @@ -2585,7 +2595,7 @@ void EndpointAppPBX::port_resume(struct port_list *portlist, int message_type, u /* port sends message to the endpoint */ -void EndpointAppPBX::ea_message_port(unsigned long port_id, int message_type, union parameter *param) +void EndpointAppPBX::ea_message_port(unsigned int port_id, int message_type, union parameter *param) { struct port_list *portlist; struct lcr_msg *message; @@ -2952,8 +2962,10 @@ void EndpointAppPBX::join_connect(struct port_list *portlist, int message_type, new_state(EPOINT_STATE_CONNECT); // UCPY(e_join_tone, ""); +// if (e_ext.number[0]) e_dtmf = 1; /* allow dtmf */ + e_powerdialing = 0; memcpy(&e_connectinfo, ¶m->connectinfo, sizeof(e_callerinfo)); if(portlist) @@ -3306,7 +3318,7 @@ void EndpointAppPBX::join_notify(struct port_list *portlist, int message_type, u /* JOIN sends messages to the endpoint */ -void EndpointAppPBX::ea_message_join(unsigned long join_id, int message_type, union parameter *param) +void EndpointAppPBX::ea_message_join(unsigned int join_id, int message_type, union parameter *param) { struct port_list *portlist; struct lcr_msg *message; @@ -3498,6 +3510,15 @@ void EndpointAppPBX::ea_message_join(unsigned long join_id, int message_type, un join_notify(portlist, message_type, param); break; + /* JOIN wants keypad / dtml */ + case MESSAGE_ENABLEKEYPAD: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received keypad enable request.\n", ea_endpoint->ep_serial, e_ext.number, e_callerinfo.id); + e_enablekeypad = 1; + e_dtmf = 1; + trace_header("ENABLE KEYPAD", DIRECTION_NONE); + end_trace(); + break; + default: PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received a wrong message: #%d\n", ea_endpoint->ep_serial, e_ext.number, e_callerinfo.id, message); } @@ -3677,7 +3698,8 @@ reject: /* connnecting our endpoint */ new_state(EPOINT_STATE_CONNECT); - e_dtmf = 1; + if (e_ext.number[0]) + e_dtmf = 1; set_tone(ea_endpoint->ep_portlist, NULL); /* now we send a release to the ringing endpoint */ @@ -4030,7 +4052,7 @@ int EndpointAppPBX::check_external(char **errstr, class Port **port) return(0); } -void EndpointAppPBX::logmessage(int message_type, union parameter *param, unsigned long port_id, int dir) +void EndpointAppPBX::logmessage(int message_type, union parameter *param, unsigned int port_id, int dir) { char *logtext = "unknown"; char buffer[64];