/* * 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; private String cods[]; private String[][] codecs; private static final Logger lgSessionDescription = OhmLogger.getLogger(); public SIPSessionDescription(String myName, String myIPAddress, RequestEvent requestEvent, Boolean anfrage) { codecs = new String[4][2]; // Alle unterstützen Codecs eintragen codecs[0][0] = "0"; codecs[0][1] = "PCMU/8000"; codecs[1][0] = "4"; codecs[1][1] = "G723/8000"; codecs[2][0] = "8"; codecs[2][1] = "PCMA/8000"; codecs[3][0] = "18"; codecs[3][1] = "G729/8000"; cods = new String[codecs.length]; for (int i = 0; i < cods.length; i++)//Übertragung der RTP-Values in neues Array { cods[i] = codecs[i][0]; } 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)); //Media Body mediavec.add(sdpFactory.createMediaDescription("audio", 6022, 1, "RTP/AVP", cods)); //(Übertragungstyp, Port, anzahl der Ports, Verbindungstyp,..) mediavec.add(sdpFactory.createAttribute("sendrecv", null)); if (anfrage = true) { for (int i = 0; i == codecs[0].length; i++) { System.out.println("Codecs: " + codecs[i][0] + " " + codecs[i][1]); mediavec.add(sdpFactory.createAttribute("rtpmap", codecs[i][0] + " " + codecs[i][1])); } } else//Vergleich von eigenen Codecs mit Codecs der anruft -> Rückgabe entsprechend wählen { //herausfiltern der zulässigen bei Nachrichtenanfrage String[] reqbody = (requestEvent.getRequest()).toString().split("\\s|" + System.getProperty("line.seperator")); ArrayList reqSDP = new ArrayList<>(); for (String req : reqbody) { if (req.startsWith("a=rtpmap")) { reqSDP.add(req.replace("a=rtpmap:", "")); System.out.println(reqSDP); } } boolean temp = true; //evtl noch was besseres da so erster Codec nicht bester verwendet wird for (int i = 0; i == codecs[0].length; i++) { if (codecs[i][1].equals(reqSDP) && temp == true) { mediavec.add(sdpFactory.createAttribute("rtpmap", "8 G711a/8000")); temp = false; } } } sessionDescription.setAttributes(mediavec); } catch (Exception ex) { lgSessionDescription.getLogger(SIPmodel.class.getName()).log(Level.SEVERE, null, ex); } } /** * @return the sessionDescription */ public SessionDescription getSessionDescription() { System.out.println(sessionDescription); return sessionDescription; } }