Re: Отмена трансфера

От: Andrew A. Vasilyev <CGatePro_at_mx_ru>
Дата: Wed 25 Apr 2007 - 21:20:08 MSD

On Mon, Apr 16, 2007 at 04:27:58PM +0400, Dmitry Akindinov wrote:
> Тект программы:

  В тект программы вкралось несколько ошибок, поэтому Дима их   исправил, и вот, что получилось (debug с syslog(...parameters)   можно потОм закомментировать):

// S:<100> = callinorder{10,101,102,103}#postmaster

function callNumber(phoneNumber,timeOut) forward; function callerLeg(parameters,callPending) external; function bridgedLoopHash(peerLeg) external;

entry main is

   group = Vars().startParameter;
   timeOut = 20;
   if not isArray(group) or else Length(group) < 2 then

     syslog("Expecting the array of extensions, timeout as the first value");
     RejectCall("500-Invalid parameters");
   end if;

   timeOut = Number(group[0]); RemoveElement(group, 0);    count = Length(group);
   called = false;
   if count > 0 then

     index = 0;
     //shift = RandomNumber() % count;
     shift = 0;
     while index < count loop
       member = group[(index + shift) % count];
       started = LocalTime();
       called = callNumber(member, timeOut);
     exitif called;
       index = index + 1;
     end loop;

   end if;
   if not called then RejectCall("408-no answer"); end if; end entry;

function callNumber(phoneNumber,timeOut) is

   parameters = NewDictionary();
   if FindSubString(phoneNumber, "@") == -1 then      phoneNumber = phoneNumber + "@" + MyDomain();    end if;

   parameters.("")       = "sip:" + phoneNumber + ";services=no";
   parameters.activeSide = false;
   parameters.From       = RemoteURI();
   parameters.("Expires")  = isNumber(timeOut) ? timeOut : 10;
   parameters.bridgedCall = true;
   parameters.("Call-ID") = PendingRequestData("Call-ID") + ".gr_ser";
   parameters.("Max-Forwards") = PendingRequestData("Max-Forwards")-1;

   syslog("Params: " + ObjectToString(parameters));    peerLeg = callerLeg(parameters,true);    if not IsTask(peerLeg) then

     //PlayFile("Failure");
     return false;
   else
     syslog("Result: " + ObjectToString(peerLeg));
   end if;
   while IsConnected() loop
     input = bridgedLoopHash(peerLeg);
   exitif input != "#";
   end loop;
   return true;
end function; Получено Wed Apr 25 17:20:09 2007

Этот архив был сгенерирован hypermail 2.1.8 : Wed 25 Apr 2007 - 22:14:51 MSD