Example #1
0
                 if ($untrusted) {
                     $collect_user = $mailbox;
                     setState("pass");
                 } else {
                     initUser();
                 }
             }
             break;
         case "chan.notify":
             gotNotify($ev->GetValue("reason"));
             $ev->handled = true;
             break;
         case "chan.dtmf":
             $text = $ev->GetValue("text");
             for ($i = 0; $i < strlen($text); $i++) {
                 gotDTMF($text[$i]);
             }
             $ev->handled = true;
             break;
     }
     /* This is extremely important.
        We MUST let messages return, handled or not */
     if ($ev) {
         $ev->Acknowledge();
     }
     break;
 case "answer":
     // Yate::Debug("PHP Answered: " . $ev->name . " id: " . $ev->id);
     if ($ev->name == "user.auth") {
         checkAuth($ev->retval);
     }
Example #2
0
function endRoute($callto, $ok, $err, $params)
{
    global $partycallid;
    global $collect;
    global $final;
    global $queue;
    global $routeOnly;
    global $state;
    if ($ok && $callto != "-" && $callto != "error") {
        Yate::Output("Overlapped got route: '{$callto}' for '{$collect}'");
        $m = new Yate("chan.masquerade");
        $m->params = $params;
        $m->params["message"] = "call.execute";
        $m->params["complete_minimal"] = true;
        $m->params["id"] = $partycallid;
        $m->params["callto"] = $callto;
        $m->Dispatch();
        if (strlen($queue)) {
            // Masquerade the remaining digits
            // TODO: wait for call.execute to be processed to do that?
            $d = new Yate("chan.masquerade");
            $d->params["message"] = "chan.dtmf";
            $d->params["id"] = $partycallid;
            $d->params["tone"] = $queue;
            $d->Dispatch();
        }
        return;
    }
    if ($final) {
        Yate::Output("Overlapped got final error '{$err}' for '{$collect}'");
        Yate::SetLocal("reason", $err);
        setState("");
    } else {
        if ($err != "incomplete") {
            Yate::Output("Overlapped got error '{$err}' for '{$collect}'");
            Yate::SetLocal("reason", $err);
            setState("");
            $final = true;
        } else {
            Yate::Debug("Overlapped still incomplete: '{$collect}'");
            if ($routeOnly) {
                setState("noroute");
            } else {
                // Don't use setState: we don't want to change the prompt
                $state = "prompt";
            }
            // Check if got some other digits
            if ($queue != "") {
                gotDTMF("");
            }
        }
    }
}
Example #3
0
             $m->params["id"] = $ourcallid;
             $m->params["targetid"] = $partycallid;
             $m->Dispatch();
             setState("prompt");
             break;
         case "chan.notify":
             if ($ev->GetValue("targetid") == $ourcallid) {
                 gotNotify();
                 $ev->handled = true;
             }
             break;
         case "chan.dtmf":
             if ($ev->GetValue("targetid") == $ourcallid) {
                 $dtmfs = $ev->GetValue("text");
                 for ($i = 0; $i < strlen($dtmfs); $i++) {
                     gotDTMF($dtmfs[$i]);
                 }
                 $ev->handled = true;
             }
             break;
     }
     /* This is extremely important.
        We MUST let messages return, handled or not */
     if ($ev) {
         $ev->Acknowledge();
     }
     break;
 case "answer":
     if ($ev->name == "call.route") {
         endRoute($ev->retval, $ev->handled, $ev->GetValue("error"));
     }
Example #4
0
         // No need to track us, this is an utility channel
         $m->SetParam("cdrtrack", false);
         // Active DTMF detector on outgoing call leg
         $m->SetParam("tonedetect_out", true);
         $m->Dispatch();
         break;
     case "call.answered":
         callAnswered();
         $ev->handled = true;
         break;
     case "chan.notify":
         callFailed("noanswer");
         $ev->handled = true;
         break;
     case "chan.dtmf":
         gotDTMF($ev->GetValue("text"));
         $ev->handled = true;
         break;
     case "chan.disconnected":
         callFailed($ev->GetValue("reason"));
         /* Put it back running to avoid double destruction... */
         $running = true;
         $ev->handled = true;
         break;
 }
 /* This is extremely important.
    We MUST let messages return, handled or not */
 if ($ev) {
     $ev->Acknowledge();
 }
 break;