In Kommentar steht was bei SIP noch fehlt

This commit is contained in:
Jan 2019-06-17 22:36:17 +02:00
parent 057148f77f
commit 6db0eb4b8f
2 changed files with 92 additions and 43 deletions

View File

@ -35,8 +35,9 @@ import logger.OhmLogger;
/**
*
* @author Jan
komplettes Model für SIPmodel
* @author Jan komplettes Model für SIPmodel evtl. Vererbung und für jeden SIP
* Response/Request eigene Klasse oder Interface da es langsam unübersichtlich
* wird :( ACK schicken muss noch ergänzt werden BYE muss noch ergänzt werden.
*/
public class SIPmodel implements SipListenerExt
{
@ -53,7 +54,6 @@ public class SIPmodel implements SipListenerExt
private int counter = 10;
private int myPort = 5060;
private String myName = "129";
private String protocolTyp = "UDP";
@ -148,7 +148,6 @@ public class SIPmodel implements SipListenerExt
{
invite = true;
Address addressto = this.addressFactory.createAddress("sip:" + sipaddresse + "@" + proxyaddresse);
//Address addressto = this.addressFactory.createAddress("sip:121@192.168.100.11");
ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(tag) address + tag
URI requestURI = addressto.getURI();
CallIdHeader callId = this.sipProvider.getNewCallId();
@ -174,21 +173,19 @@ public class SIPmodel implements SipListenerExt
lg.info("Erfolgreiches Senden der Invitation");
}
@Override
public void processDialogTimeout(DialogTimeoutEvent timeoutEvent)
{
}
@Override
public void processRequest(RequestEvent requestEvent)
{
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
{
lg.info("Option Request von Server, erstellen 200 OK zu Server");
try
{
this.sipProvider.sendResponse(create200Ok(requestEvent));
view.getTxtArea().append("Server Option Request erfolgreich beantwortet\n");
lg.info("Erfolgreiches senden des Headers");
/*
Response response = this.messageFactory.createResponse(200, requestEvent.getRequest());
response.addHeader((ViaHeader) requestEvent.getRequest().getHeader("Via"));
response.addHeader((FromHeader) requestEvent.getRequest().getHeader("From"));
@ -206,6 +203,7 @@ public class SIPmodel implements SipListenerExt
this.sipProvider.sendResponse(response);
view.getTxtArea().append("Server Option Request erfolgreich beantwortet\n");
lg.info("Erfolgreiches senden des Headers");
*/
}
catch (ParseException | SipException ex)
{
@ -215,7 +213,7 @@ public class SIPmodel implements SipListenerExt
//Aktive Kommunikation
else if ((Request.INVITE).equals(requestEvent.getRequest().getMethod())) // Invite von anderem Benutzer
{
countWerdeAngerufen++;
countWerdeAngerufen++; //bessere Lösung muss her!!, was schickt andere User oder Proxy bei nicht erreichen
FromHeader abc = (FromHeader) requestEvent.getRequest().getHeader("From");
evtWerdeAngerufen = requestEvent;
System.out.println(countWerdeAngerufen);
@ -238,6 +236,29 @@ public class SIPmodel implements SipListenerExt
{
}
else if ((Request.CANCEL).equals(requestEvent.getRequest().getMethod()))
{
try
{
//Cancel Request -> Response 200 Ok + Response 487 Request Terminated
//200 Ok
werdeAngerufen = false;
evtWerdeAngerufen = null; // sicher ist sicher
this.sipProvider.sendResponse(create200Ok(requestEvent));
view.getTxtArea().append("Anrufender canceld Anfrage\n");
lg.info("Erfolgreiches senden des 200 OkHeaders auf CancelAnfrage");
//487 Request Terminated
}
catch (ParseException | SipException ex)
{
Logger.getLogger(SIPmodel.class.getName()).log(Level.SEVERE, null, ex);
}
}
else if ((Request.BYE).equals(requestEvent.getRequest().getMethod()))
{
}
}
@ -252,23 +273,25 @@ public class SIPmodel implements SipListenerExt
try
{
Address addresstob = this.addressFactory.createAddress("sip:129@192.168.100.11"); //"sip:Jan@192.168.100.11"
//Address addresstob = this.addressFactory.createAddress("sip:129@192.168.100.11"); //"sip:Jan@192.168.100.11"
Address addresstob = this.addressFactory.createAddress("sip:" + myName + "@" + proxyAddress);
ToHeader temp = (ToHeader) responseEvent.getResponse().getHeader("To");
ToHeader to = this.headerFactory.createToHeader(addresstob, temp.getTag()); // Integer.toString(tag) address + tag
URI requestURI = addresstob.getURI();
//CallIdHeader tempcall = (CallIdHeader)responseEvent.getResponse().getHeader("Call-ID");
CallIdHeader callId = (CallIdHeader) responseEvent.getResponse().getHeader("Call-ID");
FromHeader from = this.headerFactory.createFromHeader(addresstob, String.valueOf(this.tag)); //this.contactAddress
//set Authorization header evtl. user Name benutzen den es gibt
WWWAuthenticateHeader abc = (WWWAuthenticateHeader) responseEvent.getResponse().getHeader("WWW-Authenticate");
AuthorizationHeader auth = this.headerFactory.createAuthorizationHeader("Digest");//was kommt in den string
//wird WWWAuthenticateHeader überhaupt benötigt???
WWWAuthenticateHeader wwwauth = (WWWAuthenticateHeader) responseEvent.getResponse().getHeader("WWW-Authenticate");
auth.setRealm(abc.getRealm());
auth.setNonce(abc.getNonce());
Address addresstest = this.addressFactory.createAddress("sip:" + myName + "@192.168.100.11"); //vielleicht passwort setzen "sip:"+myName+":\"\"@192.168.100.11"
//wird bei AuthorizationHeader wirklich alles benötigt? war glaub nur mal Test -> testen!!
AuthorizationHeader auth = this.headerFactory.createAuthorizationHeader("Digest");//was kommt in den string
auth.setRealm(wwwauth.getRealm());
auth.setNonce(wwwauth.getNonce());
//Address addresstest = this.addressFactory.createAddress("sip:" + myName + "@192.168.100.11"); //vielleicht passwort setzen "sip:"+myName+":\"\"@192.168.100.11"
Address addresstest = this.addressFactory.createAddress("sip:" + myName + "@" + proxyAddress);
auth.setURI(addresstest.getURI());
auth.setUsername(myName);
@ -304,6 +327,23 @@ public class SIPmodel implements SipListenerExt
}
public Response create200Ok(RequestEvent requestEvent) throws ParseException
{
Response response = this.messageFactory.createResponse(200, requestEvent.getRequest());
response.addHeader((ViaHeader) requestEvent.getRequest().getHeader("Via"));
response.addHeader((FromHeader) requestEvent.getRequest().getHeader("From"));
response.addHeader((ToHeader) requestEvent.getRequest().getHeader("To"));
response.addHeader((CallIdHeader) requestEvent.getRequest().getHeader("Call-ID"));
response.addHeader((CSeqHeader) requestEvent.getRequest().getHeader("Cseq"));
response.addHeader(contactHeader);
AllowHeader allow = this.headerFactory.createAllowHeader("NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS,MESSAGE");
AllowEventsHeader allowevents = this.headerFactory.createAllowEventsHeader("talk,hold,refer,call-info");
response.addHeader((CallIdHeader) requestEvent.getRequest().getHeader("Call-ID"));
response.addHeader(allow);
response.addHeader(allowevents);
return response;
}
public SessionDescription createSDPHeader() throws SdpException
{
/*
@ -335,7 +375,7 @@ public class SIPmodel implements SipListenerExt
mediavec.add(sdpFactory.createAttribute("rtpmap", "18 G729/8000"));
mediavec.add(sdpFactory.createAttribute("ptime", "20"));
}
else//Vergleich von eigenen Codecs mit Codecs der anruft und Rückgabe entsprechend wählen
else//Vergleich von eigenen Codecs mit Codecs der anruft -> Rückgabe entsprechend wählen
{
}
@ -420,16 +460,18 @@ public class SIPmodel implements SipListenerExt
}
}
else
{
view.getTxtArea().append("Zur Zeit gibt es keinen Anruf\n");
}
}
//Get Methoden falls man mal die Parameter braucht
public void cancelcall()
{
}
//Get Methoden falls man mal die Parameter braucht
public String getmyName()
{
return myName;
@ -445,6 +487,7 @@ public class SIPmodel implements SipListenerExt
return myIPAddress;
}
// Herausfinden bei welchen Events die unteren Funktionen aufgerufen werden -> evtl brauchbar
@Override
public void processTimeout(TimeoutEvent timeoutEvent)
{
@ -470,4 +513,10 @@ public class SIPmodel implements SipListenerExt
{
//view.getTxtArea().append("processDialogTerminated\n");
}
@Override
public void processDialogTimeout(DialogTimeoutEvent timeoutEvent)
{
//view.getTxtArea().append("processDialogTerminated\n");
}
}