# Session Initiation Protocol (SIP)

Definido por RFC 3261

Desenhado para criar, modificar e terminar sessões entre dois ou mais participantes.

* Não limitado a chamadas VoIP.

É um protocolo baseado em texto, similar ao HTTP.

* Transportado por UDP ou TCP.
  * Segurança é garantia por TLS ou IPSec.

Oferece uma alternativa ao H.323.

É um protocolo **peer-to-peer**. Os pares numa sessão são chamados de *user agents* (UAs).

* *User-agent client* (UAC) - Uma aplicação cliente que inicia o pedido SIP.
* *User-agent server* (UAS) - Uma aplicação servidor que contacta com o utilizador quando o pedido SIP é recebido e retorna uma resposta em nome do utilizador

## Funcionalidade

SIP suporta cinco facetas quanto ao estabelecimento e terminação de comunicações multimédia.

### Localização do utilizador

Determinação do sistema final a ser usado para a comunicação.

### Disponibilidade do utilizador

Determinação da vontade do partido chamado em estabelecer comunicações.

### Capacidade do utilizador

Determinação da *media* e dos parâmetros desta, a serem usados.

### Estabelecimento de sessão

*"ringing*", estabelecimento de parâmetros da sessão tanto no chamador como no chamado.

### Gestão da sessão

Inclui transferências e terminação de sessões, modificar parâmetros de sessões e invocar serviços.

## Clientes e Serviços

### Clientes

* Telemóveis;
* *Gateways*;
* *User Agents*;
  * Atua como:
    * Cliente quando inicia um pedido (UAC);
    * Servidor quando responde a um pedido (UAS).

### Servidores

#### Servidor proxy

* Recebe pedidos SIP de um cliente e encaminha-as pelo cliente.
* Recebe mensagens SIP e encaminha-as para o próximo servidor SIP na rede.
* Providência funções como autenticação, autorização, controlo de acesso à rede, *routing*, retransmissão de pedidos de forma fiável, e segurança.

#### Servidor de redireccionamento.

* Providencia ao cliente informação sobre o próximo salto que uma mensagem deve tomar e depois os próximos saltos dos contactos do cliente ou diretamente a UAS.

#### *Registrar server*

* Processa pedidos de UAC's para registar a localização atual.
* Frequentemente são *co-located* com um servidor de redireccionamento ou proxy.

## Mensagens

SIP usado para comunicação *Peer-to-Peer* apesar de usar um modelo Cliente-Servidor.

É um protocolo baseado em texto e usa codificação UTF-8.

A mensagem pode ser ou um **pedido** de um cliente a um servidor, ou a **resposta** de um servidor a um cliente.

### Pedido

* *Request-Line*;
* Um ou mais campos no cabeçalho;
* Uma linha vazia indica o fim do cabeçalho;
* Um corpo de mensagem opcional.

### Resposta

* *Status-Line*;
* Um ou mais campos no cabeçalho;
* Uma linha vazia indica o fim do cabeçalho;
* Um corpo de mensagem opcional.

Todas as linhas, incluido as vazias, têm de terminar com um CRLF

## Pedidos

Usa *SIP Uniform Resource Indicators* (URI) para indicar o utilizador ou serviço a quem o pedido está endereçado.

sip:user:password\@host:port;uri-parameters

* sip:<John@doe.com>
* sip:<+14085551212@company.com>
* sip:<alice@atlanta.com>;maddr=239.255.255.1;ttl=15

Pedidos são diferenciados por começarem com a *Request-Line*.

* Contem um **nome**, ***request-uri***, e ***sip-version***
  * Request-Line = Method SP Request-URI SP SIP-Version CRLF
