Advertisement
Guest User

IGRS FINAL 1º SPRINT

a guest
Nov 19th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.49 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement