Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * $Id: EchoServlet.java,v 1.5 2003/06/22 12:32:15 fukuda Exp $
- */
- package org.mobicents.servlet.sip.example;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.sip.Proxy;
- import javax.servlet.sip.SipFactory;
- import javax.servlet.sip.SipServlet;
- import javax.servlet.sip.SipServletRequest;
- import javax.servlet.sip.SipServletResponse;
- import javax.servlet.sip.URI;
- /**
- */
- public class Redirect extends SipServlet {
- /**
- * Atributos
- */
- private static final long serialVersionUID = 1L;
- static private Map<String, String> Binding;
- static private ArrayList<String> colaboradores;
- private SipFactory sf;
- static private Map<String, SipServletRequest> invites;
- /**
- * Inicializa o ficheiro Redirect
- */
- public Redirect() {
- super();
- Binding = new HashMap<String,String>();
- colaboradores = new ArrayList<String>();
- invites = new HashMap<String,SipServletRequest>();
- }
- public void init() throws ServletException {
- ServletContext sc = getServletContext();
- sf = (SipFactory) sc.getAttribute(SIP_FACTORY);
- }
- /**
- * Acts as a registrar and location service for REGISTER messages
- * @param request The SIP message received by the AS
- */
- protected void doRegister(SipServletRequest request) throws ServletException, IOException {
- String aorT = getSIPuri(request.getHeader("To")); //Obtém informações de Header
- String aorF = getSIPuri(request.getHeader("From"));
- String contact = getSIPuriPort(request.getHeader("Contact"));
- System.out.println("\n"+"\n"+"\n"+ "Entrou um utilizador com os seguintes dados:" + "\n"
- +"From:" + aorF +"\n"
- +"Contact: " + contact+"\n"+"\n"+"\n");
- SipServletResponse response; //Inicia o response
- if(aorT.contains("acme.pt")){ //Contém domínio @acme.pt
- System.out.println("Utilizador aprovado no domínio: acme.pt");
- if(request.getHeader("Contact").contains("expires=0")) { //Caso seja para De-registar
- boolean presente = UserRegistado(aorF); //Verificar existência de contacto no Hashmap
- if(presente) { //De-registo com sucesso: está no domínio e expire=0
- response= request.createResponse(200);
- Binding.remove(aorF);
- System.out.println("De-registo com sucesso");
- } else { //De-registo sem sucesso
- response= request.createResponse(404);
- }
- }
- else { // Registo com sucesso: encontra-se no domínio e expires !=0
- Binding.put(aorT, contact);
- response = request.createResponse(200);
- System.out.println("Registo com sucesso");
- }
- }
- else { //Registo sem sucesso: não se encontra no domínio
- response= request.createResponse(401);
- }
- response.send(); //Envia a resposta final
- // Some logs to show the content of the Registrar database.
- log("REGISTER:***");
- System.out.println("\n" + "--------Lista de Users--------" + "\n");
- Iterator<Map.Entry<String,String>> it = Binding.entrySet().iterator();
- while (it.hasNext()) {
- Map.Entry<String,String> pairs = (Map.Entry<String,String>)it.next();
- System.out.println(pairs.getKey() + " = " + pairs.getValue());
- }
- log("REGISTER:***");
- System.out.println("\n" + "--------Fim da Lista de Users--------" + "\n");
- }
- /**
- * Verifica se está registado no sistema
- * @param user
- * @return boolean
- */
- public Boolean UserRegistado(String aor){
- boolean encontrado = false;
- Iterator <Map.Entry<String,String>> iterator = Binding.entrySet().iterator();
- System.out.println("\n"+"\n"+"\n"+"\n"+ "Foi feita a verificação de um Utilizador" +"\n"+"\n"+"\n"+"\n");
- while(iterator.hasNext()) {
- Map.Entry<String, String> aux = (Map.Entry<String,String>)iterator.next();
- if(aux.getKey().contains(aor)) {
- encontrado=true;
- break;
- }
- }
- return encontrado;
- }
- /**
- * Verifica se está adicionado à lista de colaboradores
- * @param user
- * @return boolean
- */
- public Boolean ColaboradorRegistado(String aor){
- boolean encontrado = false;
- System.out.println("\n"+"\n"+"\n"+"\n"+ "Foi feita a verificação de um Colaborador" +"\n"+"\n"+"\n"+"\n");
- for(String Address: colaboradores) {
- System.out.println("Endereço do Utilizador: " + Address);
- if(Address.equals(aor)) {
- encontrado=true;
- break;
- }
- }
- return encontrado;
- }
- /**
- * Sends SIP replies to INVITE messages
- * - 300 if registred
- * - 404 if not registred
- * @param request The SIP message received by the AS
- */
- protected void doInvite(SipServletRequest request)
- throws ServletException, IOException {
- String aorT = getSIPuri(request.getHeader("To")); //Obtém as informações da chamada
- String aorF = getSIPuri(request.getHeader("From"));
- SipServletResponse response;
- System.out.println("\n" + "\n" + "\n"+ "Chegou uma chamada ao Sistema" + "\n"
- + "From: " + aorF + "\n"
- + "To: " + aorT + "\n");
- if(aorT.contains("acme.pt")){ //Verifica que é do dominio acme.pt
- System.out.println("Utilizador foi verificado no domínio");
- if(UserRegistado(aorF)){ //Verifica se o utilizador está registado
- System.out.println("Utilizador encontra-se registado");
- if(aorT.equalsIgnoreCase("sip:colab@acme.pt")){ //Verifica se é um serviço do sistema
- System.out.println("Utilizador quer usar o serviço CoLab");
- if(colaboradores.isEmpty()){ //Não existem colaboradores selecionados
- System.out.println("Não existem colaboradores selecionados");
- Proxy proxy = request.getProxy();
- List<URI> listaURIs = new ArrayList<>();
- listaURIs.add(sf.createURI("sip:announcement@127.0.0.1:5090"));
- proxy.proxyTo(listaURIs);
- proxy.createProxyBranches(listaURIs);
- }else{ //Envia call para todos os utilizadores
- System.out.println("\n" + "\n" + "\n" +"Mensagem enviada para os colaboradores selecionados:");
- invites.put(aorF, request);
- System.out.println("\n" + "\n" + "\n" +"aorFrom: "+ aorF+ " Request: "+request);
- Proxy proxy = request.getProxy();
- proxy.setRecordRoute(true);
- proxy.setSupervised(true);
- proxy.setProxyTimeout(2000);
- proxy.setNoCancel(false);
- List<URI> listaURIs = new ArrayList<>();
- for(int i = 0; i < colaboradores.size(); i++){
- listaURIs.add(sf.createURI(Binding.get("sip:"+colaboradores.get(i).toString())));
- System.out.println(Binding.get("sip:"+colaboradores.get(i).toString()));
- }
- proxy.proxyTo(listaURIs);
- proxy.createProxyBranches(listaURIs);
- }
- }else{ //Sem serviço ativo, chamada normal???
- System.out.println("\n" + "\n" + "\n" + "Utilizador quer apenas uma chamada normal");
- Proxy proxy = request.getProxy();
- proxy.setRecordRoute(true);
- proxy.setSupervised(true);
- proxy.setProxyTimeout(2000);
- proxy.proxyTo(sf.createURI(Binding.get(aorT)));
- }
- }else{ //User não está registado
- response = request.createResponse(404); //Erro porque não está registado
- response.send();
- }
- }else{ //Não pertence ao dominio acme.pt
- response = request.createResponse(401); //Erro porque não está registado
- response.send();
- }
- // Some logs to show the content of the Registrar database.
- // log("INVITE:***");
- // Iterator<Map.Entry<String,String>> it = Binding.entrySet().iterator();
- // while (it.hasNext()) {
- // Map.Entry<String,String> pairs = (Map.Entry<String,String>)it.next();
- // System.out.println(pairs.getKey() + " = " + pairs.getValue());
- // }
- // log("INVITE:***");
- //
- // String aor = getSIPuri(request.getHeader("To")); // Get the To AoR
- // if (!Binding.containsKey(aor)) { // To AoR not in the database, reply 404
- // //SipServletResponse response;
- // response = request.createResponse(404);
- // } else {
- // response = request.createResponse(300);
- // // Get the To AoR contact from the database and add it to the response
- // response.setHeader("Contact",Binding.get(aor));
- // response.send();
- // }
- }
- // Two dummy functions that just do super.x
- /**
- * @param response The SIP message received by the AS
- */
- protected void doErrorResponse(SipServletResponse response)
- throws ServletException,IOException {
- String aorF = getSIPuri(response.getHeader("From")); //Obtém informações de Header
- System.out.println("\n" + "\n" + "\n" + "ENTREI 1");
- SipServletRequest invite = sf.createRequest( response.getApplicationSession(), "INVITE", "sip:announcement@127.0.0.1:5090", Binding.get(aorF));
- invite.send();
- //
- // Proxy proxy = response.getProxy();
- // List<URI> listaURIs = new ArrayList<>();
- // listaURIs.add(sf.createURI("sip:announcement@127.0.0.1:5090"));
- //
- // System.out.println("\n" + "\n" + "\n" + "ENTREI 2");
- //
- //
- // proxy.setSupervised(true);
- // proxy.setProxyTimeout(2000);
- // proxy.setNoCancel(true);
- // proxy.proxyTo(listaURIs);
- // proxy.createProxyBranches(listaURIs);
- // proxy.startProxy();
- log("SimpleProxy: doResponse: invalidating session");
- super.doErrorResponse(response);
- }
- protected void doBye(SipServletRequest request)
- throws ServletException, IOException {
- log("SimpleProxy: doBye: invalidate session when responses is received.");
- super.doBye(request);
- }
- /**
- * Auxiliary function for extracting SPI URIs
- * @param uri A URI with optional extra attributes
- * @return SIP URI
- */
- protected String getSIPuri(String uri) {
- String f = uri.substring(uri.indexOf("<")+1, uri.indexOf(">"));
- int indexCollon = f.indexOf(":", f.indexOf("@"));
- if (indexCollon != -1) {
- f = f.substring(0,indexCollon);
- }
- return f;
- }
- /**
- * Auxiliary function for extracting SPI URIs
- * @param uri A URI with optional extra attributes
- * @return SIP URI and port
- */
- protected String getSIPuriPort(String uri) {
- String f = uri.substring(uri.indexOf("<")+1, uri.indexOf(">"));
- return f;
- }
- protected void doMessage(SipServletRequest request) throws IOException {
- String aorT = getSIPuri(request.getHeader("To")); //Obtém as informações de cabeçalho
- String aorF = getSIPuri(request.getHeader("From"));
- SipServletResponse response; //Respostas
- System.out.println("\n"+"\n"+"\n"+ "A mensagem chegou ao servidor, com sucesso, com a info:" + "\n"
- +"From:" + aorF +"\n"
- +"To:" + aorT + "\n"
- +"Body: " + request.getContent().toString() +"\n"+"\n"+"\n");
- if(!aorT.equalsIgnoreCase("sip:colab@acme.pt") ){ //Não é uma mensagem para o serviço CoLab
- System.out.println("Não é uma mensagem para o serviço CoLab");
- response = request.createResponse(404);
- response.send();
- }else { //É uma mensagem para o serviço CoLab
- System.out.println("É uma mensagem para o serviço CoLab");
- if(!aorF.contains("gestor@acme.pt") ){ //Mensagem sem Autoridade para o Serviço
- System.out.println("Mensagem sem Autoridade para o Serviço");
- response = request.createResponse(401);
- response.send();
- }else { //Mensagem de Autoridade do Gestor
- if(UserRegistado(aorF)){
- System.out.println("Mensagem de Autoridade do Gestor comprovada!");
- String [] message= request.getContent().toString().split(" "); //Obtém natureza da mensagem
- System.out.println("Utilizador: " + message[1] + "\n");
- if(message[1].contains("colaborador")) { //Mensagem com formato certo
- if(message[0].contains("REMOVE")) { //Se pretende remover colaborador
- System.out.println("Mensagem enviada para processamento de remover" + "\n");
- processaRemove(request, message[1]);
- }
- if(message[0].contains("ADD")) { //Se pretende adicionar colaborador
- System.out.println("Mensagem enviada para processamento de adicionar" + "\n");
- processaAdd(request, message[1]);
- }
- }
- }else{
- System.out.println("Gestor não está registado no sistema" + "\n");
- response = request.createResponse(401); //Erro porque não está registado
- response.send();
- }
- }
- }
- }
- /**
- * Mensagem para Adicionar Colaborador
- */
- public void processaAdd(SipServletRequest request, String aor)throws IOException{
- SipServletResponse response; //Respostas
- System.out.println("\n"+"\n"+"\n"+ "Mensagem chegou ao processamento de adição" + "\n");
- if(UserRegistado(aor)){ //Está registado no sistema
- System.out.println("Colaborador encontra-se registado" + "\n");
- if(ColaboradorRegistado(aor)){ //Está na lista de Colaboradores
- System.out.println("Colaborador encontra-se na lista de colaboradores" + "\n");
- response = request.createResponse(404);
- response.send(); //Erro porque já está registado
- }else{ //Não está na lista de Colaboradores
- System.out.println("Colaborador foi adicionado com sucesso" + "\n");
- colaboradores.add(aor); //Adiciona o contacto à lista
- response= request.createResponse(200);
- response.send();
- }
- }else{ //Não está registado no sistema
- System.out.println("Colaborador não está registado no sistema" + "\n");
- response = request.createResponse(401); //Erro porque não está registado
- response.send();
- }
- }
- /**
- * Mensagem para Remover Colaborador
- */
- public void processaRemove(SipServletRequest request, String aor)throws IOException{
- SipServletResponse response; //Respostas
- System.out.println("\n"+"\n"+"\n"+ "Mensagem chegou ao processamento de remoção" + "\n");
- if(UserRegistado(aor)){ //Está registado no sistema
- System.out.println("Colaborador encontra-se registado" + "\n");
- if(ColaboradorRegistado(aor)){ //Está na lista de Colaboradores
- System.out.println("Colaborador foi removido com sucesso" + "\n");
- colaboradores.remove(aor); //Remove o contacto do colaborador da Lista
- response= request.createResponse(200);
- response.send();
- }
- else{ //Não está na lista de Colaboradores
- System.out.println("Colaborador não encontra-se na lista de colaboradores" + "\n");
- response = request.createResponse(404);
- response.send();
- }
- }else{ //Não está registado no sistema
- System.out.println("Colaborador não está registado no sistema" + "\n");
- response = request.createResponse(401); //Erro porque não está registado
- response.send();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement