RTP/src/model/SIPSessionDescription.java

109 lines
3.6 KiB
Java
Raw Normal View History

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;
}
}