Escolar Documentos
Profissional Documentos
Cultura Documentos
Os Session-Timers (Temporizadores de Sessão) SIP são uma extensão do protocolo SIP que
permite que endpoints e proxies atualizem uma sessão periodicamente. As sessões são mantidas
ativas enviando uma solicitação RE-INVITE ou UPDATE em um intervalo negociado. Se uma
atualização de sessão falhar, todas as entidades que suportam Session-Timers limparão seu estado
de sessão interno. Além disso, os UAs geram uma solicitação BYE para limpar o estado nos proxies
e no UA remoto (isso é feito para o benefício das entidades SIP no caminho que não suportam
Session-Timers).
Este documento descreve os requisitos e o design para suporte a Session-Timers na pilha SIP
Asterisk® SCF™ (também conhecido como driver de canal SIP ou chan_sip.c). A implementação
do recurso Session-Timers no Asterisk® SCF™ será compatível com a RFC 4028. Haverá certas
políticas implementadas no Asterisk® SCF™ onde a RFC 4028 deixa a critério do implementador.
Essas políticas são descritas neste documento como parte dos requisitos.
2) Requerimentos
Esta seção descreve os requisitos para implementação de SIP Session-Timers no Asterisk® SCF™.
Esses requisitos também descrevem as políticas implementadas no Asterisk® SCF™ com relação
ao que a implementação do Asterisk® SCF™ escolherá fazer quando a RFC 4028 deixar isso a
critério da política local implementada no SIP UA (estes são normalmente os comportamentos
descritos com palavras-chave MAY ou SHOULD em o texto RFC).
2.1) Configuração
Os Session-Timers podem ser configurados em todo o sistema, por usuário ou por peer. As
configurações por usuário/peer substituem as configurações globais. Os novos parâmetros a seguir
foram adicionados ao arquivo sip.conf.
session-timers:
3. refuse: No modo “refuse (recusa)”, o Asterisk® SCF™ age como se não suportasse
temporizadores de sessão para solicitações de entrada ou saída. Se um terminal remoto solicitar
que o Asterisk® SCF™ envolva temporizadores de sessão em uma caixa de diálogo (enviando o
cabeçalho Supported: timer), então o Asterisk® SCF™ simplesmente ignora essa solicitação. Se
um endpoint remoto exigir que o Asterisk® SCF™ acione temporizadores de sessão (enviando o
cabeçalho Require: timer em um INVITE), então o Asterisk® SCF™ rejeita essa solicitação com
uma resposta 420 Bad Extension.
session-expires:
Esse comportamento é descrito com uma palavra-chave MAY na RFC 4028 (parágrafo da seção 9
da RFC 4028 citado abaixo). Para obter proteção máxima com temporizadores de sessão (session-
timers), a implementação do Asterisk® SCF™ escolhe atualizar em um intervalo menor, se assim
for configurado.
A resposta UAS PODE (MAY) reduzir seu valor, mas NÃO DEVE configurá-lo para uma
duração inferior ao valor no campo de cabeçalho Min-SE da solicitação, se estiver presente;
caso contrário, o UAS PODERÁ (MAY) reduzir o seu valor, mas NÃO DEVE defini-lo
para uma duração inferior a 90 segundos. O UAS NÃO DEVE aumentar o valor do campo
de cabeçalho Session-Expires.
session-minse:
O valor padrão e mínimo para esse parâmetro é 90 segundos. De acordo com RFC 4028, este
parâmetro não pode ser configurado para um valor inferior a 90 segundos no sip.conf. Se alguém
configurar isso para menos de 90 segundos no sip.conf então o Asterisk® SCF™ irá ignorar essa
configuração e usará como padrão 90 segundos.
session-refresher:
O Asterisk® SCF™ informa o UAC sobre esta decisão enviando o parâmetro refresher= na
resposta 200.
Ao atuar como UAC, o Asterisk® SCF™ deixa a seleção de atualização de sessão para o UAS. Ou
seja, o Asterisk® SCF™ não apresenta o parâmetro refresher= no cabeçalho Session-Expires: em
um INVITE de saída. Esse comportamento é recomendado pela RFC 4028.
Pode haver vários cancelamentos de uma determinada solicitação se os proxies intermediários entre
o UAC e o UAS também participarem do Session-Timer. Os usuários devem ajustar sua
configuração de expiração de sessão (session-expires) de forma que atenda à condição Min-SE
para todos os proxies no caminho e UAS, de modo que as tentativas de ida e volta do tipo 422
sejam salvas.
O Asterisk® SCF™ como UAS irá gerar uma resposta 422 se receber uma solicitação com Session-
Expires: com o intervalo menor que a configuração session-minse do Asterisk® SCF™. O
Asterisk® SCF™ incluirá um cabeçalho Min-SE: na resposta 422 com o valor de seu session-
minse.
A responsabilidade agora recai sobre o Asterisk® SCF™ para decidir se deseja executar o
Session-Timer para a sessão ou não. Se o Asterisk® SCF™ estiver configurado no modo
“originate”, então o Asterisk® SCF™ irá executar o Session-Timer mesmo que o UAC não o
suporte. O Asterisk® SCF™ atuará como um atualizador e atualizará a sessão no intervalo indicado
no parâmetro session-expires em sip.conf.
Quando o Asterisk® SCF™ estiver agindo como um UAC e se o UAS desligar o Session-Timer no
meio de uma sessão então o Asterisk® SCF™ assumirá o comportamento ditado pelo parâmetro
session-timers em sip.conf. Se a expiração da sessão (session-expire) foi definida como
“originate”, então o Asterisk® SCF™ assumirá a função de atualização (se ainda não for essa) pelo
restante da sessão.
Quando o Asterisk® SCF™ está agindo como um UAC e se o UAS ajusta o Session-Timer no
meio de uma sessão então o Asterisk® SCF™ irá honrar isso e reagir de acordo.
1. UPDATE é mais leve nos endpoints e na rede porque envolve uma solicitação e uma
resposta (duas mensagens SIP), enquanto um re-INVITE envolve duas solicitações SIP e
uma resposta (três mensagens SIP).
2. UPDATE (sendo uma transação separada) pode ser enviada durante a transação INVITE
inicial. Esta foi uma das principais razões pelas quais o método UPDATE foi inventado
porque permitiu modificações do SDP durante as primeiras médias. Da perspectiva do
Session-Timer, UPDATE pode ser usado para atualizar sessões que estão em um estado de
3. UPDATE podem ser concluídos sem troca de oferta (offer)/resposta (answer) SDP,
enquanto os re-INVITEs devem incluir troca de oferta (offer)/resposta (answer) SDP
mesmo quando a intenção é atualizar a sessão (session-refresher). Quando um re-INVITE
é usado para atualizar uma sessão (session-refresher), o UAC deve usar o mesmo número
de versão do SDP em sua oferta que a solicitação anterior e o UAS deve descobrir que a
versão do SDP não mudou em relação à oferta anterior. Isto representa um fardo adicional
tanto para o UAC como para o UAS.
4. UPDATE é mais atômico e menos sujeito a condições de corrida em comparação com re-
INVITE. Uma solicitação de re-INVITE pode ter uma ou mais respostas provisórias que
abrem uma janela mais ampla para brilhos de re-INVITE e outras condições de corrida.
O problema, entretanto, é que a pilha SIP (chan_sip.so) do Asterisk® SCF™ atualmente não lida
com solicitações UPDATE de entrada. Lidar com solicitações UPDATE de entrada é um tópico
maior do que construir o recurso Session-Timers. O SIP (chan_sip.so) não permite permitir
UPDATE de entrada apenas para temporizadores de sessão (session-timers) sem abrir as portas
para todos os outros usos possíveis de UPDATE (quando um UA indica UPDATE em seu
cabeçalho Allow:, isso significa que ele suporta o método UPDATE em geral; em outras palavras,
há não há maneira de indicar ao outro terminal que o Asterisk® SCF™ suporta UPDATE apenas
para temporizadores de sessão (session-timers)).
Sempre que o suporte de entrada UPDATE for adicionado ao Asterisk® SCF™, ele terá que ser
adicionado para todos os usos de UPDATE, como modificação de sessão, temporizadores de
sessão (session-timers, diálogo inicial [mid-dialog]), temporizadores de sessão (session-timers,
diálogo intermediário [early dialog]) e modificação de sessão durante a mídia inicial (early-media).
2.9) Session-Refresher
O Asterisk® SCF™ suportará uma configuração configurável para refresher= param no cabeçalho
Session-Expires. Quando o Asterisk® SCF™ está agindo como o UAC (ou seja, ele gera uma
chamada de saída), então o Asterisk® SCF™ não adicionará o parâmetro refresher= no INVITE
de saída. O raciocínio por trás disso é o seguinte: RFC 4028 não permite que o UAC envie
refresher=uas, portanto, se sip.conf ditar que session-refresher=uas, então o Asterisk® SCF™
não pode refletir o mesmo no parâmetro refresher=. Em segundo lugar, a RFC 4028 recomenda
que o refresher=uac não seja enviado no interesse de deixá-lo para negociação.
Os temporizadores de sessão SIP não interagem com temporizadores de inatividade RTP. Num
sistema onde o RTP atravessa o Asterisk, é possível que ambos os mecanismos estejam rodando
simultaneamente.
Asterisk® SCF™ não rejeita REQUIRE: TAGs de opções desconhecidas: - O Asterisk® SCF™
verifica o cabeçalho Require: em um INVITE de entrada e se vê uma ou mais TAGs de opções dos
conjuntos padrão de opções que não suporta, então ele rejeita o INVITE com resposta 420. No
entanto, se o cabeçalho Require: contiver uma ou mais TAGs de opção que não sejam do conjunto
padrão de TAGs de opção atualmente codificadas no Asterisk® SCF™, o Asterisk® SCF™
ignorará essas opções e não rejeitará a solicitação com uma resposta 420. Novas TAGs de opções
são frequentemente adicionadas ao conjunto de protocolos SIP e muito menos TAGs de opções
proprietárias. Este problema já foi resolvido.
Altamente critico! O Asterisk® SCF™ processa o SDP antigo como um novo SDP: - O
Asterisk® SCF™ estava tratando um SDP antigo e não modificado em um RE-INVITE como um
novo SDP e estava incrementando incorretamente seu número de versão do SDP em resposta.
O contexto de diálogo (sip_pvt) no chan_sip.c do Asterisk® SCF™ agora mantém o registro da
versão SDP anterior do terminal remoto e se não mudar em um novo RE-INVITE então o
Asterisk® SCF™ também não altera seu próprio número de versão SDP. Este problema já foi
resolvido.
Network Settings:
---------------------------
SIP address remapping: Disabled, no localnet list
Default Settings:
-----------------
Context: default
Nat: RFC3581
DTMF: rfc2833
Qualify: 0
Use ClientCode: No
Progress inband: Never
Language:
MOH Interpret: default
MOH Suggest:
Voice Mail Extension: voicemail
----
*CLI>
A saída dos comandos ‘sip show user’ e ‘sip show peer’ foi aprimorada para imprimir
sinalizadores relacionados aos temporizadores de sessão (Session-Timers).
O comando *CLI> “sip show channel <call-id>” foi aprimorado para gerar sinalizadores
relacionados a temporizadores de sessão que se aplicam a essa sessão específica. Abaixo está um
exemplo de saída (observe as novas linhas de saída em texto vermelho):
*CLI> sip show channel NjE4MmZkMTl
* SIP Call
Curr. trans. Direction : Incoming
Call-ID : NjE4MmZkMTlkMDU3NDZjMWUyYzBhOTFjMGZlOGVlMDI.
Owner channel ID : SIP/1000-08a626d0
Our Codec Capability : 4
Non-Codec Capability (DTMF) : 1
Their Codec Capability : 1038
Joint Codec Capability : 4
Format : 0x4 (ulaw)
T.38 support : No
Video support : No
MaxCallBR : 384 kbps
Theoretical Address : 159.63.73.115:5061
Received Address : 159.63.73.115:5061
SIP Transfer mode : open
NAT Support : RFC3581
Audio IP : 159.63.73.11 (local)
Our Tag : as5a01a88b
Their Tag : 75710f57
SIP User agent : X-Lite release 1006e stamp 34025
Username : 1000
Peername : 1000
Original uri : sip:1000@159.63.73.115:5061
Caller-ID : 1000
Need Destroy : No
Last Message :
Rx : ACK
Promiscuous Redir : No
Route : sip:1000@159.63.73.115:5061
DTMF Mode : rfc2833
SIP Options : timer
Session-Timer : Active
Session-Timer Interval : 150
Session-Timer Refresher : uac
Session-Timer Expirys : 0
Session-Timer Sched Id : 9
session-timers=accept
session-expires=3600
session-minse=90
session-refresher=uac
[2000]
type=peer
regexten=2000
secret=2000
host=dynamic
nat=yes
canreinvite=no
disallow=all
allow=gsm
allow=ulaw
allow=alaw
session-timers=originate
session-expires=1800
session-minse=90
session-refresher=uas