Переменная сценария не должна использоваться для обработки вызовов? - PullRequest
0 голосов
/ 12 февраля 2019

сэр,

Я пытаюсь создать прокси с сохранением состояния в opensips 2.4.

Я просто хотел, чтобы переменная содержала информацию о полученном сообщении и обрабатывала ее.

Итак, япроверил "переменную ядра" в opensips manual.it говорит, что переменная скрипта обрабатывается мудро.Поэтому я не должен использовать значение заголовка в скрипте, например, $ var (Ruri) = $ ru ??он будет перезаписан другим вызовом ??

$var(userName)=$rU;
$var(removePlus) = '+';
# Search the string starting at 0 index
if($(var(userName){s.index, $var(removePlus)})==0){ 
  $rU=$(var(userName){s.substr,1,0});
}

1 Ответ

0 голосов
/ 14 февраля 2019

$var переменные являются локальными для процесса, что означает, что вы не можете поделиться ими с другими работниками SIP, даже если бы захотели!На самом деле, они настолько оптимизированы, что их начальное значение часто будет таким же, как и тот же процесс, оставшийся после предыдущей обработки SIP-сообщения (совет: вы можете доказать это, запустив opensips с children = 1 и сделав два вызова).

С другой стороны, такие переменные, как $avp, совместно используются процессами, но не "опасным" образом, так что вам придется беспокоиться о двух параллельных обработках повторной передачи INVITE, каждая из которых перезаписывает $avp другой, и т. Д.Нет!Об этом позаботятся под капотом.«Совместное использование» означает только то, что, например, во время ответа «200 OK», обработанного процессом, отличным от того, который передал начальное сообщение «INVITE», вы все равно сможете читать и записывать в тот же $avp, который вы установили во время запроса.обработка.

Наконец, ваш код кажется правильным, но его можно значительно упростить:

if ($rU =~ "^+")
    strip(1);
...