Jingle é uma estrutura padrão usada para comunicações ponto a ponto. Ele permite que a comunicação multimídia seja estabelecida entre dois dispositivos XMPP (Extensible Messaging and Presence Protocol). A negociação entre os dois é realizada em um canal XMPP, enquanto a mídia real usa um canal de dados dedicado separado que emprega o RTP (Real-time Transport Protocol).
O principal objetivo do Jingle é facilitar a comunicação usando VoIP e videoconferência. Foi projetado pelo Google e pela XMPP Standards Foundation. [1] Não se destina a substituir outros protocolos, como o SIP (Session Initiation Protocol), que permite uma comunicação de voz mais geral, nem suporta uma gama completa de funções de telefonia, como encaminhamento de chamadas, transferências e assim por diante. Ele foi projetado para funcionar junto com o SIP, para que os clientes XMPP possam usar as redes VoIP existentes de um fornecedor atacadista internacional de VoIP, como o IDT.
Ok, isso é um breve resumo do que Jingle é e faz. Se você ainda está conosco e deseja saber mais, continue lendo para obter mais detalhes sobre o uso da estrutura.
Como o Jingle funciona
Como vimos, o Jingle permite que um par de clientes XMPP estabeleça, mantenha e encerre uma sessão multimídia. Nesse caso, a multimídia geralmente abrange voz e vídeo. A negociação entre os dois acontece no XMPP enquanto a transferência de mídia ocorre fora dele.
Antes de avançarmos, precisamos saber um pouco sobre o XMPP. XMPP é um conjunto de padrões de código aberto para mensagens instantâneas e bate-papo usando voz e vídeo. Ele foi projetado principalmente para fornecer uma alternativa aberta e descentralizada aos sistemas de mensagens proprietários e fechados na época de sua introdução.
A chave para o sucesso do XMPP é que ele possui uma infraestrutura descentralizada, da mesma maneira que o email, para que qualquer pessoa possa executar seu próprio servidor XMPP e controlar suas próprias comunicações. O XMPP também pode ser executado com segurança, isolado de redes públicas, a fim de fornecer comunicações privadas. Várias tecnologias podem ser executadas usando o XMPP, do qual o Jingle é apenas uma.
Quando você deseja iniciar uma sessão multimídia, o primeiro cliente, o 'iniciador', envia um convite, uma 'oferta de início de sessão' para o segundo. O segundo cliente, o 'respondente', reconhece isso e pergunta ao usuário se ele deseja continuar - embora o cliente possa ser configurado para aceitar solicitações de iniciadores específicos automaticamente - em ambos os casos, o respondente aceita a sessão do iniciador.
Ao aceitar a sessão, o respondedor responderá com uma lista dos codecs que pode aceitar. O iniciador aceita a resposta e os dois negociarão qual codec deve ser usado para o transporte de mídia e iniciarão uma sessão de mídia.
No final da ligação, qualquer uma das partes pode solicitar o encerramento da sessão, assim que a outra reconhecer isso, e o link entre as duas será eliminado. Simples.
Gerenciamento de sessão
Para que tudo isso funcione, o Jingle precisa controlar o fluxo da sessão. Ao configurar a sessão, o iniciador deve descobrir qual dos recursos XMPP disponíveis do respondente é o melhor para o aplicativo e qual método de transporte pode ser usado. Ele também pode especificar opcionalmente uma condição de segurança que deve ser atendida - como um link criptografado - antes que os dois clientes tenham permissão para trocar dados.
Há um certo grau de flexibilidade nas sessões de Jingle, de modo que, uma vez que uma sessão esteja ativa, ela não precise necessariamente permanecer fixa em sua configuração. As sessões ativas podem ser alteradas para modificar ou remover conteúdo - mantendo a voz ativa enquanto interrompe o vídeo, por exemplo - ou alterando o protocolo de transporte. O Jingle também pode enviar mensagens de informação entre clientes.
Dois tipos de transporte diferentes estão disponíveis no Jingle. O datagrama possui componentes que trocam pacotes. Podem ser de qualquer tamanho e podem ser recebidos em qualquer ordem. Ao usar o Datagram, o transporte deve especificar quais componentes são necessários e como serão usados.
A alternativa é o transporte de streaming; isso troca fluxos bidirecionais semelhantes ao método visto no TCP. Os pacotes no fluxo são recebidos em ordem e cada um deve ter um identificador de sequência e um tamanho máximo de pacote. O transporte que deve ser usado é estabelecido no início da sessão.
Protegendo o Jingle
Como em qualquer serviço online, a segurança é uma consideração importante ao usar o Jingle. O uso de alguma forma de segurança da camada de transporte é um bom começo e, como vimos, é possível condicionar o início de uma sessão à presença deste.
O Jingle também pode ser vulnerável a ataques DDoS que bombardeiam clientes com muitas solicitações e é importante evitar isso configurando o sistema para aceitar apenas conexões de entidades conhecidas. Da mesma forma, você pode evitar a interceptação e o redirecionamento de chamadas, garantindo que os IDs da sessão correspondam.
[1] https://xmpp.org