123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- /*
- * 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 < 4; 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
-
- if (anfrage == true)
- {
- mediavec.add(sdpFactory.createMediaDescription("audio", 6022, 1, "RTP/AVP", cods)); //(Übertragungstyp, Port, anzahl der Ports, Verbindungstyp,..)
- mediavec.add(sdpFactory.createAttribute("sendrecv", null));
- for (int i = 0; i == 4; 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
- {
- 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:", ""));
- }
- }
- boolean temp = true; //evtl noch was besseres da so erster Codec nicht bester verwendet wird
- int position = 0;
- for (String stcodec : cods)
- {
-
- System.out.println("------Auswahl des codecs----");
- if (reqSDP.contains(stcodec) && temp == true)
- {
- String tempcodec[]= new String [1];
- tempcodec[0] = codecs[position][1];
- mediavec.add(sdpFactory.createMediaDescription("audio", 6022, 1, "RTP/AVP", tempcodec)); //(Übertragungstyp, Port, anzahl der Ports, Verbindungstyp,..)
- mediavec.add(sdpFactory.createAttribute("sendrecv", null));
- mediavec.add(sdpFactory.createAttribute("rtpmap", codecs[position][0] + " " + codecs[position][1]));
- temp = false;
- }
- position++;
- }
- }
- sessionDescription.setAttributes(mediavec);
- }
- catch (Exception ex)
- {
- lgSessionDescription.getLogger(SIPmodel.class.getName()).log(Level.SEVERE, null, ex);
- }
-
- }
- /**
- * @return the sessionDescription
- */
- public SessionDescription getSessionDescription()
- {
- return sessionDescription;
- }
- }
|