Você está na página 1de 15

Suporte para temporizadores de

sessão SIP em Asterisk® SCF™


1) Introdução
O Softswitch PBX IP, baseado em Asterisk® SCF™ atualmente não tem uma maneira de recuperar
sessões SIP que não terminam através de procedimentos normais de sinalização devido a problemas
de rede ou quando o outro terminal ou um proxy intermediário de roteamento de registros morre.
Atualmente, não há como detectar e, portanto, recuperar tais sessões SIP “vazadas” no Asterisk®
SCF™.
Nota: O Asterisk® SCF™ é atualmente capaz de detectar a inatividade do RTP e pode
destruir sessões SIP como resultado disso, mas isso não ajuda quando o RTP não está fluindo
através do Asterisk® SCF™. Além disso, não ajuda a limpar o estado nos proxies
intermediários e no UA remoto (por exemplo, quando a solicitação BYE não chega a todos
os saltos, incluindo o extremo).

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=["accept", "originate", "refuse"]


session-expires=[integer]

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 1/15
session-minse=[integer]
session-refresher=["uas", "uac"]

session-timers:

O parâmetro Session-Timers define o modo de operação do recurso SIP session-timers no


Asterisk® SCF™. O Asterisk® SCF™ pode ser configurado em um dos três modos a seguir:

1. accept: No modo “accept (aceitar)”, o Asterisk® SCF™ atende às solicitações de temporizadores


de sessão feitas por terminais remotos. Um terminal remoto pode solicitar que o Asterisk® SCF™
ative os temporizadores de sessão, enviando-lhe uma solicitação INVITE com o cabeçalho
Supported: timer ou respondendo ao INVITE do Asterisk® SCF™ com um 200 OK que contém o
cabeçalho Session-Expires:. Neste modo, o Asterisk® SCF™ não solicita temporizadores de sessão
de terminais remotos. Este é o modo padrão no Asterisk® SCF™.

2. originate: No modo “originate (originado)”, o Asterisk® SCF™ solicita os terminais remotos


para envolver temporizadores de sessão, além de atender a tais solicitações feitas pelos terminais
remotos. Para obter o máximo de proteção possível contra vazamentos de canais SIP devido a falhas
na rede ou nos terminais, neste modo o Asterisk® SCF™ executa temporizadores de sessão (
Session-Timers) e envia RE-INVITEs periódicos mesmo se um terminal remoto não suportar a
sessão. recurso de temporizadores.

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:

O parâmetro session-expires contém o intervalo de atualização da sessão em segundos escolhido


pelo Asterisk® SCF™. Ao atuar como um UAC, session-expires é o valor que o Asterisk® SCF™
publica no cabeçalho Session-Expires: em um INVITE de saída. Ao atuar como um UAS, se o
terminal remoto sugerir um intervalo de atualização de sessão que seja maior do que a expiração de
sessão (session-expires) configurada no Asterisk® SCF™, então o Asterisk® SCF™ negociará o
intervalo de atualização até a expiração de sessão (session-expires) configurada. O Asterisk®
SCF™ inclui um Session-Expires: com o valor apropriado na resposta 200 OK. O valor padrão
para esse parâmetro é 1.800 segundos.

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.

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 2/15
Caso a UAS deseje aceitar o pedido, copia o valor do Campo de cabeçalho Session-Expires
da solicitação para a resposta 2xx.

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 parâmetro session-minse contém o intervalo mínimo de atualização da sessão em segundos


aceitável para o Asterisk® SCF™. Este parâmetro serve basicamente para limitar endpoints que
desejam atualizar a sessão com muita frequência, o que pode ser prejudicial à largura de banda da
rede e ao desempenho do Asterisk® SCF™. Ao atuar como um UAC, session-minse é o valor que
o Asterisk® SCF™ publica no cabeçalho Min-SE: em um INVITE de saída. Se o Asterisk®
SCF™ receber uma resposta 422 significando que sua session-minse não é aceitável para o UAS,
então o Asterisk® SCF™ ajusta seu valor de cabeçalho Min-SE: dinamicamente para o que é
recomendado pelo UAS nas respostas 422 para esse diálogo. Ao atuar como um UAS, se o
endpoint remoto sugerir um intervalo Min-SE: menor que o session-minse configurado do
Asterisk® SCF™, então o Asterisk® SCF™ rejeitará essa solicitação com uma resposta 422. A
resposta 422 gerada pelo Asterisk® SCF™ conterá o cabeçalho Min-SE: 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 parâmetro session-refresher define se o UAC ou o UAS enviará solicitações de atualização de


