int EndpointAppPBX::_action_init_call(char *remote)
{
class Join *join;
- struct port_list *portlist = ea_endpoint->ep_portlist;
- struct admin_list *admin;
/* a created call, this should never happen */
if (ea_endpoint->ep_join_id) {
/* create join */
PDEBUG(DEBUG_EPOINT, "EPOINT(%d): Creating new join instance.\n", ea_endpoint->ep_serial);
+#ifdef WITH_MISDN
if (remote) {
+ struct port_list *portlist = ea_endpoint->ep_portlist;
+ struct admin_list *admin;
+
admin = admin_first;
while(admin) {
if (admin->remote_name[0] && !strcmp(admin->remote_name, remote))
return(0);
}
join = new JoinRemote(ea_endpoint->ep_serial, remote, admin->sock);
- }
- else
+ } else
+#endif
join = new JoinPBX(ea_endpoint);
if (!join)
FATAL("No memoy for Join instance.\n");
struct capa_info capainfo;
struct caller_info callerinfo;
struct redir_info redirinfo;
+ struct rtp_info rtpinfo;
struct dialing_info dialinginfo;
struct port_list *portlist = ea_endpoint->ep_portlist;
struct lcr_msg *message;
memcpy(&capainfo, &e_capainfo, sizeof(capainfo));
memcpy(&callerinfo, &e_callerinfo, sizeof(callerinfo));
memcpy(&redirinfo, &e_redirinfo, sizeof(redirinfo));
+ memcpy(&rtpinfo, &e_rtpinfo, sizeof(rtpinfo));
memset(&dialinginfo, 0, sizeof(dialinginfo));
dialinginfo.itype = INFO_ITYPE_ISDN_EXTENSION;
SCPY(dialinginfo.id, e_dialinginfo.id);
capainfo.bearer_mode = INFO_BMODE_PACKET;
}
capainfo.bearer_info1 = INFO_INFO1_NONE;
+ capainfo.hlc = INFO_HLC_NONE;
+ capainfo.exthlc = INFO_HLC_NONE;
}
if ((rparam = routeparam(e_action, PARAM_BMODE))) {
capainfo.bearer_mode = rparam->integer_value;
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));
+ memcpy(&message->param.setup.rtpinfo, &rtpinfo, sizeof(struct rtp_info));
message_put(message);
}
struct capa_info capainfo;
struct caller_info callerinfo;
struct redir_info redirinfo;
+ struct rtp_info rtpinfo;
struct dialing_info dialinginfo;
char *p;
struct port_list *portlist = ea_endpoint->ep_portlist;
memcpy(&capainfo, &e_capainfo, sizeof(capainfo));
memcpy(&callerinfo, &e_callerinfo, sizeof(callerinfo));
memcpy(&redirinfo, &e_redirinfo, sizeof(redirinfo));
+ memcpy(&rtpinfo, &e_rtpinfo, sizeof(rtpinfo));
memset(&dialinginfo, 0, sizeof(dialinginfo));
dialinginfo.itype = INFO_ITYPE_ISDN;
- dialinginfo.sending_complete = 0;
+// dialinginfo.sending_complete = 0;
SCPY(dialinginfo.id, e_extdialing);
/* process prefix */
/* process number complete */
if ((rparam = routeparam(e_action, PARAM_COMPLETE)))
- if ((rparam = routeparam(e_action, PARAM_PREFIX)))
- SCPY(dialinginfo.id, rparam->string_value);
dialinginfo.sending_complete = 1;
/* process number type */
capainfo.bearer_mode = INFO_BMODE_PACKET;
}
capainfo.bearer_info1 = INFO_INFO1_NONE;
+ capainfo.hlc = INFO_HLC_NONE;
+ capainfo.exthlc = INFO_HLC_NONE;
}
if ((rparam = routeparam(e_action, PARAM_BMODE))) {
capainfo.bearer_mode = rparam->integer_value;
/* add or update outgoing call */
trace_header("ACTION extern (calling)", DIRECTION_NONE);
add_trace("number", NULL, dialinginfo.id);
+ if (dialinginfo.sending_complete)
+ add_trace("number", "complete", "yes");
if (dialinginfo.interfaces[0])
add_trace("interfaces", NULL, dialinginfo.interfaces);
end_trace();
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));
+ memcpy(&message->param.setup.rtpinfo, &rtpinfo, sizeof(struct rtp_info));
message_put(message);
}
int iWaitStatus;
char *command = (char *)"";
char isdn_port[10];
- char *argv[11]; /* check also number of args below */
+ char *argv[12]; /* check also number of args below */
int i = 0;
/* get script / command */
end_trace();
return;
}
+#if 0
argv[i++] = (char *)"/bin/sh";
argv[i++] = (char *)"-c";
argv[i++] = command;
+#endif
argv[i++] = command;
if ((rparam = routeparam(e_action, PARAM_PARAM))) {
argv[i++] = rparam->string_value;
argv[i++] = e_callerinfo.name;
SPRINT(isdn_port, "%d", e_callerinfo.isdn_port);
argv[i++] = isdn_port;
+ argv[i++] = e_callerinfo.imsi;
argv[i++] = NULL; /* check also number of args above */
switch (pid = fork ()) {
case -1:
case 0:
/* To be shure there are no zombies created double fork */
if ((pid2 = fork()) == 0) {
- execve("/bin/sh", argv, environ);
- }
- else {
- /* Exit immediately and release the waiting parent. The subprocess falls to init because the parent died */
- exit(0);
+ execve(command, argv, environ);
}
+ /* Exit immediately and release the waiting parent. The subprocess falls to init because the parent died */
+ exit(0);
break;
default:
trace_header("ACTION execute", DIRECTION_NONE);
}
gettimeofday(¤t_time, NULL);
- if (timeout && TIME_SMALLER(&e_match_timeout.timeout, ¤t_time)) {
+ if (e_match_to_action && TIME_SMALLER(&e_match_timeout.timeout, ¤t_time)) {
/* return timeout rule */
PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal '%s' dialing: '%s', timeout in ruleset '%s'\n", ea_endpoint->ep_serial, e_ext.number, e_dialinginfo.id, e_ruleset->name);
unsched_timer(&e_match_timeout);
e_action = e_match_to_action;
+ e_match_to_action = NULL;
e_extdialing = e_match_to_extdialing;
trace_header("ROUTING (timeout)", DIRECTION_NONE);
add_trace("action", NULL, "%s", action_defs[e_action->index].name);