2019-07-30 15:33:56 +00:00
|
|
|
/*
|
|
|
|
* To change this license header, choose License Headers in Project Properties.
|
|
|
|
* To change this template file, choose Tools | Templates
|
|
|
|
* and open the template in the editor.
|
|
|
|
*/
|
|
|
|
package model;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Vector;
|
|
|
|
import java.util.logging.Level;
|
|
|
|
import java.util.logging.Logger;
|
|
|
|
import javax.sdp.SdpFactory;
|
|
|
|
import javax.sdp.SessionDescription;
|
|
|
|
import javax.sip.RequestEvent;
|
|
|
|
import logger.OhmLogger;
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @author Jan
|
|
|
|
*/
|
|
|
|
public class SIPSessionDescription
|
|
|
|
{
|
|
|
|
private SdpFactory sdpFactory;
|
|
|
|
private SessionDescription sessionDescription;
|
|
|
|
private Vector mediavec;
|
2019-07-31 15:54:37 +00:00
|
|
|
private String codsRTP[]; //[RTP-Notation]
|
|
|
|
private String codecs[]; //[Codec/SampelRate]
|
2019-07-30 15:33:56 +00:00
|
|
|
private static final Logger lgSessionDescription = OhmLogger.getLogger();
|
|
|
|
|
|
|
|
public SIPSessionDescription(String myName, String myIPAddress,
|
|
|
|
RequestEvent requestEvent, Boolean anfrage)
|
|
|
|
{
|
2019-07-30 17:18:26 +00:00
|
|
|
//Hier alle unterstützen Codecs eintragen [RTP-Notation][Codec/SampelRate]
|
2019-07-31 15:54:37 +00:00
|
|
|
codsRTP = new String[4];
|
|
|
|
codsRTP[0]= "0";
|
|
|
|
codsRTP[1] ="4";
|
|
|
|
codsRTP[2]= "8";
|
|
|
|
codsRTP[3]= "18";
|
2019-07-30 17:18:26 +00:00
|
|
|
|
2019-07-31 15:54:37 +00:00
|
|
|
codecs = new String[4];
|
|
|
|
codecs[0] = "PCMU/8000";
|
|
|
|
codecs[1] = "G723/8000";
|
|
|
|
codecs[2]= "PCMA/8000";
|
|
|
|
codecs[3]= "G729/8000";
|
|
|
|
|
2019-07-30 15:33:56 +00:00
|
|
|
mediavec = new Vector();
|
|
|
|
try
|
|
|
|
{
|
|
|
|
sdpFactory = SdpFactory.getInstance();
|
|
|
|
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));
|
|
|
|
|
2019-07-31 15:54:37 +00:00
|
|
|
//Media Bod
|
2019-07-30 17:14:55 +00:00
|
|
|
if (anfrage == true)
|
2019-07-30 15:33:56 +00:00
|
|
|
{
|
2019-07-31 15:54:37 +00:00
|
|
|
mediavec.add(sdpFactory.createMediaDescription("audio", 6022, 1, "RTP/AVP", codsRTP)); //(Übertragungstyp, Port, anzahl der Ports, Verbindungstyp,..)
|
2019-07-30 17:14:55 +00:00
|
|
|
mediavec.add(sdpFactory.createAttribute("sendrecv", null));
|
2019-07-31 15:54:37 +00:00
|
|
|
for (int i = 0; i < codsRTP.length; i++)
|
2019-07-30 15:33:56 +00:00
|
|
|
{
|
2019-07-31 15:54:37 +00:00
|
|
|
mediavec.add(sdpFactory.createAttribute("rtpmap", codsRTP[i] + " " + codecs[i]));
|
2019-07-30 15:33:56 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else//Vergleich von eigenen Codecs mit Codecs der anruft -> Rückgabe entsprechend wählen
|
|
|
|
{
|
|
|
|
String[] reqbody = (requestEvent.getRequest()).toString().split("\\s|" + System.getProperty("line.seperator"));
|
|
|
|
ArrayList<String> reqSDP = new ArrayList<>();
|
|
|
|
for (String req : reqbody)
|
|
|
|
{
|
|
|
|
if (req.startsWith("a=rtpmap"))
|
|
|
|
{
|
|
|
|
reqSDP.add(req.replace("a=rtpmap:", ""));
|
|
|
|
}
|
|
|
|
}
|
2019-07-31 15:54:37 +00:00
|
|
|
|
2019-07-30 17:14:55 +00:00
|
|
|
int position = 0;
|
2019-07-31 15:54:37 +00:00
|
|
|
ArrayList<String> tempList = new ArrayList<>();
|
|
|
|
for (String stcodec : codsRTP)
|
2019-07-30 15:33:56 +00:00
|
|
|
{
|
2019-07-31 15:54:37 +00:00
|
|
|
if (reqSDP.contains(stcodec))
|
2019-07-30 17:14:55 +00:00
|
|
|
{
|
2019-07-31 15:54:37 +00:00
|
|
|
tempList.add(stcodec);
|
|
|
|
mediavec.add(sdpFactory.createAttribute("rtpmap", codsRTP[position] + " " + codecs[position]));
|
2019-07-30 15:33:56 +00:00
|
|
|
}
|
2019-07-30 17:14:55 +00:00
|
|
|
position++;
|
2019-07-30 15:33:56 +00:00
|
|
|
}
|
2019-07-31 15:54:37 +00:00
|
|
|
String[] tempArray = tempList.toArray(new String[tempList.size()]);
|
|
|
|
mediavec.add(sdpFactory.createMediaDescription("audio", 6022, 1, "RTP/AVP", tempArray)); //(Übertragungstyp, Port, anzahl der Ports, Verbindungstyp,..)
|
|
|
|
mediavec.add(sdpFactory.createAttribute("sendrecv", null));
|
2019-07-30 15:33:56 +00:00
|
|
|
}
|
|
|
|
sessionDescription.setAttributes(mediavec);
|
2019-07-30 17:26:19 +00:00
|
|
|
lgSessionDescription.info("SDP Header erstellt");
|
2019-07-30 15:33:56 +00:00
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
lgSessionDescription.getLogger(SIPmodel.class.getName()).log(Level.SEVERE, null, ex);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* @return the sessionDescription
|
|
|
|
*/
|
|
|
|
public SessionDescription getSessionDescription()
|
|
|
|
{
|
|
|
|
return sessionDescription;
|
|
|
|
}
|
|
|
|
}
|