sessão em uma caixa de diálogo. Os valores possíveis para este parâmetro são “uac” ou “uas”. Este
parâmetro é significativo apenas para chamadas de entrada onde o Asterisk® SCF™ atua como um
UAS. Se o Asterisk® SCF™ receber um INVITE onde o parâmetro refresher= está ausente no
cabeçalho Session-Expires: (o que significa que o UAC está deixando o UAS decidir a
atualização), então o Asterisk® SCF™ seleciona seu atualizador de sessão (session-refresher)
configurado como a parte que irá gerar a atualização da sessão (session-refresher) RE-INVITEs.

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.

O valor padrão para este parâmetro é “uas”.

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 3/15
2.2) Tentar novamente ao receber 422
O Asterisk® SCF™ tentará novamente uma chamada de saída se obtiver uma resposta 422
(Intervalo de sessão muito pequeno). O Asterisk® SCF™ ajustará seu Min-SE da sessão para o
Min-SE que recebeu na resposta 422.

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.

2.3) UAS remoto não suporta Session-Timer


Quando o Asterisk® SCF™ estiver configurado para “originate (originar)” Session-Timers, mas o
UAS não suportar o recurso, então o Asterisk® SCF™ ainda executará os Session-Timers. Isso
funciona com base no princípio de que todo UA deve honrar um novo CONVITE. Neste caso, o
Asterisk® SCF™ como UAC assumirá o papel de atualizador e enviará periodicamente solicitações
de atualização de sessão (session-refresher). Como não houve negociação do intervalo de
atualização da sessão, o Asterisk® SCF™ escolherá o intervalo de atualização de sua preferência (o
valor do parâmetro session-expires em sip.conf). Se o Asterisk® SCF™ não receber uma resposta
para um re-INVITE de atualização de sessão (session-refresher), então ele assumirá que algo deu
errado e interromperá a sessão internamente e emitirá uma solicitação de BYE para o UAS.

2.4) UAC remoto não suporta Session-Timer


Quando o Asterisk® SCF™ recebe um SIP INVITE sem um campo de cabeçalho Supported: ou
Require: indicando a tag de opção ‘timer’, isso significa que o UAC não suporta Session-Timer.

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.

2.5) Desativando (Turning-Off) o temporizador de sessão


(Session-Timer) no meio da sessão

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 4/15
O protocolo SIP permite que os Session-Timers sejam desligados (Turning-Off) dinamicamente no
meio de uma sessão. Isso acontece quando o UAS responde a uma solicitação de atualização de
sessão no meio do diálogo com uma resposta 200 sem um campo de cabeçalho Session-Expires:.
Quando o Asterisk® SCF™ está agindo como UAS em uma sessão, ele nunca desligará o Session-
Timer no meio de uma sessão (mesmo que o sip.conf seja atualizado adequadamente e carregado
dinamicamente).

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.

2.6) Ajustando o temporizador de sessão (Session-Timer) no meio


da sessão
O protocolo SIP permite que os Session-Timers sejam ajustados dinamicamente no meio de uma
sessão. Isso acontece quando o UAS responde a uma solicitação de atualização de sessão (session-
refresher) de diálogo intermediário com uma resposta 200 com um valor de campo de cabeçalho
Session-Expires: diferente daquele na resposta 200 da solicitação de atualização anterior. Quando o
Asterisk® SCF™ está agindo como UAS em uma sessão, ele nunca mudará o intervalo dos
Session-Timers no meio de uma sessão (mesmo que o sip.conf seja atualizado adequadamente e
carregado dinamicamente).

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.

2.7) Métodos de atualização de sessão (session-refresher)


De acordo com a RFC 4028, uma sessão pode ser atualizada usando o método UPDATE ou o
método re-INVITE (quando uma distinção não é necessária, estes métodos são genericamente
referidos como solicitações de atualização de sessão neste documento). UPDATE geralmente é uma
técnica superior para modificar ou atualizar uma sessão em comparação com RE-INVITE.
UPDATE oferece pelo menos as seguintes vantagens sobre RE-INVITE:

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

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 5/15
diálogo inicial (re-INVITEs não podem ser usado até que um diálogo confirmado seja
estabelecido).

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).

Adicionar suporte para modificação de sessão e uso de temporizadores de sessão de UPDATE é


simples (podemos fazer o mesmo processamento que fazemos para re-INVITEs hoje); a
complexidade surge na modificação da sessão durante os primeiros cenários de mídia e também
quando as atualizações da sessão precisam acontecer antes que um diálogo confirmado seja
estabelecido. O tratamento desses cenários exigirá uma pilha SIP inerentemente compatível com
RFC 3261 porque esses cenários exigem a execução de múltiplas transações (UPDATE e INVITE)
simultaneamente. Uma pilha SIP compatível com RFC 3261 é um pré-requisito se quisermos
oferecer suporte adequado ao método UPDATE.

