JSR 120 (SMS), JSR 205 (WMAPI 2.0) e JSR 180 (SIP) JULIAN PRADA SANIMIGUEL Grupo 6
Protocolo SIP Desenho do Protocolo Funcionamento do Protocolo API JSR 180 (SIP) Exemplos
Protocolo de iniciação de sessão SIP O Protocolo de Iniciação de Sessão (SIP) é um protocolo desenvolvido pela Internet Engineering Task Force (IETF), com a intenção de ser um padrão para a iniciação, modificação y finalização de sessões de comunicação interativa entre usuários onde intervêm elementos multimídia como o vídeo, a voz, a mensageira instantânea, os jogos online, aplicando o modelo petição resposta, similar ao HTTP.
Desenho do Protocolo O protocolo SIP utiliza as funções contribuídas por outros protocolos e não volta a desenvolvê-las. Só se concentra no estabelecimento, modificação y terminação das sessões. Ele complementa-se, com o SDP (Session Description Protocol), que descreve o conteúdo multimídia da sessão, por exemplo, que direciones IP, portos e códecs se usarão durante a comunicação.
Desenho do Protocolo Adota o modelo Cliente Servidor. A petição inicial e todas suas respostas constituem uma transação.
Funcionamento do Protocolo O protocolo SIP permite o estabelecimento de sessões multimídia entre dois ou mais usuários, ele faz isto mediante o intercambio de mensagens entres as partes que se querem comunicar. Ele está composto por:
Agentes de Usuário São os pontos extremos do protocolo, os que emitem e recebem as mensagens do protocolo SIP. Por exemplo, um videoteléfone, um telefone, um cliente de software (softphone) ou qualquer outro dispositivo similar. O protocolo não se ocupa da interface destes dispositivos com o usuário final, só se interessa nas mensagens que estes geram e recebem
Agentes de Usuários
Servidores de Registro O protocolo SIP permite estabelecer a localização física de um usuário determinado na rede, para isto utiliza o mecanismo de registro. o servidor de registro realiza a associação (binding) entre: Endereço lógico SIP (usuario@dominio) Endereço físico IP
Servidores Proxy e Redirecionamento Oservidor que recebe as petições para seus usuários será o encarregado de determinar o endereço físico do usuário chamado
Servidores Proxy Determina a localização do usuário chamado, e envia a petição ao endereço físico do usuário chamado, as respostas do agente de usuário chamado também são enviadas ao Proxy o qual as remite para o usuário de origem.
Servidor Redirector Gera uma resposta que indica à origem o endereço físico do usuário para que este possa realizar uma petição e enviá-la ao endereço físico do usuário desejado. Um mesmo servidor pode atuar como Rediretor o como Proxy dependendo da situação.
Formato das Mensagens Petições Uma línea de petição Uns encabeçados Um corpo A línea de petição indica o propósito e o destinatário da petição. Respostas Uma línea de resposta Uns encabeçados Um corpo. A línea de resposta indica o código de estado da resposta o qual indica o resultado do processamento da petição.
Formato das Mensagens Os encabeçados das petições e respostas são utilizados para diversas funções do protocolo relacionadas com o encaminhamento das mensagens, autenticação dos usuários, entre outras. O corpo das mensagens é opcional e é utilizado para transportar as descrições das sessões que se querem estabelecer, utilizando a sintaxe do protocolo SDP.
API JSR 180 (SIP) JSR180defineumpacoteopcionalqueforneceaAPI SIP para clientes J2ME, de modo que aplicações SIP podem operar em dispositivos com pouca memória. Esta interface lhe permite a JAVA habilitar dispositivos móveis para enviar e receber mensagens SIP. A API é compacta y genérica, de modo que pode usar-se com qualquer perfil J2ME, não só MIDP. Como mínimo, requere da versão 1.0 do CLDC (Connected Limited Device Configuration).
Interfaces SipConnection Tem as propriedades e métodos comuns das subinterfaces SipClientConnectione e SipServerConnection.
Interfaces SipClientConnection Representa uma transação tipo cliente SIP e pode ser criada pelo aplicativo usando javax.microedition.io.connecto r ou SipDialog SipServerConnection Representa uma transação tipo servidor SIP e é criado pela SipConnectionNotifier quando uma nova petição é recebida.
Interfaces SipConnectionNotifier Define uma conexão tipo servidor SIP que espera qualquer mensagem entrante. Ao receber as petições de entrada, as aplicações usam o método acceptandopen() da interface, a qual aceita e abre uma nova SipServerConnection. se não existirem mensagens na fila de espera, o método é bloqueado até que uma nova petição é recebida.
Interfaces SipServerConnectionListener É um ouvinte SIP para as petições. SipClientConnectionListener É um ouvinte SIP para as respostas.
Interfaces SipDialog Representa um dialogo SIP, pode ser recuperado a partir de um objeto SipConnection quando ele estiver disponível, o que acontece depois de uma petição de INVITE ou SUBSCRIBE. SipResfreshListener É um ouvinte para a classe SipRefreshHelper; declara um método refreshevent() que pega um refreshidpara identificar a tarefa de atualização correspondente e uma statuscodeque representa o resultado da atualização: 0 de cancelamento, 200 para o êxito, e qualquer outra coisa, em caso de erros.
Classes SipAddress Pode ser utilizada para analisar um endereço SIP, ou para construir um. SipHeader Pode ser usado para analisar encabeçados String lidos dos SIP mensagens, ou para construí-los.
Classes SipRefreshHelper Implementa uma funcionalidade que facilita o tramite de petições Refresh. SipException Exceção para erros específicos.
API JSR 180 (SIP) Os dispositivos móveis podem atuar como Clientes SIP enviando petições aos Servidores SIP e também como Servidores SIP aceitando petições dos Clientes SIP.
Rede SIP
API JSR 180 (SIP) O SIP API está integrado no CLDC sgenericconnection Framework, por exemplo, uma aplicação instancia uma nova conexão SIP chamando ao Connector.open(), o qual retornara um SipClientConnection ou um SipServerConnection, dependendo de que SIP URI (Esquema de redirecionamento) foi enviada ao Connector.open(). O SIP URI tem a seguinte sintaxe:
API JSR 180 (SIP) Onde: schemeé o esquema SIP suportado pelo sistema e pode ser: sipou sips. No protocolo sips, a conexão do servidor aceita só petições através de um transporte seguro, como está definida na norma RFC 3261. targeté a endereço do usuário, a qual pode ser algo comousername@target-host.com: portnumberou apenas um número de telefone. paramsrepresenta parâmetros adicionais; por exemplo, transport=udppara especificar o UDPcomo protocolo de transporte. Se o targethost está incluído, uma nova conexão Cliente é aberta, se ele não está, será aberta uma nova conexão Servidor.
Exemplos Conexão Cliente Conexão Servidor Se não tem numero este é atribuído pelo sistema.
JSR 120 (SMS) E JSR 205 (WMAPI 2.0) API JSR 120 (SMS) EXEMPLOS SMS API JSR 205 (MMS) EXEMPLOS MMS
JSR 120 (SMS) E JSR 205 (WMAPI 2.0) WMAsão as siglas de Wireless Message API, uma extensão das especificações do CLDCe MIDPpara o envio, a recepção e a gestação do SMS desde MIDLets. Apesar de ser uma extensão opcional, a grande maioria dos terminais a levam instalada e pronta para ser usada desde as aplicações J2ME.
Versões da especificação WMA: Versão 1.0: Especificação inicial. Descreve as funções básicasparaoenvioearecepçãodesms(jsr120). Versão 1.1: É uma ampliação da especificação 1.0, para suportar o novo modelo de seguridade do MIDP 2.0. Versão 2.0: É uma ampliação das anteriores para a gestão de mensagens multimídia(mms).(jsr 205).
API JSR 120 (SMS) Short MessageService(SMS) é um serviço disponível em telefones celulares (telemóveis) digitais que permite o envio de mensagens curtas (até 255 caracteres em GSM e 160 em CDMA) entre estes equipamentos e entre outros dispositivos de mão como palm e handheld, e até entre telefones fixos (linha-fixa).
Interfaces javax.wireless.messaging.message Define a funcionalidade genérica do todos os tipos de mensagens. Permite: Especificar o destinatário da mensagem. public void setaddress(string addr). Obtiver o emissor da mensagem. public String getaddress(). Obtiver a data de envio da mensagem. java.util.dategettimestamp().
Interfaces javax.wireless.messaging.textmessage Representa uma mensagem de texto. Herda a funcionalidade de javax.wireless.messaging.mes sage adicionando os métodos public void setpayloadtext(string data) e public String getpayloadtext() para especificar ou obtiver os dados da mensagem.
Interfaces javax.wireless.messaging.binarymessage Representa uma mensagem binário. Herda a funcionalidade de javax.wireless.messaging.mes sage adicionando os métodos public void setpayloaddata(byte[] data) e public byte[] getpayloaddata() para especificar ou obtiver os dados da mensagem.
Interfaces javax.wireless.messaging.messagelistener Ouvinte de mensagens entrantes. Esta interface é útil em javax.wireless.messaging.messa geconnection que funciona em modo servidor. javax.wireless.messaging.messageconnection Interface através da qual se realiza o envio e a recepção de mensagens.
Métodos da classe MessageConnection: newmessage(string type, String address): Cria uma nova mensagem para ser enviada, no argumento typese especifica o tipo de mensagem que se deseja enviar: MessageConnection.TEXT_MESSAGEpara mensagens de texto. MessageConnection.BINARY_MESSAGEpara mensagens binários. No argumento addressse deve especificar a endereço do destinatário da mensagem, usualmente seu número de telefono.
Métodos da classe MessageConnection: numberofsegments(message msg): Devolve o número de segmentos que são necessários para enviar a informação através da rede. receive() Devolve uma mensagem enviada à aplicação
Métodos da classe MessageConnection: send(message msg) Envia a mensagem ao destinatário setmessagelistener(messagelistener I) Chama o método notifyincomingmessage() quando recebe uma mensagem. Este método só tem sentido quando a classe funciona no modo servidor
Passos para enviar uma mensagem (SMS). Obtiver um MessageConnection no modo cliente. Criar a mensagem através da interface MessageConnection Especificar o conteúdo e o destinatário da mensagem. Usar o método sendda interface MessageConnectionpara enviar a mensagem.
Passos para receber uma mensagem (SMS) de forma assíncrona Obtiver um MessageConnectionem modo servidor Implementar a interface MessageListenernuma das classes. Associar a classe anterior ao MessageConnection Quando o método notifyincomingmessage()da interface MessageListenerseja invocado, isso significa que a mensagem foi recebido. Invocar o método receive()da interface MessageConnection num hilo independente. Fazer o tratamento da mensagem.
Passos para receber uma mensagem (SMS) de forma síncrona. Obtiver um MessageConnectionem modo servidor. Invocar o método receive()da interface MessageConnection num hilo independente. Fazer o tratamento da mensagem.
Exemplo de como especificar o modo cliente: Em ambos casos o SMS será enviado ao telefone 3005611621 da Colombia (pelo prefixo +57), mas com uma importante diferencia, num primeiro caso, o SMS será processado pela aplicação que por defeito tem instalada o telefone, enquanto, no segundo caso, o SMS será processado pela aplicação que esteja escutando nesse porto.
Exemplo de como especificar o modo servidor: Os SMS que cheguem ao porto 5555 serão atendido pelo MIDLet. Na realidade, 5555 não é um porto senão um identificador que lhe indica à plataforma JAVA que deseja tratar os SMS que cheguem com esse identificador.
API JSR 205 (MMS) Serviço de mensagens multimídia (MMS) As diferenças entre as versões 1.1 (JSR 120 -SMS) y 2.0 (JSR 205 -MMS) do WMAsão principalmente o suporte de mensagens multi-partusados pelas mensagens MMS. As interfaces adicionais da versão 2.0 são as seguintes:
Interfaces javax.wireless.messaging.messagepart Define uma parte de uma mensagem que pode ser aderida a um MultipartMessage javax.wireless.messaging.multipartmessage Representa um MultipartMessagee proporciona métodos Set e Get. javax.wireless.messaging.sizeexceededexception Exceção lançada se o MultiparMessageé maior que a memória disponível.
API JSR 205 (MMS) A mensagem MMS conte duas partes: o encabeçado e o corpo, o corpo é uma mensagem multi-part onde cada parte da mensagem tem um encabeçado e um corpo. Como os MMS são mensagens multi-part a gente pode incluir imagens ou arquivos em cada MMS.
Exemplo Criação Message Connection e Header(encabeçado) Este MMS é enviado a um numero telefônico e a um endereço E-Mail.
Exemplo Aqui é aderida a mensagem de texto ao MMS: O construtor MessageParttomará todos os parâmetros do encabeçado e a mensagem contido como um byte array.
Exemplo Aqui é aderida uma imagem ao MMS: Quando a mensagem é criada e as partes da mensagem são aderidas à mensagem a gente pode enviar o MMS:
PERGUNTAS OqueéoprotocoloSIP? OquesãoosagentedeusuárionoprotocoloSIP. Como está composto o URI do protocolo SIP. QualadiferenciaentreAPIJSR120eAPIJSR205. Quais os passos para receber uma mensagem de forma assíncrona.