summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--action.cpp44
-rw-r--r--todo.txt21
2 files changed, 47 insertions, 18 deletions
diff --git a/action.cpp b/action.cpp
index 6856fcc..6d9d1dd 100644
--- a/action.cpp
+++ b/action.cpp
@@ -2035,8 +2035,9 @@ void EndpointAppPBX::action_dialing_setforward(void)
void EndpointAppPBX::action_hangup_execute(void)
{
struct route_param *rparam;
+ pid_t pid;
char *command = "", isdn_port[10];
- char *argv[7+1]; /* check also number of args below */
+ char *argv[11]; /* check also number of args below */
int i = 0;
/* get script / command */
@@ -2048,26 +2049,35 @@ void EndpointAppPBX::action_hangup_execute(void)
end_trace();
return;
}
- trace_header("ACTION execute", DIRECTION_NONE);
- add_trace("command", NULL, "%s", command);
- end_trace();
-
- argv[0] = command;
- while(strchr(argv[0], '/'))
- argv[0] = strchr(argv[0], '/')+1;
+ argv[i++] = "/bin/sh";
+ argv[i++] = "-c";
+ argv[i++] = command;
+ argv[i++] = command;
if ((rparam = routeparam(e_action, PARAM_PARAM)))
{
- argv[1] = rparam->string_value;
- i++;
+ argv[i++] = rparam->string_value;
}
- argv[1+i] = e_extdialing;
- argv[2+i] = numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype);
- argv[3+i] = e_callerinfo.extension;
- argv[4+i] = e_callerinfo.name;
+ argv[i++] = e_extdialing;
+ argv[i++] = numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype);
+ argv[i++] = e_callerinfo.extension;
+ argv[i++] = e_callerinfo.name;
SPRINT(isdn_port, "%d", e_callerinfo.isdn_port);
- argv[5+i] = isdn_port;
- argv[6+i] = NULL; /* check also number of args above */
- execve("/bin/sh", argv, environ);
+ argv[i++] = isdn_port;
+ argv[i++] = NULL; /* check also number of args above */
+ switch (pid = fork ()) {
+ case -1:
+ trace_header("ACTION execute (fork failed)", DIRECTION_NONE);
+ end_trace();
+ break;
+ case 0:
+ execve("/bin/sh", argv, environ);
+ break;
+ default:
+ trace_header("ACTION execute", DIRECTION_NONE);
+ add_trace("command", NULL, "%s", command);
+ end_trace();
+ break;
+ }
}
diff --git a/todo.txt b/todo.txt
index 72615af..4e7216b 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,13 +1,28 @@
chan_lcr:
+milestones:
+- der grosse bugfix im mISDN
+- das cli
+- auf- und abbau von calls und instanzen
+- informationen in den jeweiligen messages umwandeln
+- setup-queue
+- einbau von b-channel-features
+- durchcompilieren
+- testen
+
+
+CLI:
show calls
show lcr
block/unblock port
reload interfaces/routing
release call
-setup: es werden setupdaten gespeichert, bis eine ref vom lcr erfolgt.
+setup:
+es werden setupdaten gespeichert, bis eine ref vom lcr erfolgt.
dabei werden zusätzliche wahlinformationen der rufummer hinzugefügt.
+die gespeicherten daten sind die schnittmenge von den informationen des lcr und der asterisk.
+
bridge: jede instanz (chan_call) hat eine bridge_id
wenn keine bridge, dann ist sie 0.
@@ -15,10 +30,14 @@ mit new_bridge_id() wird eine neue id gesucht. diese wird in beide instanzen ein
zudem wird fuer jede instanz (zwei) der bridge eine bchannel_join ausgeführt, wenn die bchannels verfügbar sind.
schon implementiert: falls der bchannel später kommt, wird der join beim exporieren des b-channels ausgeführt.
+info-bridge:
+wir koennen informationen, wie notifys einfach parallel zur bridge weiterreichen. z.b. notify "es wird angeklopft", "das gespraech wird gehalten", "sie werden weitergeleitet". auch display informationen und facilities
+
+doku: action execute geht mit fork
doku: rx_vol -> rx_gain