2.8) Exigindo Temporizadores de Sessão (Session-Timers)


No SIP, um terminal pode exigir que o outro terminal suporte Session-Timers para uma sessão ou
então a sessão será rejeitada. Isso é feito incluindo a TAG de opção ‘timer’ em Require: ou Proxy-
Require: em vez do campo de cabeçalho Supported:.

No interesse da interoperabilidade com o número máximo de implementações de terminais, o


Asterisk® SCF™ nunca exigirá o suporte de Session-Timers do outro terminal ou dos proxies. Se
o outro endpoint exigir que o Asterisk® SCF™ suporte Session-Timer e se o sinalizador de
session-timers do Asterisk® SCF™ estiver configurado para “refuse (recusar)”, então o

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 6/15
Asterisk® SCF™ rejeitará a solicitação com uma resposta 420 (Bad Extension). Observe que o
“refuse (recusar)” tem um comportamento muito mais suave “ignore (ignorar)” quando o outro
terminal envia “Supported: timer (temporizador)”.

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.

2.10) Teste de interoperabilidade


Este recurso será testado quanto à interoperabilidade com um SIP UA disponível publicamente
(como o X-Lite).

2.11) Teste de performance


Alguns testes de desempenho serão feitos usando SIPp. O comando ‘TOP’ do Linux será usado
para comparar o desempenho com o recurso Session-Timer habilitado ou desabilitado.

3.) Melhorias futuras


1. Controle do Temporizador de Sessão (Session-Timer) no Dialplan;
2. Leitura/Gravação de parâmetros do Temporizador de Sessão (Session-Timer) por meio do AMI;
3. Suporte ao método UPDATE para atualizações de sessões (session-refresher).

4.) Detalhes da implementação


Negociação de Temporizadores de Sessão (Session-Timers):

Os parâmetros Session-Timers (ativado/desativado, intervalo de atualização da sessão, intervalo


mínimo de atualização e atualização) são negociados por sessão entre o UAC e o UAS. Essa
negociação acontece na resposta INVITE/2XX. A lógica de negociação Session-Timers foi
adicionada à função handle_request_invite( ) para suportar casos onde o Asterisk® SCF™ recebe
um INVITE e portanto atua como UAS.

Gerando Eventos de Timer:

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 7/15
O agendador Asterisk® SCF™ é utilizado para gerar os estímulos dos temporizadores de sessão. As
funções ast_sched_add( ) e ast_sched_del( ) foram utilizadas para ligar e desligar os
temporizadores de sessão.

Interação com tempos limite de inatividade RTP:

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.

5.) Correções de bugs existentes


Os seguintes três bugs existentes no canal SIP (chan_sip.so) Asterisk® SCF™ foram encontrados
no desenvolvimento de Session-Timers. Esses bugs foram resolvidos (a partir do Asterisk® SCF™
versão 16) e podem ser verificados separadamente, se necessário:

Asterisk® SCF™ ignora TAGs de opção no cabeçalho REQUIRE: - 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 uma opção Require: for suportada, como “replaces” e “timer”, então o Asterisk®
SCF™ não estava habilitando essas opções para processamento adicional na caixa de diálogo.

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.

Nota: Há um problema relacionado onde o Asterisk® SCF™ incrementa o número da versão


do SDP do que ele enviou no SDP do 183 para o que ele enviou no SDP do 200. Esse
problema não foi resolvido porque não afeta diretamente os Session-Timers, mas com os
ganchos do “antigo SDP” agora em vigor, o problema poderia ser resolvido com certa
facilidade.

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 8/15
6.) Diagnósticos e Depuração
A saída do comando *CLI> “sip show settings” foi aprimorada para imprimir sinalizadores de
configuração relacionados aos temporizadores de sessão (Session-Timers). Abaixo está um
exemplo de saída (observe as novas linhas de saída em texto vermelho):

*CLI> sip show settings


