Advertisement
Guest User

Código atual

a guest
Dec 8th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.65 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.List;
  11. import java.util.Map;
  12. import java.util.Map.Entry;
  13.  
  14. import javax.servlet.ServletContext;
  15. import javax.servlet.ServletException;
  16. import javax.servlet.sip.Proxy;
  17. import javax.servlet.sip.SipFactory;
  18. import javax.servlet.sip.SipServlet;
  19. import javax.servlet.sip.SipServletRequest;
  20. import javax.servlet.sip.SipServletResponse;
  21. import javax.servlet.sip.URI;
  22.  
  23. /**
  24. */
  25. public class Redirect extends SipServlet {
  26.  
  27. /**
  28. * Atributos
  29. */
  30. private static final long serialVersionUID = 1L;
  31. static private Map<String, String> Binding;
  32. static private ArrayList<String> colaboradores;
  33. private SipFactory sf;
  34. static private Map<String, SipServletRequest> invites;
  35.  
  36. /**
  37. * Inicializa o ficheiro Redirect
  38. */
  39. public Redirect() {
  40. super();
  41. Binding = new HashMap<String,String>();
  42. colaboradores = new ArrayList<String>();
  43. invites = new HashMap<String,SipServletRequest>();
  44. }
  45.  
  46.  
  47. public void init() throws ServletException {
  48. ServletContext sc = getServletContext();
  49. sf = (SipFactory) sc.getAttribute(SIP_FACTORY);
  50. }
  51. /**
  52. * Acts as a registrar and location service for REGISTER messages
  53. * @param request The SIP message received by the AS
  54. */
  55. protected void doRegister(SipServletRequest request) throws ServletException, IOException {
  56. String aorT = getSIPuri(request.getHeader("To")); //Obtém informações de Header
  57. String aorF = getSIPuri(request.getHeader("From"));
  58. String contact = getSIPuriPort(request.getHeader("Contact"));
  59. System.out.println("\n"+"\n"+"\n"+ "Entrou um utilizador com os seguintes dados:" + "\n"
  60. +"From:" + aorF +"\n"
  61. +"Contact: " + contact+"\n"+"\n"+"\n");
  62. SipServletResponse response; //Inicia o response
  63. if(aorT.contains("acme.pt")){ //Contém domínio @acme.pt
  64. System.out.println("Utilizador aprovado no domínio: acme.pt");
  65. if(request.getHeader("Contact").contains("expires=0")) { //Caso seja para De-registar
  66. boolean presente = UserRegistado(aorF); //Verificar existência de contacto no Hashmap
  67. if(presente) { //De-registo com sucesso: está no domínio e expire=0
  68. response= request.createResponse(200);
  69. Binding.remove(aorF);
  70. System.out.println("De-registo com sucesso");
  71. } else { //De-registo sem sucesso
  72. response= request.createResponse(404);
  73. }
  74. }
  75. else { // Registo com sucesso: encontra-se no domínio e expires !=0
  76. Binding.put(aorT, contact);
  77. response = request.createResponse(200);
  78. System.out.println("Registo com sucesso");
  79. }
  80. }
  81. else { //Registo sem sucesso: não se encontra no domínio
  82. response= request.createResponse(401);
  83. }
  84. response.send(); //Envia a resposta final
  85.  
  86. // Some logs to show the content of the Registrar database.
  87. log("REGISTER:***");
  88. System.out.println("\n" + "--------Lista de Users--------" + "\n");
  89. Iterator<Map.Entry<String,String>> it = Binding.entrySet().iterator();
  90. while (it.hasNext()) {
  91. Map.Entry<String,String> pairs = (Map.Entry<String,String>)it.next();
  92. System.out.println(pairs.getKey() + " = " + pairs.getValue());
  93. }
  94. log("REGISTER:***");
  95. System.out.println("\n" + "--------Fim da Lista de Users--------" + "\n");
  96.  
  97. }
  98.  
  99. /**
  100. * Verifica se está registado no sistema
  101. * @param user
  102. * @return boolean
  103. */
  104. public Boolean UserRegistado(String aor){
  105. boolean encontrado = false;
  106. Iterator <Map.Entry<String,String>> iterator = Binding.entrySet().iterator();
  107. System.out.println("\n"+"\n"+"\n"+"\n"+ "Foi feita a verificação de um Utilizador" +"\n"+"\n"+"\n"+"\n");
  108. while(iterator.hasNext()) {
  109. Map.Entry<String, String> aux = (Map.Entry<String,String>)iterator.next();
  110. if(aux.getKey().contains(aor)) {
  111. encontrado=true;
  112. break;
  113. }
  114. }
  115. return encontrado;
  116. }
  117. /**
  118. * Verifica se está adicionado à lista de colaboradores
  119. * @param user
  120. * @return boolean
  121. */
  122. public Boolean ColaboradorRegistado(String aor){
  123. boolean encontrado = false;
  124. System.out.println("\n"+"\n"+"\n"+"\n"+ "Foi feita a verificação de um Colaborador" +"\n"+"\n"+"\n"+"\n");
  125. for(String Address: colaboradores) {
  126. System.out.println("Endereço do Utilizador: " + Address);
  127. if(Address.equals(aor)) {
  128. encontrado=true;
  129. break;
  130. }
  131. }
  132. return encontrado;
  133. }
  134.  
  135.  
  136. /**
  137. * Sends SIP replies to INVITE messages
  138. * - 300 if registred
  139. * - 404 if not registred
  140. * @param request The SIP message received by the AS
  141. */
  142. protected void doInvite(SipServletRequest request)
  143. throws ServletException, IOException {
  144. String aorT = getSIPuri(request.getHeader("To")); //Obtém as informações da chamada
  145. String aorF = getSIPuri(request.getHeader("From"));
  146. SipServletResponse response;
  147. System.out.println("\n" + "\n" + "\n"+ "Chegou uma chamada ao Sistema" + "\n"
  148. + "From: " + aorF + "\n"
  149. + "To: " + aorT + "\n");
  150. if(aorT.contains("acme.pt")){ //Verifica que é do dominio acme.pt
  151. System.out.println("Utilizador foi verificado no domínio");
  152. if(UserRegistado(aorF)){ //Verifica se o utilizador está registado
  153. System.out.println("Utilizador encontra-se registado");
  154. if(aorT.equalsIgnoreCase("sip:colab@acme.pt")){ //Verifica se é um serviço do sistema
  155. System.out.println("Utilizador quer usar o serviço CoLab");
  156. if(colaboradores.isEmpty()){ //Não existem colaboradores selecionados
  157. System.out.println("Não existem colaboradores selecionados");
  158. Proxy proxy = request.getProxy();
  159. List<URI> listaURIs = new ArrayList<>();
  160. listaURIs.add(sf.createURI("sip:announcement@127.0.0.1:5090"));
  161.  
  162. proxy.proxyTo(listaURIs);
  163. proxy.createProxyBranches(listaURIs);
  164. }else{ //Envia call para todos os utilizadores
  165. System.out.println("\n" + "\n" + "\n" +"Mensagem enviada para os colaboradores selecionados:");
  166. invites.put(aorF, request);
  167. System.out.println("\n" + "\n" + "\n" +"aorFrom: "+ aorF+ " Request: "+request);
  168. Proxy proxy = request.getProxy();
  169. proxy.setRecordRoute(true);
  170. proxy.setSupervised(true);
  171. proxy.setProxyTimeout(2000);
  172. proxy.setNoCancel(false);
  173.  
  174. List<URI> listaURIs = new ArrayList<>();
  175. for(int i = 0; i < colaboradores.size(); i++){
  176. listaURIs.add(sf.createURI(Binding.get("sip:"+colaboradores.get(i).toString())));
  177. System.out.println(Binding.get("sip:"+colaboradores.get(i).toString()));
  178. }
  179. proxy.proxyTo(listaURIs);
  180. proxy.createProxyBranches(listaURIs);
  181. }
  182. }else{ //Sem serviço ativo, chamada normal???
  183. System.out.println("\n" + "\n" + "\n" + "Utilizador quer apenas uma chamada normal");
  184.  
  185. Proxy proxy = request.getProxy();
  186. proxy.setRecordRoute(true);
  187. proxy.setSupervised(true);
  188. proxy.setProxyTimeout(2000);
  189. proxy.proxyTo(sf.createURI(Binding.get(aorT)));
  190. }
  191. }else{ //User não está registado
  192. response = request.createResponse(404); //Erro porque não está registado
  193. response.send();
  194. }
  195. }else{ //Não pertence ao dominio acme.pt
  196. response = request.createResponse(401); //Erro porque não está registado
  197. response.send();
  198. }
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205. // Some logs to show the content of the Registrar database.
  206. // log("INVITE:***");
  207. // Iterator<Map.Entry<String,String>> it = Binding.entrySet().iterator();
  208. // while (it.hasNext()) {
  209. // Map.Entry<String,String> pairs = (Map.Entry<String,String>)it.next();
  210. // System.out.println(pairs.getKey() + " = " + pairs.getValue());
  211. // }
  212. // log("INVITE:***");
  213. //
  214. // String aor = getSIPuri(request.getHeader("To")); // Get the To AoR
  215. // if (!Binding.containsKey(aor)) { // To AoR not in the database, reply 404
  216. // //SipServletResponse response;
  217. // response = request.createResponse(404);
  218. // } else {
  219. // response = request.createResponse(300);
  220. // // Get the To AoR contact from the database and add it to the response
  221. // response.setHeader("Contact",Binding.get(aor));
  222. // response.send();
  223. // }
  224. }
  225.  
  226. // Two dummy functions that just do super.x
  227. /**
  228. * @param response The SIP message received by the AS
  229. */
  230.  
  231. protected void doErrorResponse(SipServletResponse response)
  232. throws ServletException,IOException {
  233. String aorF = getSIPuri(response.getHeader("From")); //Obtém informações de Header
  234.  
  235.  
  236. System.out.println("\n" + "\n" + "\n" + "ENTREI 1");
  237.  
  238. SipServletRequest invite = sf.createRequest( response.getApplicationSession(), "INVITE", "sip:announcement@127.0.0.1:5090", Binding.get(aorF));
  239. invite.send();
  240.  
  241.  
  242. //
  243. // Proxy proxy = response.getProxy();
  244. // List<URI> listaURIs = new ArrayList<>();
  245. // listaURIs.add(sf.createURI("sip:announcement@127.0.0.1:5090"));
  246. //
  247. // System.out.println("\n" + "\n" + "\n" + "ENTREI 2");
  248. //
  249. //
  250. // proxy.setSupervised(true);
  251. // proxy.setProxyTimeout(2000);
  252. // proxy.setNoCancel(true);
  253. // proxy.proxyTo(listaURIs);
  254. // proxy.createProxyBranches(listaURIs);
  255. // proxy.startProxy();
  256.  
  257.  
  258. log("SimpleProxy: doResponse: invalidating session");
  259. super.doErrorResponse(response);
  260. }
  261.  
  262. protected void doBye(SipServletRequest request)
  263. throws ServletException, IOException {
  264. log("SimpleProxy: doBye: invalidate session when responses is received.");
  265. super.doBye(request);
  266. }
  267.  
  268. /**
  269. * Auxiliary function for extracting SPI URIs
  270. * @param uri A URI with optional extra attributes
  271. * @return SIP URI
  272. */
  273. protected String getSIPuri(String uri) {
  274. String f = uri.substring(uri.indexOf("<")+1, uri.indexOf(">"));
  275. int indexCollon = f.indexOf(":", f.indexOf("@"));
  276. if (indexCollon != -1) {
  277. f = f.substring(0,indexCollon);
  278. }
  279. return f;
  280. }
  281.  
  282. /**
  283. * Auxiliary function for extracting SPI URIs
  284. * @param uri A URI with optional extra attributes
  285. * @return SIP URI and port
  286. */
  287. protected String getSIPuriPort(String uri) {
  288. String f = uri.substring(uri.indexOf("<")+1, uri.indexOf(">"));
  289. return f;
  290. }
  291.  
  292. protected void doMessage(SipServletRequest request) throws IOException {
  293. String aorT = getSIPuri(request.getHeader("To")); //Obtém as informações de cabeçalho
  294. String aorF = getSIPuri(request.getHeader("From"));
  295. SipServletResponse response; //Respostas
  296. System.out.println("\n"+"\n"+"\n"+ "A mensagem chegou ao servidor, com sucesso, com a info:" + "\n"
  297. +"From:" + aorF +"\n"
  298. +"To:" + aorT + "\n"
  299. +"Body: " + request.getContent().toString() +"\n"+"\n"+"\n");
  300. if(!aorT.equalsIgnoreCase("sip:colab@acme.pt") ){ //Não é uma mensagem para o serviço CoLab
  301. System.out.println("Não é uma mensagem para o serviço CoLab");
  302. response = request.createResponse(404);
  303. response.send();
  304. }else { //É uma mensagem para o serviço CoLab
  305. System.out.println("É uma mensagem para o serviço CoLab");
  306. if(!aorF.contains("gestor@acme.pt") ){ //Mensagem sem Autoridade para o Serviço
  307. System.out.println("Mensagem sem Autoridade para o Serviço");
  308. response = request.createResponse(401);
  309. response.send();
  310. }else { //Mensagem de Autoridade do Gestor
  311. if(UserRegistado(aorF)){
  312. System.out.println("Mensagem de Autoridade do Gestor comprovada!");
  313. String [] message= request.getContent().toString().split(" "); //Obtém natureza da mensagem
  314. System.out.println("Utilizador: " + message[1] + "\n");
  315. if(message[1].contains("colaborador")) { //Mensagem com formato certo
  316. if(message[0].contains("REMOVE")) { //Se pretende remover colaborador
  317. System.out.println("Mensagem enviada para processamento de remover" + "\n");
  318. processaRemove(request, message[1]);
  319. }
  320. if(message[0].contains("ADD")) { //Se pretende adicionar colaborador
  321. System.out.println("Mensagem enviada para processamento de adicionar" + "\n");
  322. processaAdd(request, message[1]);
  323. }
  324. }
  325. }else{
  326. System.out.println("Gestor não está registado no sistema" + "\n");
  327. response = request.createResponse(401); //Erro porque não está registado
  328. response.send();
  329. }
  330. }
  331. }
  332. }
  333.  
  334. /**
  335. * Mensagem para Adicionar Colaborador
  336. */
  337. public void processaAdd(SipServletRequest request, String aor)throws IOException{
  338. SipServletResponse response; //Respostas
  339. System.out.println("\n"+"\n"+"\n"+ "Mensagem chegou ao processamento de adição" + "\n");
  340. if(UserRegistado(aor)){ //Está registado no sistema
  341. System.out.println("Colaborador encontra-se registado" + "\n");
  342. if(ColaboradorRegistado(aor)){ //Está na lista de Colaboradores
  343. System.out.println("Colaborador encontra-se na lista de colaboradores" + "\n");
  344. response = request.createResponse(404);
  345. response.send(); //Erro porque já está registado
  346. }else{ //Não está na lista de Colaboradores
  347. System.out.println("Colaborador foi adicionado com sucesso" + "\n");
  348. colaboradores.add(aor); //Adiciona o contacto à lista
  349. response= request.createResponse(200);
  350. response.send();
  351. }
  352. }else{ //Não está registado no sistema
  353. System.out.println("Colaborador não está registado no sistema" + "\n");
  354. response = request.createResponse(401); //Erro porque não está registado
  355. response.send();
  356. }
  357. }
  358. /**
  359. * Mensagem para Remover Colaborador
  360. */
  361. public void processaRemove(SipServletRequest request, String aor)throws IOException{
  362. SipServletResponse response; //Respostas
  363. System.out.println("\n"+"\n"+"\n"+ "Mensagem chegou ao processamento de remoção" + "\n");
  364. if(UserRegistado(aor)){ //Está registado no sistema
  365. System.out.println("Colaborador encontra-se registado" + "\n");
  366. if(ColaboradorRegistado(aor)){ //Está na lista de Colaboradores
  367. System.out.println("Colaborador foi removido com sucesso" + "\n");
  368. colaboradores.remove(aor); //Remove o contacto do colaborador da Lista
  369. response= request.createResponse(200);
  370. response.send();
  371. }
  372. else{ //Não está na lista de Colaboradores
  373. System.out.println("Colaborador não encontra-se na lista de colaboradores" + "\n");
  374. response = request.createResponse(404);
  375. response.send();
  376. }
  377. }else{ //Não está registado no sistema
  378. System.out.println("Colaborador não está registado no sistema" + "\n");
  379. response = request.createResponse(401); //Erro porque não está registado
  380. response.send();
  381. }
  382. }
  383.  
  384.  
  385.  
  386.  
  387. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement