added execute patch by martin
authorSuper User <root@isdn.jolly.ten>
Mon, 4 Feb 2008 11:39:47 +0000 (12:39 +0100)
committerSuper User <root@isdn.jolly.ten>
Mon, 4 Feb 2008 11:39:47 +0000 (12:39 +0100)
now execute works and forks

modified:   action.cpp
modified:   todo.txt

action.cpp
todo.txt

index 6856fcc..6d9d1dd 100644 (file)
@@ -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;
+       }
 }
 
 
index 72615af..4e7216b 100644 (file)
--- 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