Global Settings:
----------------
SIP Port: 5060
Bindaddress: 0.0.0.0
Videosupport: No
Textsupport: No
AutoCreatePeer: No
MatchAuthUsername: No
Allow unknown access: Yes
Allow subscriptions: Yes
Allow overlap dialing: No
Promsic. Redir: No
SIP domain support: No
Call to non-local dom.: Yes
URI user is phone no: No
Our auth realm: asterisk
Realm. Auth: No
Always auth rejects: No
Call limit peers only: No
Direct RTP setup: No
User Agent: Lab’s Asterisk
Reg. context: (not set)
Regexten on Qualify: No
Caller ID: asterisk
From:
Domain:
Record SIP history: Off
Call Events: Off
IP ToS SIP: CS0
IP ToS RTP audio: CS0
IP ToS RTP video: CS0
IP ToS RTP text: CS0
802.1p CoS SIP: 4
802.1p CoS RTP audio: 5
802.1p CoS RTP video: 6
802.1p CoS RTP text: 0
T38 fax pt UDPTL: No
RFC2833 Compensation: No
Jitterbuffer enabled: No
Jitterbuffer forced: No
Jitterbuffer max size: -1
Jitterbuffer resync: -1
Jitterbuffer impl:
Jitterbuffer log: No
SIP realtime: Disabled

Network Settings:
---------------------------
SIP address remapping: Disabled, no localnet list

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 9/15
Externhost: <none>
Externip: 0.0.0.0:0
Externrefresh: 10
Internal IP: 127.0.0.1:5060
STUN server: 0.0.0.0:0

Global Signalling Settings:


---------------------------
Codecs: 0x8000e (gsm|ulaw|alaw|h263)
Codec Order: none
T1 minimum: 100
Relax DTMF: No
Compact SIP headers: No
RTP Keepalive: 0 (Disabled)
RTP Timeout: 0 (Disabled)
RTP Hold Timeout: 0 (Disabled)
MWI NOTIFY mime type: application/simple-message-summary
DNS SRV lookup: Yes
Pedantic SIP support: No
Reg. min duration 60 secs
Reg. max duration: 3600 secs
Reg. default duration: 120 secs
Outbound reg. timeout: 20 secs
Outbound reg. attempts: 0
Notify ringing state: Yes
Notify hold state: No
SIP Transfer mode: open
Max Call Bitrate: 384 kbps
Auto-Framing: No
Outb. Proxy: <not set>
Session Timer Mode: Originate
Session Refresher: uac
Session-Expires: 1800 secs
Min-SE: 90 secs

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).

*CLI> sip show user 1000


* Name : 1000
Secret : <Not set>

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 10/15
MD5Secret : <Not set>
Context : default
Language :
AMA flags : Unknown
Transfer mode : open
MaxCallBR : 384 kbps
CallingPres : Presentation Allowed, Not Screened
Call limit : 0
Callgroup :
Pickupgroup :
Callerid : "" <>
ACL : No
Codec Order : (gsm:20,ulaw:20,alaw:20)
Auto-Framing : No
Session-Timers : Originate
Session-Refresher : uas
Session-Expires : 120 secs
Min-SE : 90 secs

*CLI> sip show peer 2000


* Name : 2000
Secret : <Set>
MD5Secret : <Not set>
Context : default
Subscr.Cont. : <Not set>
Language :
AMA flags : Unknown
Transfer mode : open
CallingPres : Presentation Allowed, Not Screened
Callgroup :
Pickupgroup :
Mailbox :
VM Extension : asterisk
LastMsgsSent : 32767/65535
Call limit : 0
Dynamic : Yes
Callerid : "" <>
MaxCallBR : 384 kbps
Expire : 127
Insecure : no
Nat : Always
ACL : No
T38 pt UDPTL : No
CanReinvite : No
PromiscRedir : No
User=Phone : No
Video Support : No
Text Support : No
Trust RPID : No
Send RPID : No
Subscriptions : Yes
Overlap dial : No
DTMFmode : rfc2833
ToHost :
Addr→IP : 192.168.15.100 Port 2915
Defaddr->IP : 0.0.0.0 Port 5060
Def. Username :

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 11/15
SIP Options : (none)
Codecs : 0xe (gsm|ulaw|alaw)
Codec Order : (gsm:20,ulaw:20,alaw:20)
Auto-Framing : No
Status : Unmonitored
Useragent : RTC/1.3.5470 (Messenger 5.1.0701)
Reg. Contact : sip:192.168.15.100:10201
Session-Timers : Originate
Session-Refresher : uac
Session-Expires : 100 secs
Min-SE : 92 secs

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

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 12/15
7.) Exemplo para o SIP.CONF
;------ Temporizadores de sessão (Session-Timers) SIP ---------------------------------
; Os temporizadores de sessão (Session-Timers) SIP fornecem um mecanismo de manutenção
; de atividade para sessões SIP ativas. Eles podem detectar canais SIP que não terminam
; através de procedimentos normais de sinalização e recuperar tais canais.
; Os Session-Timers podem ser configurados globalmente ou no nível do usuário ou peer.
;

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

