SHARE
TWEET

IGRS FINAL 1º SPRINT

a guest Nov 19th, 2019 91 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * $Id: EchoServlet.java,v 1.5 2003/06/22 12:32:15 fukuda Exp $
  3.  */
  4. package org.mobicents.servlet.sip.example;
  5.  
  6. import java.io.IOException;
  7. import java.util.ArrayList;
  8. import java.util.HashMap;
  9. import java.util.Iterator;
  10. import java.util.Map;
  11.  
  12. import javax.servlet.ServletException;
  13. import javax.servlet.sip.SipServlet;
  14. import javax.servlet.sip.SipServletRequest;
  15. import javax.servlet.sip.SipServletResponse;
  16.  
  17. /**
  18.  */
  19. public class Redirect extends SipServlet {
  20.  
  21.     /**
  22.      * Atributos
  23.      */
  24.     private static final long serialVersionUID = 1L;
  25.     static private Map<String, String> Binding;
  26.     static private ArrayList<String> colaboradores;
  27.  
  28.     /**
  29.      * Inicializa o ficheiro Redirect
  30.      */
  31.     public Redirect() {        
  32.         super();
  33.         Binding = new HashMap<String,String>();
  34.         colaboradores = new ArrayList<String>();
  35.     }
  36.  
  37.     /**
  38.      * Acts as a registrar and location service for REGISTER messages
  39.      * @param  request The SIP message received by the AS
  40.      */
  41.     protected void doRegister(SipServletRequest request) throws ServletException, IOException {
  42.         String aorT = getSIPuri(request.getHeader("To"));               //Obtém informações de Header
  43.         String aorF = getSIPuri(request.getHeader("From"));
  44.         String contact = getSIPuriPort(request.getHeader("Contact"));
  45.         SipServletResponse response;                                    //Inicia o response
  46.         if(aorT.contains("acme.pt")){                                   //Contém domínio @acme.pt
  47.             if(request.getHeader("Contact").contains("expires=0")) {    //Caso seja para De-registar
  48.                 boolean presente = UserRegistado(contact);              //Verificar existência de contacto no Hashmap
  49.                 if(presente) {                                          //De-registo com sucesso: está no domínio e expire=0
  50.                     response= request.createResponse(200);
  51.                     Binding.remove(aorT);
  52.                 }  else {                                               //De-registo sem sucesso
  53.                     response= request.createResponse(404);
  54.                 }
  55.             }
  56.             else {                                                      // Registo com sucesso: encontra-se no domínio e expires !=0              
  57.                 Binding.put(aorT, aorF);
  58.                 response = request.createResponse(200);
  59.             }
  60.         }
  61.         else {                                                          //Registo sem sucesso: não se encontra no domínio                        
  62.             response= request.createResponse(401);     
  63.         }
  64.         response.send();                                                //Envia a resposta final
  65.  
  66.         // Some logs to show the content of the Registrar database.
  67.         log("REGISTER:***");
  68.         System.out.println("\n" + "--------Lista de Users--------" + "\n");
  69.         Iterator<Map.Entry<String,String>> it = Binding.entrySet().iterator();
  70.         while (it.hasNext()) {
  71.             Map.Entry<String,String> pairs = (Map.Entry<String,String>)it.next();
  72.             System.out.println(pairs.getKey() + " = " + pairs.getValue());
  73.         }
  74.         log("REGISTER:***");
  75.         System.out.println("\n" + "--------Fim da Lista de Users--------" + "\n");
  76.  
  77.     }
  78.  
  79.     /**
  80.      * Verifica se está registado no sistema
  81.      * @param user
  82.      * @return boolean
  83.      */
  84.     public Boolean UserRegistado(String contact){
  85.         boolean encontrado = false;
  86.         Iterator <Map.Entry<String,String>>  iterator = Binding.entrySet().iterator();
  87.         while(iterator.hasNext()) {    
  88.             Map.Entry<String, String> aux = (Map.Entry<String,String>)iterator.next();
  89.             if(aux.getValue().contains(contact))  {
  90.                 encontrado=true;
  91.                 break;
  92.             }
  93.         }
  94.         return encontrado;
  95.     }
  96.     /**
  97.      * Verifica se está adicionado à lista de colaboradores
  98.      * @param user
  99.      * @return boolean
  100.      */
  101.     public Boolean ColaboradorRegistado(String contact){
  102.         boolean encontrado = false;
  103.         for(String n: colaboradores) {
  104.             System.out.println("\n"+"\n"+"\n"+"\n"+ n +"\n"+"\n"+"\n"+"\n");
  105.             if(n.equals(contact))  {
  106.                 encontrado=true;
  107.                 break;
  108.             }
  109.         }
  110.         return encontrado;
  111.     }
  112.  
  113.  
  114.     /**
  115.      * Sends SIP replies to INVITE messages
  116.      * - 300 if registred
  117.      * - 404 if not registred
  118.      * @param  request The SIP message received by the AS
  119.      */
  120.     protected void doInvite(SipServletRequest request)
  121.             throws ServletException, IOException {
  122.  
  123.         // Some logs to show the content of the Registrar database.
  124.         log("INVITE:***");
  125.         Iterator<Map.Entry<String,String>> it = Binding.entrySet().iterator();
  126.         while (it.hasNext()) {
  127.             Map.Entry<String,String> pairs = (Map.Entry<String,String>)it.next();
  128.             System.out.println(pairs.getKey() + " = " + pairs.getValue());
  129.         }
  130.         log("INVITE:***");
  131.  
  132.         String aor = getSIPuri(request.getHeader("To")); // Get the To AoR
  133.         if (!Binding.containsKey(aor)) { // To AoR not in the database, reply 404
  134.             SipServletResponse response;
  135.             response = request.createResponse(404);
  136.         } else {
  137.             SipServletResponse response = request.createResponse(300);
  138.             // Get the To AoR contact from the database and add it to the response
  139.             response.setHeader("Contact",Binding.get(aor));
  140.             response.send();
  141.         }
  142.     }
  143.  
  144.     // Two dummy functions that just do super.x
  145.     /**
  146.      * @param  response The SIP message received by the AS
  147.      */
  148.     protected void doResponse(SipServletResponse response)
  149.             throws ServletException,IOException {
  150.         log("SimpleProxy: doResponse: invalidating session");
  151.         super.doResponse(response);
  152.     }
  153.  
  154.     protected void doBye(SipServletRequest request)
  155.             throws ServletException, IOException {
  156.         log("SimpleProxy: doBye: invalidate session when responses is received.");
  157.         super.doBye(request);
  158.     }
  159.  
  160.     /**
  161.      * Auxiliary function for extracting SPI URIs
  162.      * @param  uri A URI with optional extra attributes
  163.      * @return SIP URI
  164.      */
  165.     protected String getSIPuri(String uri) {
  166.         String f = uri.substring(uri.indexOf("<")+1, uri.indexOf(">"));
  167.         int indexCollon = f.indexOf(":", f.indexOf("@"));
  168.         if (indexCollon != -1) {
  169.             f = f.substring(0,indexCollon);
  170.         }
  171.         return f;
  172.     }
  173.  
  174.     /**
  175.      * Auxiliary function for extracting SPI URIs
  176.      * @param  uri A URI with optional extra attributes
  177.      * @return SIP URI and port
  178.      */
  179.     protected String getSIPuriPort(String uri) {
  180.         String f = uri.substring(uri.indexOf("<")+1, uri.indexOf(">"));
  181.         return f;
  182.     }
  183.  
  184.     protected void doMessage(SipServletRequest request) throws IOException {
  185.         String aorT = getSIPuri(request.getHeader("To"));                       //Obtém as informações de cabeçalho
  186.         String aorF = getSIPuri(request.getHeader("From"));
  187.         SipServletResponse response;                                            //Respostas
  188.         if(!aorT.equalsIgnoreCase("sip:colaborador@acme.pt") ){                 //Não é uma mensagem para um colaborador
  189.             response = request.createResponse(404);
  190.             response.send();
  191.         }else {                                                                 //Se for uma mensagem para o colaborador
  192.             if(!aorF.contains("gestor@acme.pt") ){                              //Se não for uma mensagem do gestor
  193.                 response = request.createResponse(401);
  194.                 response.send();
  195.             }else {                                                             //Se for uma mensagem do gestor
  196.                 String [] message= request.getContent().toString().split(" ");  //Obtém natureza da mensagem
  197.                 if(message[1].contains("colaborador")) {                        //Mensagem com efeito a colaboradores
  198.                     if(message[0].contains("REMOVE")) {                         //Se pretende remover colaborador  
  199.                         processaRemove(request, aorT);
  200.                     }  
  201.                     if(message[0].contains("ADD")) {                            //Se pretende adicionar colaborador
  202.                         processaAdd(request, aorT);
  203.                     }  
  204.                 }
  205.             }
  206.         }
  207.     }
  208.  
  209.     /**
  210.      * Mensagem para Adicionar Colaborador
  211.      */
  212.     public void processaAdd(SipServletRequest request, String contact)throws IOException{  
  213.         SipServletResponse response;                    //Respostas
  214.         if(UserRegistado(contact)){                     //Está registado no sistema
  215.             if(ColaboradorRegistado(contact)){          //Está na lista de Colaboradores
  216.                 response = request.createResponse(404);
  217.                 response.send();                        //Erro porque já está registado
  218.             }else{                                      //Não está na lista de Colaboradores
  219.                 colaboradores.add(contact);             //Adiciona o contacto à lista
  220.                 response= request.createResponse(200);
  221.                 response.send();
  222.             }
  223.         }else{                                          //Não está registado no sistema
  224.             response = request.createResponse(401);     //Erro porque não está registado
  225.             response.send();   
  226.         }
  227.     }
  228.     /**
  229.      * Mensagem para Remover Colaborador
  230.      */
  231.     public void processaRemove(SipServletRequest request, String contact)throws IOException{
  232.         SipServletResponse response;                            //Respostas
  233.         if(UserRegistado(contact)){                             //Está registado no sistema
  234.             if(ColaboradorRegistado(contact)){                  //Está na lista de Colaboradores
  235.                 colaboradores.remove(contact);                  //Remove o contacto do colaborador da Lista
  236.                 response= request.createResponse(200);
  237.                 response.send();                   
  238.             }
  239.             else{                                               //Não está nos contactos
  240.                 response = request.createResponse(404);
  241.                 response.send();   
  242.             }
  243.         }else{                                                  //Não está registado no sistema
  244.             response = request.createResponse(401);             //Erro porque não está registado
  245.             response.send();
  246.         }  
  247.     }
  248.  
  249.  
  250.  
  251.  
  252. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top