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.Map;
- import javax.servlet.ServletException;
- import javax.servlet.sip.SipServlet;
- import javax.servlet.sip.SipServletRequest;
- import javax.servlet.sip.SipServletResponse;
- /**
- */
- public class Redirect extends SipServlet {
- /**
- * Atributos
- */
- private static final long serialVersionUID = 1L;
- static private Map<String, String> Binding;
- static private ArrayList<String> colaboradores;
- /**
- * Inicializa o ficheiro Redirect
- */
- public Redirect() {
- super();
- Binding = new HashMap<String,String>();
- colaboradores = new ArrayList<String>();
- }
- /**
- * 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"));
- SipServletResponse response; //Inicia o response
- if(aorT.contains("acme.pt")){ //Contém domínio @acme.pt
- if(request.getHeader("Contact").contains("expires=0")) { //Caso seja para De-registar
- boolean presente = UserRegistado(contact); //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(aorT);
- } else { //De-registo sem sucesso
- response= request.createResponse(404);
- }
- }
- else { // Registo com sucesso: encontra-se no domínio e expires !=0
- Binding.put(aorT, aorF);
- response = request.createResponse(200);
- }
- }
- 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 contact){
- boolean encontrado = false;
- Iterator <Map.Entry<String,String>> iterator = Binding.entrySet().iterator();
- while(iterator.hasNext()) {
- Map.Entry<String, String> aux = (Map.Entry<String,String>)iterator.next();
- if(aux.getValue().contains(contact)) {
- encontrado=true;
- break;
- }
- }
- return encontrado;
- }
- /**
- * Verifica se está adicionado à lista de colaboradores
- * @param user
- * @return boolean
- */
- public Boolean ColaboradorRegistado(String contact){
- boolean encontrado = false;
- for(String n: colaboradores) {
- System.out.println("\n"+"\n"+"\n"+"\n"+ n +"\n"+"\n"+"\n"+"\n");
- if(n.equals(contact)) {
- 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 {
- // 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 {
- SipServletResponse 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 doResponse(SipServletResponse response)
- throws ServletException,IOException {
- log("SimpleProxy: doResponse: invalidating session");
- super.doResponse(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
- if(!aorT.equalsIgnoreCase("sip:colaborador@acme.pt") ){ //Não é uma mensagem para um colaborador
- response = request.createResponse(404);
- response.send();
- }else { //Se for uma mensagem para o colaborador
- if(!aorF.contains("gestor@acme.pt") ){ //Se não for uma mensagem do gestor
- response = request.createResponse(401);
- response.send();
- }else { //Se for uma mensagem do gestor
- String [] message= request.getContent().toString().split(" "); //Obtém natureza da mensagem
- if(message[1].contains("colaborador")) { //Mensagem com efeito a colaboradores
- if(message[0].contains("REMOVE")) { //Se pretende remover colaborador
- processaRemove(request, aorT);
- }
- if(message[0].contains("ADD")) { //Se pretende adicionar colaborador
- processaAdd(request, aorT);
- }
- }
- }
- }
- }
- /**
- * Mensagem para Adicionar Colaborador
- */
- public void processaAdd(SipServletRequest request, String contact)throws IOException{
- SipServletResponse response; //Respostas
- if(UserRegistado(contact)){ //Está registado no sistema
- if(ColaboradorRegistado(contact)){ //Está na lista de Colaboradores
- response = request.createResponse(404);
- response.send(); //Erro porque já está registado
- }else{ //Não está na lista de Colaboradores
- colaboradores.add(contact); //Adiciona o contacto à lista
- response= request.createResponse(200);
- response.send();
- }
- }else{ //Não está registado no sistema
- response = request.createResponse(401); //Erro porque não está registado
- response.send();
- }
- }
- /**
- * Mensagem para Remover Colaborador
- */
- public void processaRemove(SipServletRequest request, String contact)throws IOException{
- SipServletResponse response; //Respostas
- if(UserRegistado(contact)){ //Está registado no sistema
- if(ColaboradorRegistado(contact)){ //Está na lista de Colaboradores
- colaboradores.remove(contact); //Remove o contacto do colaborador da Lista
- response= request.createResponse(200);
- response.send();
- }
- else{ //Não está nos contactos
- response = request.createResponse(404);
- response.send();
- }
- }else{ //Não está registado no sistema
- response = request.createResponse(401); //Erro porque não está registado
- response.send();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement