X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=action.cpp;h=ab8e5868672499337a6d247a3966c31039a558a3;hp=67c839656d61779ab4e8055bf061d3bca22bef0a;hb=0efcf371b4a61fa1376e83d2b7404aeb47a36e26;hpb=81c485c126c08982e0d9120d5198c5515a0779d6 diff --git a/action.cpp b/action.cpp index 67c8396..ab8e586 100644 --- a/action.cpp +++ b/action.cpp @@ -9,63 +9,11 @@ ** ** \*****************************************************************************/ -#include -#include -#include -#include -#include #include "main.h" -#include "linux/isdnif.h" extern char **environ; -/* create caller id from digits by comparing with national and international - * prefixes. - */ -char *nationalize_callerinfo(char *string, int *ntype) -{ - if (!strncmp(options.international, string, strlen(options.international))) - { - *ntype = INFO_NTYPE_INTERNATIONAL; - return(string+strlen(options.international)); - } - if (!strncmp(options.national, string, strlen(options.national))) - { - *ntype = INFO_NTYPE_NATIONAL; - return(string+strlen(options.national)); - } - *ntype = INFO_NTYPE_SUBSCRIBER; - return(string); -} - -/* create number (including access codes) from caller id - * prefixes. - */ -char *numberrize_callerinfo(char *string, int ntype) -{ - static char result[256]; - - switch(ntype) - { - case INFO_NTYPE_INTERNATIONAL: - UCPY(result, options.international); - SCAT(result, string); - return(result); - break; - - case INFO_NTYPE_NATIONAL: - UCPY(result, options.national); - SCAT(result, string); - return(result); - break; - - default: - return(string); - } -} - - /* * process init 'internal' / 'external' / 'remote' / 'vbox-record' / 'partyline'... */ @@ -126,7 +74,8 @@ void EndpointAppPBX::action_init_remote(void) struct caller_info callerinfo; struct redir_info redirinfo; struct dialing_info dialinginfo; - char remote[32]; + char exten[128] = ""; + char remote[32]; if (!(rparam = routeparam(e_action, PARAM_APPLICATION))) { @@ -146,16 +95,23 @@ void EndpointAppPBX::action_init_remote(void) memcpy(&redirinfo, &e_redirinfo, sizeof(redirinfo)); memset(&dialinginfo, 0, sizeof(dialinginfo)); + if ((rparam = routeparam(e_action, PARAM_EXTEN))) + { + SCPY(exten, rparam->string_value); + } /* send setup to remote */ trace_header("ACTION remote (setup)", DIRECTION_NONE); add_trace("number", NULL, dialinginfo.id); add_trace("remote", NULL, remote); + if (exten[0]) + add_trace("exten", NULL, remote); end_trace(); message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_join_id, EPOINT_TO_JOIN, MESSAGE_SETUP); memcpy(&message->param.setup.dialinginfo, &dialinginfo, sizeof(struct dialing_info)); memcpy(&message->param.setup.redirinfo, &redirinfo, sizeof(struct redir_info)); memcpy(&message->param.setup.callerinfo, &callerinfo, sizeof(struct caller_info)); memcpy(&message->param.setup.capainfo, &capainfo, sizeof(struct capa_info)); + SCPY(message->param.setup.exten, exten); message_put(message); } @@ -839,7 +795,7 @@ void EndpointAppPBX::_action_callerid_calleridnext(int next) (!next)?e_ext.callerid_type:e_ext.id_next_call_type = INFO_NTYPE_UNKNOWN; } else { - SCPY((!next)?e_ext.callerid:e_ext.id_next_call, nationalize_callerinfo(callerid,&((!next)?e_ext.callerid_type:e_ext.id_next_call_type))); + SCPY((!next)?e_ext.callerid:e_ext.id_next_call, nationalize_callerinfo(callerid,&((!next)?e_ext.callerid_type:e_ext.id_next_call_type), options.national, options.international)); } if (!next) e_ext.id_next_call_type = -1; PDEBUG(DEBUG_EPOINT, "EPOINT(%d): nationalized callerid: '%s' type=%d\n", ea_endpoint->ep_serial, (!next)?e_ext.callerid:e_ext.id_next_call, (!next)?e_ext.callerid_type:e_ext.id_next_call_type); @@ -855,9 +811,9 @@ void EndpointAppPBX::_action_callerid_calleridnext(int next) trace_header("ACTION change-callerid (only next call)", DIRECTION_NONE); else trace_header("ACTION change-callerid (all future calls)", DIRECTION_NONE); - add_trace("old", "caller id", "%s", numberrize_callerinfo(old_id, old_type)); + add_trace("old", "caller id", "%s", numberrize_callerinfo(old_id, old_type, options.national, options.international)); add_trace("old", "present", "%s", (old_present==INFO_PRESENT_RESTRICTED)?"restricted":"allowed"); - add_trace("new", "caller id", "%s", numberrize_callerinfo(new_id, new_type)); + add_trace("new", "caller id", "%s", numberrize_callerinfo(new_id, new_type, options.national, options.international)); add_trace("new", "present", "%s", (new_present==INFO_PRESENT_RESTRICTED)?"restricted":"allowed"); end_trace(); message_disconnect_port(portlist, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, ""); @@ -2063,7 +2019,7 @@ void EndpointAppPBX::action_hangup_execute(void) argv[i++] = rparam->string_value; } argv[i++] = e_extdialing; - argv[i++] = numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype); + argv[i++] = numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype, options.national, options.international); argv[i++] = e_callerinfo.extension; argv[i++] = e_callerinfo.name; SPRINT(isdn_port, "%d", e_callerinfo.isdn_port); @@ -2548,7 +2504,7 @@ void EndpointAppPBX::process_hangup(int cause, int location) } if (e_callerinfo.id[0]) - SPRINT(callertext, "%s", numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype)); + SPRINT(callertext, "%s", numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype, options.national, options.international)); else SPRINT(callertext, "unknown"); /* allpy restriction */ @@ -2566,7 +2522,7 @@ void EndpointAppPBX::process_hangup(int cause, int location) if (e_callerinfo.extension[0]) SPRINT(callertext, "intern:%s", e_callerinfo.extension); else - SPRINT(callertext, "extern:%s", numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype)); + SPRINT(callertext, "extern:%s", numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype, options.national, options.international)); if (!!strcmp(callertext, e_ext.last_in[0])) { i = MAX_REMEMBER-1;