Пересылка заголовков SIP со звездочкой (PJSIP)

Я пытаюсь перенаправить определенный входящий заголовок на другую часть вызова, но не могу понять, как передать значение заголовка во входящем отрезке к обработчику предварительного -набора

[addheaders]
exten => addheader,1,Verbose("Setting header")
exten => addheader,1,Verbose(${somevar}) ; The 'somevar' variable doesn't exist anymore
exten => addheader,n,Set(PJSIP_HEADER(add,X-MyHeader)=test)
exten => addheader,n,Set(PJSIP_HEADER(add,X-MyHeader2)=${somevar})
exten => addheader,n,Return()

[incoming]
exten => _+4600.,1,Ringing
exten => _+4600.,n,Set(somevar=${PJSIP_HEADER(read,TheHeaderIWantToForward)})
exten => _+4600.,n,Verbose(${somevar}) ; Prints the correct value
exten => _+4600.,n,Dial(PJSIP/${EXTEN:1},,b(addheaders^addheader^1))
exten => _+4600.,n,Hangup

Мне удалось добавить X-MyHeader к отрезку исходящего вызова (, поскольку документация по звездочке показывает, как )], но как передать значение в другой контекст? Я не могу прочитать переменную в «[addheaders]», и я могу только прочитать заголовки в «[incoming]»

0
задан 30 September 2021 в 11:04
2 ответа

Не знаю, был ли это «правильный» способ сделать это, но я решил эту проблему, приняв расширения с подстановочными знаками в контексте addheaders:

[addheaders]
exten => _.,1,Set(PJSIP_HEADER(add,X-header-to-be-forwarded)=${EXTEN})
exten => _.,n,Return()

[incoming]
exten => _+4600.,1,Ringing
exten => _+4600.,2,Set(customheader=${PJSIP_HEADER(read,X-header-to-be-forwarded)})
exten => _+4600.,3,GotoIf($["${customheader}"=""]?7:) ; Skip adding the header if it is empty
exten => _+4600.,4,Dial(PJSIP/${EXTEN:1},,b(addheaders^${customheader}^1))
exten => _+4600.,5,GoTo(9))
exten => _+4600.,6,Dial(PJSIP/${EXTEN:1})
exten => _+4600.,7,Hangup

Здесь есть некоторые ограничения, например "." или "," нельзя использовать, но это решило нашу проблему.

0
ответ дан 30 September 2021 в 12:20

Можно использовать _ПЕРЕМЕННАЯ:https://wiki.asterisk.org/wiki/display/AST/Variable+Inheritance

[handler]
exten => addheader,1,NoOp(Value is ${somevar})
same => n,Set(PJSIP_HEADER(add,X-myheader=${somevar})
same => n,Return()

[internal]
exten => 6010,1,NoOp(Test)
same  => n,Set(_somevar=${PJSIP_HEADER(read,X-myheader)})
same  => n,NoOp(Value is ${somevar})
same => n,Dial(PJSIP/6010,,b(handler^addheader^1))
same => n,Hangup()
1
ответ дан 29 October 2021 в 07:43

Теги

Похожие вопросы