8.) Casos de teste

# Descrição de teste Resultado esperado Passou/Falhou


Asterisk® SCF™ recebe uma chamada. O Asterisk® SCF™ atualiza periodicamente a
session-timers = originate sessão enviando RE-INVITE com base na Passou
configuração de expiração da sessão.
O UAC não oferece suporte a session-timers.
Asterisk® SCF™ recebe uma chamada. O Asterisk® SCF™ não atualiza
session-timers = accept periodicamente a sessão. Passou
O UAC não oferece suporte a session-timers.
Asterisk® SCF™ recebe uma chamada. O Asterisk® SCF™ não atualiza
session-timers = refuse periodicamente a sessão. Passou
O UAC não oferece suporte a session-timers.

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 13/15
Asterisk® SCF™ recebe uma chamada. Asterisk® SCF™ retorna uma resposta 422. O
session-timers = accept UAC reverte com expirações de sessão Passou
(Session-Expires) atualizadas. A chamada é
O UAC oferece suporte a session-timers. concluída normalmente e os temporizadores
O UAC envia session-expires abaixo do Min- de sessão (Session-Timers) são executados.
SE do Asterisk® SCF™.
Asterisk® SCF™ recebe uma chamada. O Asterisk® SCF™ coloca refresher=uas na
session-timers = accept resposta 200. O Asterisk® SCF™ envia Passou
session-refresher=uas periodicamente RE-INVITEs.

O UAC oferece suporte a session-timers.


O UAC envia session-expires sem o
parâmetro de atualização (Session-Refresher).
Asterisk® SCF™ recebe uma chamada. O Asterisk® SCF™ coloca refresher=uac na
session-timers = accept resposta 200. O Asterisk® SCF™ espera por Passou
session-refresher = uac RE-INVITEs e zera o cronômetro ao receber
um.
O UAC oferece suporte a session-timers.
O UAC envia session-expires sem o
parâmetro de atualização (Session-Refresher).
Asterisk® SCF™ recebe uma chamada. Asterisk® SCF™ destrói o canal.
session-timers = accept Passou
session-refresher = uas

O UAC oferece suporte a session-timers.


O UAC envia session-expires sem o
parâmetro de atualização (Session-Refresher).

Condição de falha: o UAC torna-se


inacessível no meio da sessão. Asterisk®
SCF™ envia RE-INVITE que expira.
Asterisk® SCF™ recebe uma chamada. Asterisk® SCF™ não executa temporizadores
session-timers = refuse de sessão (session-timers). Passou
O UAC oferece suporte a session-timers.
Asterisk® SCF™ recebe uma chamada. Asterisk® SCF™ rejeita a solicitação com
session-timers = refuse uma resposta 420. Passou
O UAC requer session-timers.
Asterisk® SCF™ faz uma chamada externa. O Asterisk® SCF™ tenta novamente o
session-timers = originate INVITE enquanto usa o Min-SE em 422 Passou
enquanto a Session-Expires no novo INVITE.
O Asterisk® SCF™ envia um INVITE que é
rejeitado por uma resposta 422. Nota: Este cenário foi testado usando SIPp (o
X-Lite não responde com 422).
Asterisk® SCF™ faz uma chamada externa. Asterisk® SCF™ atualiza periodicamente a
session-timers = originate sessão (session-refresh). Passou
O UAS não da suporte ao session-timer.
Asterisk® SCF™ faz uma chamada externa. O Asterisk® SCF™ executa session-timers
session-timers = originate com base na atualização selecionada pelo Passou
UAS e na Session-Expires: selecionada pelo
O UAS da suporte ao session-timer. UAS.

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 14/15
Asterisk® SCF™ faz uma chamada externa. Asterisk® SCF™ recebe uma resposta 422.
session-timers = originate Passou
O Asterisk® SCF™ envia um novo INVITE
UAS suporta session-timer. desta vez com Session-Expires igual ao valor
Session-Expires do Asterisk® SCF™ : é Min-SE de 422. A chamada é completada.
menor que o Min-SE local do UAS.
Asterisk® SCF™ faz uma chamada externa. O Asterisk® SCF™ executa session-timers
session-timers = accept com base na session-refresh selecionada pelo Passou
UAS e na Session-Expires: selecionada pelo
UAS suporta session-timer. UAS.
Asterisk® SCF™ faz uma chamada externa. O Asterisk® SCF™ não executa session-
session-timers = refuse timer. Passou
UAS suporta session-timer.

Raj Jain Asterisk® SCF™ SIP Session-Timers


Angelo Delphini tradução e revisão técnica
Página 15/15

Você também pode gostar