This commit is contained in:
+80
-54
@@ -30,6 +30,7 @@ import javax.sip.TransactionTerminatedEvent;
|
||||
import javax.sip.address.*;
|
||||
import javax.sip.header.*;
|
||||
import javax.sip.message.*;
|
||||
import logger.OhmLogger;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -37,6 +38,7 @@ import javax.sip.message.*;
|
||||
*/
|
||||
public class VoIP implements SipListenerExt
|
||||
{
|
||||
private static final Logger lg = OhmLogger.getLogger();
|
||||
SipFactory sipFactory; // Used to access the SIP API.
|
||||
SipStack sipStack; // The SIP stack.
|
||||
SipProvider sipProvider; // Used to send SIP messages.
|
||||
@@ -45,7 +47,7 @@ public class VoIP implements SipListenerExt
|
||||
AddressFactory addressFactory; // Used to create SIP URIs.
|
||||
ListeningPoint listeningPoint; // SIP listening IP address/port.
|
||||
Properties properties; // Other properties.
|
||||
|
||||
|
||||
private int counter;
|
||||
private int myPort = 5060;
|
||||
|
||||
@@ -56,6 +58,8 @@ public class VoIP implements SipListenerExt
|
||||
private int branch = hashCode();
|
||||
Address contactAddress;
|
||||
private ContactHeader contactHeader;
|
||||
|
||||
|
||||
|
||||
public VoIP() //Konstruktor für eigene Daten
|
||||
{
|
||||
@@ -64,7 +68,9 @@ public class VoIP implements SipListenerExt
|
||||
{
|
||||
//wird an sich erstmal nicht gebraucht aber später sinnvoll um eigene Daten zu initialisieren
|
||||
String abc = InetAddress.getLocalHost().getHostAddress();
|
||||
|
||||
this.myIPAddress = InetAddress.getLocalHost().getHostAddress();
|
||||
|
||||
this.sipFactory = SipFactory.getInstance();
|
||||
this.sipFactory.setPathName("gov.nist");
|
||||
this.properties = new Properties();
|
||||
@@ -95,13 +101,12 @@ public class VoIP implements SipListenerExt
|
||||
|
||||
public void sendRegister(String serverIP, int serverPort) throws ParseException, InvalidArgumentException, SipException
|
||||
{
|
||||
System.out.println("-----------SendRegister-----------");
|
||||
lg.info("Vorbereiten des Registrierungs Headers");
|
||||
Address addressto = this.addressFactory.createAddress("sip:192.168.100.11"); //evtl. mit Port: sip:192.168.100.11:5060
|
||||
Address addresstob = this.addressFactory.createAddress("sip:192.168.100.11"); //to get example maybe needed
|
||||
ToHeader to = this.headerFactory.createToHeader(addresstob, null); // Integer.toString(tag) address + tag
|
||||
ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(tag) address + tag
|
||||
URI requestURI = addressto.getURI();
|
||||
CallIdHeader callId = this.sipProvider.getNewCallId();
|
||||
FromHeader from = this.headerFactory.createFromHeader(addresstob, String.valueOf(this.tag)); //this.contactAddress
|
||||
FromHeader from = this.headerFactory.createFromHeader(addressto, String.valueOf(this.tag)); //this.contactAddress
|
||||
ArrayList via = new ArrayList(); //Via needs a List as input
|
||||
ViaHeader viaheader = this.headerFactory.createViaHeader(this.myIPAddress, this.myPort, "UDP", String.valueOf(branch));
|
||||
via.add(viaheader);
|
||||
@@ -109,14 +114,39 @@ public class VoIP implements SipListenerExt
|
||||
MaxForwardsHeader maxForwards = this.headerFactory.createMaxForwardsHeader(70);
|
||||
AllowHeader allow = this.headerFactory.createAllowHeader("NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS,MESSAGE");
|
||||
ExpiresHeader expire = this.headerFactory.createExpiresHeader(3600); //int value
|
||||
//Create Request Header
|
||||
System.out.println("----REQUEST HEADER----");
|
||||
Request request = this.messageFactory.createRequest(requestURI, "REGISTER", callId, cSeq, from, to, via, maxForwards);
|
||||
request.addHeader(contactHeader);
|
||||
request.addHeader(allow);
|
||||
request.addHeader(expire);
|
||||
this.sipProvider.sendRequest(request);
|
||||
lg.info("Erfolgreiches Senden der Registrierung");
|
||||
}
|
||||
public void sendInvitation(String sipaddresse, int serverPort)throws ParseException, InvalidArgumentException, SipException, SdpException
|
||||
{
|
||||
Address addressto = this.addressFactory.createAddress(sipaddresse); //evtl. mit Port: sip:192.168.100.11:5060
|
||||
ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(tag) address + tag
|
||||
URI requestURI = addressto.getURI();
|
||||
CallIdHeader callId = this.sipProvider.getNewCallId();
|
||||
FromHeader from = this.headerFactory.createFromHeader(addressto, String.valueOf(this.tag)); //this.contactAddress
|
||||
ArrayList via = new ArrayList(); //Via needs a List as input
|
||||
ViaHeader viaheader = this.headerFactory.createViaHeader(this.myIPAddress, this.myPort, "UDP", String.valueOf(branch));
|
||||
via.add(viaheader);
|
||||
CSeqHeader cSeq = this.headerFactory.createCSeqHeader(1L, "INVITE");
|
||||
MaxForwardsHeader maxForwards = this.headerFactory.createMaxForwardsHeader(70);
|
||||
AllowHeader allow = this.headerFactory.createAllowHeader("NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS,MESSAGE");
|
||||
ExpiresHeader expire = this.headerFactory.createExpiresHeader(3600); //int value
|
||||
Request request = this.messageFactory.createRequest(requestURI, "REGISTER", callId, cSeq, from, to, via, maxForwards);
|
||||
request.addHeader(contactHeader);
|
||||
request.addHeader(allow);
|
||||
request.addHeader(expire);
|
||||
|
||||
ContentTypeHeader content = headerFactory.createContentTypeHeader("application", "sdp");
|
||||
request.addHeader(content);
|
||||
request.setContent(createSDPHeader(), content);
|
||||
System.out.println("---Invitation Header---");
|
||||
System.out.println(request);
|
||||
this.sipProvider.sendRequest(request);
|
||||
//lg.info("Erfolgreiches Senden der Invitation");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -127,11 +157,11 @@ public class VoIP implements SipListenerExt
|
||||
@Override
|
||||
public void processRequest(RequestEvent requestEvent)
|
||||
{
|
||||
System.out.println("----Bekomme Anfrage----");
|
||||
lg.info("Bekomme Anfrage");
|
||||
//Kommunikation mit Server das man zur Verfügung steht
|
||||
if ((Request.OPTIONS).equals(requestEvent.getRequest().getMethod())) //Options Anfrage von Server nach erfolgreicher Registrierung
|
||||
{
|
||||
System.out.println("200 OK zu Server");
|
||||
lg.info("Option Request von Server, erstellen 200 OK zu Server");
|
||||
try
|
||||
{
|
||||
Response response = this.messageFactory.createResponse(200, requestEvent.getRequest());
|
||||
@@ -149,23 +179,23 @@ public class VoIP implements SipListenerExt
|
||||
response.addHeader(allow);
|
||||
response.addHeader(allowevents);
|
||||
this.sipProvider.sendResponse(response);
|
||||
lg.info("Erfolgreiches senden des Headers");
|
||||
}
|
||||
catch (ParseException | SipException ex)
|
||||
{
|
||||
Logger.getLogger(VoIP.class.getName()).log(Level.SEVERE, null, ex);
|
||||
lg.getLogger(VoIP.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
//Aktive Kommunikation
|
||||
else if ((Request.INVITE).equals(requestEvent.getRequest().getMethod())) // Invite von anderem Benutzer
|
||||
{
|
||||
System.out.println("Hab invitation bekommen");
|
||||
System.out.println("Gleich antworte ich");
|
||||
lg.info("Hab Invitation bekommen");
|
||||
try
|
||||
{
|
||||
//Trying Message to Server (Response Trying)
|
||||
|
||||
System.out.println("----REquest HEader----");
|
||||
Response responsetry = this.messageFactory.createResponse(100, requestEvent.getRequest());
|
||||
|
||||
responsetry.addHeader((ViaHeader) requestEvent.getRequest().getHeader("Via"));
|
||||
responsetry.addHeader((FromHeader) requestEvent.getRequest().getHeader("From"));
|
||||
responsetry.addHeader((ToHeader) requestEvent.getRequest().getHeader("To"));
|
||||
@@ -178,7 +208,7 @@ public class VoIP implements SipListenerExt
|
||||
responsetry.addHeader(supp);
|
||||
responsetry.addHeader(allow);
|
||||
this.sipProvider.sendResponse(responsetry);
|
||||
System.out.println("Trying ist raus");
|
||||
lg.info("Trying ist raus");
|
||||
|
||||
//Ringing Message to Server (Responste Ringing)
|
||||
Response responsering = this.messageFactory.createResponse(180, requestEvent.getRequest());
|
||||
@@ -216,44 +246,11 @@ public class VoIP implements SipListenerExt
|
||||
okandSDP.addHeader(allow);
|
||||
okandSDP.addHeader(allowevent);
|
||||
ContentTypeHeader content = headerFactory.createContentTypeHeader("application", "sdp");
|
||||
|
||||
//Create Session Description Body
|
||||
SdpFactory sdpFactory = SdpFactory.getInstance();
|
||||
SessionDescription sessionDescription = sdpFactory.createSessionDescription();
|
||||
sessionDescription.setOrigin(sdpFactory.createOrigin(myName, 8000, 8000, "IN", "IP4", myIPAddress));
|
||||
sessionDescription.setSessionName(sdpFactory.createSessionName("SIP Call"));
|
||||
sessionDescription.setConnection(sdpFactory.createConnection("IN", "IP4", myIPAddress));
|
||||
|
||||
//Media Body
|
||||
String sdpformat[] =
|
||||
{
|
||||
"0", "4", "18",
|
||||
};
|
||||
Vector mediavec = new Vector();
|
||||
mediavec.add(sdpFactory.createMediaDescription("audio", 6022, 1, "RTP/AVP", sdpformat));
|
||||
|
||||
//Media Attribute
|
||||
mediavec.add(sdpFactory.createAttribute("sendrecv", null));
|
||||
mediavec.add(sdpFactory.createAttribute("rtpmap", "0 PCMU/8000"));
|
||||
mediavec.add(sdpFactory.createAttribute("rtpmap", "4 G723/8000"));
|
||||
mediavec.add(sdpFactory.createAttribute("rtpmap", "18 G729A/8000"));
|
||||
mediavec.add(sdpFactory.createAttribute("ptime", "20"));
|
||||
|
||||
sessionDescription.setAttributes(mediavec);
|
||||
|
||||
|
||||
System.out.println("---Beispiel Header---");
|
||||
/*
|
||||
String contentparam = "v=0\r\n" + "o=129 1202 1202" + " IN IP4 192.168.100.247\r\n" + "s=SIP Call\r\n"
|
||||
+ "c=192.168.100.247\r\n" + "t=0 0\r\n" + "m=audio 6022 RTP/AVP 0 4 18\r\n"
|
||||
+ "a=rtpmap:0 PCMU/8000\r\n" + "a=rtpmap:4 G723/8000\r\n" + "a=rtpmap:18 G729A/8000\r\n" +
|
||||
"a=ptime:20\r\n";
|
||||
*/
|
||||
okandSDP.addHeader(content);
|
||||
okandSDP.setContent(sessionDescription, content);
|
||||
okandSDP.setContent(createSDPHeader(), content);
|
||||
System.out.println(okandSDP);
|
||||
this.sipProvider.sendResponse(okandSDP);
|
||||
}
|
||||
}
|
||||
catch (ParseException | SipException | SdpException ex)
|
||||
{
|
||||
Logger.getLogger(VoIP.class.getName()).log(Level.SEVERE, null, ex);
|
||||
@@ -316,23 +313,52 @@ public class VoIP implements SipListenerExt
|
||||
request.addHeader(allow);
|
||||
request.addHeader(expire);
|
||||
request.addHeader(auth);
|
||||
//System.out.println(request);
|
||||
this.sipProvider.sendRequest(request);
|
||||
}
|
||||
catch (ParseException | SipException | InvalidArgumentException ex)
|
||||
{
|
||||
Logger.getLogger(VoIP.class.getName()).log(Level.SEVERE, null, ex);
|
||||
lg.getLogger(VoIP.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
|
||||
}
|
||||
else if (responseEvent.getResponse().getStatusCode() == Response.OK)
|
||||
{
|
||||
//System.out.println("responseEvent.getResponse()" + responseEvent.getResponse());
|
||||
System.out.println("Server hat Registrierung akzeptiert");
|
||||
|
||||
lg.info("Erfolgreichen Response (200 OK) bekommen");
|
||||
}
|
||||
|
||||
}
|
||||
public SessionDescription createSDPHeader() throws SdpException
|
||||
{
|
||||
/*
|
||||
String contentparam = "v=0\r\n" + "o=129 1202 1202" + " IN IP4 192.168.100.247\r\n" + "s=SIP Call\r\n"
|
||||
+ "c=192.168.100.247\r\n" + "t=0 0\r\n" + "m=audio 6022 RTP/AVP 0 4 18\r\n"
|
||||
+ "a=rtpmap:0 PCMU/8000\r\n" + "a=rtpmap:4 G723/8000\r\n" + "a=rtpmap:18 G729A/8000\r\n" +
|
||||
"a=ptime:20\r\n";
|
||||
*/
|
||||
SdpFactory sdpFactory = SdpFactory.getInstance();
|
||||
SessionDescription sessionDescription = sdpFactory.createSessionDescription();
|
||||
sessionDescription.setOrigin(sdpFactory.createOrigin(myName, 8000, 8000, "IN", "IP4", myIPAddress));
|
||||
sessionDescription.setSessionName(sdpFactory.createSessionName("SIP Call"));
|
||||
sessionDescription.setConnection(sdpFactory.createConnection("IN", "IP4", myIPAddress));
|
||||
|
||||
//Media Body
|
||||
String sdpformat[] =
|
||||
{
|
||||
"0", "4", "18",
|
||||
};
|
||||
Vector mediavec = new Vector();
|
||||
mediavec.add(sdpFactory.createMediaDescription("audio", 6022, 1, "RTP/AVP", sdpformat)); //(Übertragungstyp, Port, anzahl der Ports, Verbindungstyp,..)
|
||||
//Media Attribute
|
||||
mediavec.add(sdpFactory.createAttribute("sendrecv", null));
|
||||
mediavec.add(sdpFactory.createAttribute("rtpmap", "0 PCMU/8000"));
|
||||
mediavec.add(sdpFactory.createAttribute("rtpmap", "4 G723/8000"));
|
||||
mediavec.add(sdpFactory.createAttribute("rtpmap", "18 G729A/8000"));
|
||||
mediavec.add(sdpFactory.createAttribute("ptime", "20"));
|
||||
|
||||
sessionDescription.setAttributes(mediavec);
|
||||
|
||||
return sessionDescription;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processTimeout(TimeoutEvent timeoutEvent)
|
||||
|
||||
Reference in New Issue
Block a user