From: Super User Date: Mon, 4 Feb 2008 11:39:47 +0000 (+0100) Subject: added execute patch by martin X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=commitdiff_plain;h=87c6cddd9411591029446910df897259eeb20c8a added execute patch by martin now execute works and forks modified: action.cpp modified: todo.txt --- 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