You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

VoIP.java 8.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package model;
  7. import gov.nist.javax.sip.DialogTimeoutEvent;
  8. import gov.nist.javax.sip.SipListenerExt;
  9. import java.net.InetAddress;
  10. import java.text.ParseException;
  11. import java.util.*;
  12. import java.util.logging.Level;
  13. import java.util.logging.Logger;
  14. import javax.sip.DialogTerminatedEvent;
  15. import javax.sip.IOExceptionEvent;
  16. import javax.sip.InvalidArgumentException;
  17. import javax.sip.ListeningPoint;
  18. import javax.sip.RequestEvent;
  19. import javax.sip.ResponseEvent;
  20. import javax.sip.SipException;
  21. import javax.sip.SipFactory;
  22. import javax.sip.SipProvider;
  23. import javax.sip.SipStack;
  24. import javax.sip.TimeoutEvent;
  25. import javax.sip.TransactionTerminatedEvent;
  26. import javax.sip.address.*;
  27. import javax.sip.header.*;
  28. import javax.sip.message.*;
  29. /**
  30. *
  31. * @author Normal
  32. */
  33. public class VoIP implements SipListenerExt
  34. {
  35. SipFactory sipFactory; // Used to access the SIP API.
  36. SipStack sipStack; // The SIP stack.
  37. SipProvider sipProvider; // Used to send SIP messages.
  38. MessageFactory messageFactory; // Used to create SIP message factory.
  39. HeaderFactory headerFactory; // Used to create SIP headers.
  40. AddressFactory addressFactory; // Used to create SIP URIs.
  41. ListeningPoint listeningPoint; // SIP listening IP address/port.
  42. Properties properties; // Other properties.
  43. private int counter;
  44. private int myPort = 5060;
  45. private String myName = "129";
  46. private String protocolTyp = "UDP";
  47. private String myIPAddress;
  48. int tag = (new Random()).nextInt();
  49. private int branch = hashCode();
  50. Address contactAddress;
  51. private ContactHeader contactHeader;
  52. public VoIP()
  53. {
  54. try
  55. {
  56. //wird an sich erstmal nicht gebraucht aber später sinnvoll um in die unteren Daten zu ergänzen
  57. String abc = InetAddress.getLocalHost().getHostAddress();
  58. this.myIPAddress = InetAddress.getLocalHost().getHostAddress();
  59. this.sipFactory = SipFactory.getInstance();
  60. this.sipFactory.setPathName("gov.nist");
  61. this.properties = new Properties();
  62. this.properties.setProperty("javax.sip.STACK_NAME", "stack");
  63. this.sipStack = this.sipFactory.createSipStack(this.properties);
  64. this.messageFactory = this.sipFactory.createMessageFactory();
  65. this.headerFactory = this.sipFactory.createHeaderFactory();
  66. this.addressFactory = this.sipFactory.createAddressFactory();
  67. this.listeningPoint = this.sipStack.createListeningPoint(this.myIPAddress, this.myPort, this.protocolTyp);
  68. this.sipProvider = this.sipStack.createSipProvider(this.listeningPoint);
  69. this.sipProvider.addSipListener(this);
  70. this.contactAddress = this.addressFactory.createAddress("sip:129@" + this.myIPAddress+ ":" + this.myPort); //+ ":" + this.myPort
  71. this.contactHeader = this.headerFactory.createContactHeader(contactAddress);
  72. }
  73. catch (Exception e)
  74. {
  75. System.out.println("Shit");
  76. System.exit(-1);
  77. }
  78. }
  79. public int hashCode()
  80. {
  81. int temp = tag*(new Random(100)).nextInt();
  82. return temp;
  83. }
  84. public void sendRegister(String serverIP, int serverPort) throws ParseException, InvalidArgumentException, SipException
  85. {
  86. System.out.println("-----------SendRegister-----------");
  87. Address addressto = this.addressFactory.createAddress("sip:192.168.100.11"); //evtl. mit Port: sip:192.168.100.11:5060
  88. Address addresstob = this.addressFactory.createAddress("sip:192.168.100.11"); //to get example maybe needed
  89. ToHeader to = this.headerFactory.createToHeader(addresstob, null); // Integer.toString(tag) address + tag
  90. URI requestURI = addressto.getURI();
  91. CallIdHeader callId = this.sipProvider.getNewCallId();
  92. FromHeader from = this.headerFactory.createFromHeader(addresstob, String.valueOf(this.tag)); //this.contactAddress
  93. ArrayList via = new ArrayList(); //Via needs a List as input
  94. ViaHeader viaheader = this.headerFactory.createViaHeader(this.myIPAddress, this.myPort, "UDP", String.valueOf(branch));
  95. via.add(viaheader);
  96. CSeqHeader cSeq = this.headerFactory.createCSeqHeader(1L, "REGISTER");
  97. MaxForwardsHeader maxForwards = this.headerFactory.createMaxForwardsHeader(70);
  98. AllowHeader allow = this.headerFactory.createAllowHeader("NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS,MESSAGE");
  99. ExpiresHeader expire = this.headerFactory.createExpiresHeader(3600); //int value
  100. //Create Request Header
  101. System.out.println("----REQUEST HEADER----");
  102. Request request = this.messageFactory.createRequest(requestURI, "REGISTER", callId, cSeq, from, to, via, maxForwards);
  103. request.addHeader(contactHeader);
  104. request.addHeader(allow);
  105. request.addHeader(expire);
  106. System.out.println(request);
  107. this.sipProvider.sendRequest(request);
  108. }
  109. @Override
  110. public void processDialogTimeout(DialogTimeoutEvent timeoutEvent)
  111. {
  112. }
  113. @Override
  114. public void processRequest(RequestEvent requestEvent)
  115. {
  116. System.out.println("RequestEvent " + requestEvent.getServerTransaction().getDialog());
  117. }
  118. @Override
  119. public void processResponse(ResponseEvent responseEvent)
  120. {
  121. System.out.println("---Response---");
  122. System.out.println(responseEvent.getResponse());
  123. if (responseEvent.getResponse().getStatusCode() == Response.UNAUTHORIZED && counter ==0)
  124. {
  125. counter++;
  126. try {
  127. Address addresstob = this.addressFactory.createAddress("sip:129@192.168.100.11"); //"sip:Jan@192.168.100.11"
  128. ToHeader temp = (ToHeader)responseEvent.getResponse().getHeader("To");
  129. ToHeader to = this.headerFactory.createToHeader(addresstob, temp.getTag()); // Integer.toString(tag) address + tag
  130. URI requestURI = addresstob.getURI();
  131. //CallIdHeader tempcall = (CallIdHeader)responseEvent.getResponse().getHeader("Call-ID");
  132. CallIdHeader callId = (CallIdHeader)responseEvent.getResponse().getHeader("Call-ID");
  133. FromHeader from = this.headerFactory.createFromHeader(addresstob, String.valueOf(this.tag)); //this.contactAddress
  134. //set Authorization header evtl. user Name benutzen den es gibt
  135. WWWAuthenticateHeader abc = (WWWAuthenticateHeader)responseEvent.getResponse().getHeader("WWW-Authenticate");
  136. AuthorizationHeader auth = this.headerFactory.createAuthorizationHeader("Digest");//was kommt in den string
  137. auth.setRealm(abc.getRealm());
  138. auth.setNonce(abc.getNonce());
  139. Address addresstest = this.addressFactory.createAddress("sip:"+myName+"@192.168.100.11"); //vielleicht passwort setzen "sip:"+myName+":\"\"@192.168.100.11"
  140. auth.setURI(addresstest.getURI());
  141. //System.out.println("Test");
  142. //auth.setQop(abc.getQop());
  143. System.out.println("Test");
  144. //auth.setOpaque(abc.getOpaque());
  145. auth.setUsername(myName);
  146. System.out.println("-----auth------");
  147. System.out.println(auth);
  148. ArrayList via = new ArrayList(); //Via needs a List as input
  149. ViaHeader viaheader = this.headerFactory.createViaHeader(this.myIPAddress, this.myPort, "UDP", String.valueOf(branch+2));// String.valueOf(hashCode())string branch
  150. via.add(viaheader);
  151. CSeqHeader cSeq = this.headerFactory.createCSeqHeader(2L, "REGISTER");
  152. MaxForwardsHeader maxForwards = this.headerFactory.createMaxForwardsHeader(70);
  153. AllowHeader allow = this.headerFactory.createAllowHeader("NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS,MESSAGE");
  154. ExpiresHeader expire = this.headerFactory.createExpiresHeader(3600); //int value
  155. //Zusätzliche Register Header nach Unauthorzied
  156. //Create Request Header
  157. System.out.println("----REQUEST HEADER2----");
  158. Request request = this.messageFactory.createRequest(requestURI, "REGISTER", callId, cSeq, from, to, via, maxForwards);
  159. request.addHeader(contactHeader);
  160. request.addHeader(allow);
  161. request.addHeader(expire);
  162. request.addHeader(auth);
  163. System.out.println(request);
  164. this.sipProvider.sendRequest(request);
  165. }
  166. catch (ParseException | SipException |InvalidArgumentException ex) {
  167. Logger.getLogger(VoIP.class.getName()).log(Level.SEVERE, null, ex);
  168. }
  169. }
  170. else if (responseEvent.getResponse().getStatusCode() == Response.OK)
  171. {
  172. System.out.println("responseEvent.getResponse()" + responseEvent.getResponse());
  173. }
  174. }
  175. @Override
  176. public void processTimeout(TimeoutEvent timeoutEvent)
  177. {
  178. }
  179. @Override
  180. public void processIOException(IOExceptionEvent exceptionEvent)
  181. {
  182. }
  183. @Override
  184. public void processTransactionTerminated(
  185. TransactionTerminatedEvent transactionTerminatedEvent)
  186. {
  187. }
  188. @Override
  189. public void processDialogTerminated(
  190. DialogTerminatedEvent dialogTerminatedEvent)
  191. {
  192. }
  193. }