.
This commit is contained in:
parent
4c36b347e6
commit
cbb42b3041
@ -24,6 +24,12 @@ public class CommandAnnehmen implements CommandInterface
|
||||
private static final Logger lginvite = OhmLogger.getLogger();
|
||||
private SIPmodel model;
|
||||
private Hauptfenster view;
|
||||
|
||||
//private InputStream istream;
|
||||
|
||||
//Socket s;
|
||||
|
||||
|
||||
public CommandAnnehmen(SIPmodel model, Hauptfenster view)
|
||||
{
|
||||
this.model = model;
|
||||
@ -35,6 +41,19 @@ public class CommandAnnehmen implements CommandInterface
|
||||
{
|
||||
{
|
||||
model.annehmen();
|
||||
try
|
||||
{
|
||||
//s = new Socket(model.getMyIPAdress(),model.getMyPort());
|
||||
view.getTxtArea().append("Socket geöffnet");
|
||||
|
||||
//istream = s.getInputStream();
|
||||
//System.out.println(istream);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@Override
|
||||
|
@ -3,7 +3,6 @@
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
package controller.commands;
|
||||
|
||||
import controller.CommandInterface;
|
||||
@ -14,41 +13,41 @@ import model.SIPmodel;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jan
|
||||
* Muss noch komplett implementiert werden
|
||||
* -> Bye bei laufendem Gespräch
|
||||
* -> Cancel bei laufender Anfrage, sollte beides recht schnell gehen wenn ihr Lust habt.
|
||||
* @author Jan Muss noch komplett implementiert werden -> Bye bei laufendem
|
||||
* Gespräch -> Cancel bei laufender Anfrage, sollte beides recht schnell gehen
|
||||
* wenn ihr Lust habt.
|
||||
*
|
||||
*/
|
||||
public class CommandBeenden implements CommandInterface
|
||||
{
|
||||
private static final Logger lginvite = OhmLogger.getLogger();
|
||||
{
|
||||
private static final Logger lginvite = OhmLogger.getLogger();
|
||||
private SIPmodel model;
|
||||
private Hauptfenster view;
|
||||
|
||||
public CommandBeenden(SIPmodel model, Hauptfenster view)
|
||||
{
|
||||
this.model = model;
|
||||
this.view = view;
|
||||
this.view = view;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void execute()
|
||||
{/*
|
||||
public void execute()
|
||||
{
|
||||
|
||||
view.getTxtArea().append("Anruf beenden\n");
|
||||
try
|
||||
{
|
||||
view.getTxtArea().append("Anruf beenden\n");
|
||||
model.cancelcall();
|
||||
}
|
||||
catch (ParseException|InvalidArgumentException|SdpException|SipException ex)
|
||||
{
|
||||
view.getTxtArea().append("Einladung fehlgeschlagen\n");
|
||||
lginvite.getLogger(CommandBeenden.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}*/
|
||||
model.byecall(view.getTxtcallUser().getText());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void undo()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -127,7 +127,7 @@
|
||||
<Property name="text" type="java.lang.String" value="xxx.xxx.xxx.xxx"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JTextField" name="txtcallIP">
|
||||
<Component class="javax.swing.JTextField" name="txtcallUser">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="name"/>
|
||||
</Properties>
|
||||
|
@ -11,6 +11,13 @@ package gui;
|
||||
*/
|
||||
public class Hauptfenster extends javax.swing.JFrame
|
||||
{
|
||||
/**
|
||||
* @return the txtcallUser
|
||||
*/
|
||||
public javax.swing.JTextField getTxtcallUser()
|
||||
{
|
||||
return txtcallUser;
|
||||
}
|
||||
/**
|
||||
* @return the btnannehmen
|
||||
*/
|
||||
@ -100,7 +107,7 @@ public class Hauptfenster extends javax.swing.JFrame
|
||||
jPanel2 = new javax.swing.JPanel();
|
||||
lblmyIP = new javax.swing.JLabel();
|
||||
txtServerIP = new javax.swing.JTextField();
|
||||
txtcallIP = new javax.swing.JTextField();
|
||||
txtcallUser = new javax.swing.JTextField();
|
||||
|
||||
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
|
||||
|
||||
@ -150,8 +157,8 @@ public class Hauptfenster extends javax.swing.JFrame
|
||||
txtServerIP.setText("xxx.xxx.xxx.xxx");
|
||||
jPanel2.add(txtServerIP);
|
||||
|
||||
txtcallIP.setText("name");
|
||||
jPanel2.add(txtcallIP);
|
||||
txtcallUser.setText("name");
|
||||
jPanel2.add(txtcallUser);
|
||||
|
||||
jPanel3.add(jPanel2);
|
||||
|
||||
@ -226,7 +233,7 @@ public class Hauptfenster extends javax.swing.JFrame
|
||||
private javax.swing.JLabel lblmyIP;
|
||||
private javax.swing.JTextArea txtArea;
|
||||
private javax.swing.JTextField txtServerIP;
|
||||
private javax.swing.JTextField txtcallIP;
|
||||
private javax.swing.JTextField txtcallUser;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
|
||||
/**
|
||||
@ -258,6 +265,6 @@ public class Hauptfenster extends javax.swing.JFrame
|
||||
*/
|
||||
public javax.swing.JTextField getTxtcallIP()
|
||||
{
|
||||
return txtcallIP;
|
||||
return txtcallUser;
|
||||
}
|
||||
}
|
||||
|
132
src/model/Audioaufnahme.java
Normal file
132
src/model/Audioaufnahme.java
Normal file
@ -0,0 +1,132 @@
|
||||
/*
|
||||
* 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.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.sound.sampled.AudioFormat;
|
||||
import javax.sound.sampled.AudioInputStream;
|
||||
import javax.sound.sampled.AudioSystem;
|
||||
import javax.sound.sampled.DataLine;
|
||||
import javax.sound.sampled.LineUnavailableException;
|
||||
import javax.sound.sampled.SourceDataLine;
|
||||
import javax.sound.sampled.TargetDataLine;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jan
|
||||
*/
|
||||
public class Audioaufnahme implements Runnable
|
||||
{
|
||||
AudioFormat format;
|
||||
TargetDataLine mic;
|
||||
AudioInputStream audioInput;
|
||||
//AudioOutputStream audioOutput;
|
||||
SourceDataLine sourceData;
|
||||
private ExecutorService audioausgabe;
|
||||
ByteArrayOutputStream out;
|
||||
|
||||
public Audioaufnahme()
|
||||
{
|
||||
float sampleRate = 48000;
|
||||
int sampleSizeInBits = 16;
|
||||
int channels = 1;
|
||||
boolean signed = true;
|
||||
boolean bigEndian = true;
|
||||
try
|
||||
{
|
||||
format = new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);
|
||||
mic = AudioSystem.getTargetDataLine(format);
|
||||
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
|
||||
mic = (TargetDataLine) AudioSystem.getLine(info);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.out.println("Fehler bei dem Audioformat des Mikrophones");
|
||||
Logger.getLogger(Audioaufnahme.class.getName()).log(Level.SEVERE, null, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void startaufnahme()
|
||||
{
|
||||
out = new ByteArrayOutputStream();
|
||||
try
|
||||
{
|
||||
mic.open(format);
|
||||
int numBytesRead;
|
||||
int CHUNCK_SIZE = 1024;
|
||||
byte[] data = new byte[mic.getBufferSize() / 5];
|
||||
mic.start();
|
||||
int bytesRead = 0;
|
||||
|
||||
try
|
||||
{
|
||||
while (bytesRead < 1000000)
|
||||
{
|
||||
numBytesRead = mic.read(data, 0, CHUNCK_SIZE);
|
||||
bytesRead = bytesRead + numBytesRead;
|
||||
out.write(data, 0, numBytesRead);
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
mic.close();
|
||||
}
|
||||
catch (LineUnavailableException ex)
|
||||
{
|
||||
Logger.getLogger(Audioaufnahme.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
public void playAudio()
|
||||
{
|
||||
try
|
||||
{
|
||||
byte audioData[] = out.toByteArray();
|
||||
InputStream byteArrayInputStream = new ByteArrayInputStream(
|
||||
audioData);
|
||||
audioInput = new AudioInputStream(byteArrayInputStream, format, audioData.length / format.getFrameSize());
|
||||
DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, format);
|
||||
sourceData = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
|
||||
sourceData.open(format);
|
||||
sourceData.start();
|
||||
int cnt = 0;
|
||||
byte tempBuffer[] = new byte[1000000];
|
||||
try
|
||||
{
|
||||
while ((cnt = audioInput.read(tempBuffer, 0, tempBuffer.length)) != -1)
|
||||
{
|
||||
if (cnt > 0)
|
||||
{
|
||||
sourceData.write(tempBuffer, 0, cnt);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
sourceData.drain();
|
||||
sourceData.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
}
|
||||
}
|
95
src/model/Audioausgabe.java
Normal file
95
src/model/Audioausgabe.java
Normal file
@ -0,0 +1,95 @@
|
||||
/*
|
||||
* 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.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.sound.sampled.AudioFormat;
|
||||
import javax.sound.sampled.AudioInputStream;
|
||||
import javax.sound.sampled.AudioSystem;
|
||||
import javax.sound.sampled.DataLine;
|
||||
import javax.sound.sampled.SourceDataLine;
|
||||
import javax.sound.sampled.TargetDataLine;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jan
|
||||
*/
|
||||
public class Audioausgabe implements Runnable
|
||||
{
|
||||
AudioFormat format;
|
||||
AudioInputStream audioInput;
|
||||
SourceDataLine sourceData;
|
||||
private ExecutorService audioausgabe;
|
||||
ByteArrayOutputStream output;
|
||||
|
||||
public Audioausgabe()
|
||||
{
|
||||
audioausgabe = Executors.newSingleThreadExecutor();
|
||||
float sampleRate = 48000;
|
||||
int sampleSizeInBits = 16;
|
||||
int channels = 1;
|
||||
boolean signed = true;
|
||||
boolean bigEndian = true;
|
||||
try
|
||||
{
|
||||
format = new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);
|
||||
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.out.println("Fehler bei dem Audioformat des Mikrophones");
|
||||
Logger.getLogger(Audioausgabe.class.getName()).log(Level.SEVERE, null, e);
|
||||
}
|
||||
}
|
||||
public void playAudio()
|
||||
{
|
||||
try
|
||||
{
|
||||
byte audioData[] = output.toByteArray();
|
||||
InputStream byteArrayInputStream = new ByteArrayInputStream(
|
||||
audioData);
|
||||
audioInput = new AudioInputStream(byteArrayInputStream, format, audioData.length / format.getFrameSize());
|
||||
DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, format);
|
||||
sourceData = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
|
||||
sourceData.open(format);
|
||||
sourceData.start();
|
||||
int cnt = 0;
|
||||
byte tempBuffer[] = new byte[1000000];
|
||||
try
|
||||
{
|
||||
while ((cnt = audioInput.read(tempBuffer, 0, tempBuffer.length)) != -1)
|
||||
{
|
||||
if (cnt > 0)
|
||||
{
|
||||
sourceData.write(tempBuffer, 0, cnt);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
sourceData.drain();
|
||||
sourceData.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
}
|
||||
}
|
107
src/model/SIPRinging.java
Normal file
107
src/model/SIPRinging.java
Normal file
@ -0,0 +1,107 @@
|
||||
/*
|
||||
* 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 static java.lang.Thread.sleep;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.sip.RequestEvent;
|
||||
import javax.sip.SipException;
|
||||
import javax.sip.header.AllowEventsHeader;
|
||||
import javax.sip.header.AllowHeader;
|
||||
import javax.sip.header.CSeqHeader;
|
||||
import javax.sip.header.FromHeader;
|
||||
import javax.sip.header.ToHeader;
|
||||
import javax.sip.header.ViaHeader;
|
||||
import javax.sip.message.Response;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jan
|
||||
*/
|
||||
public class SIPRinging implements Runnable
|
||||
{
|
||||
private RequestEvent evtubergabe;
|
||||
private ExecutorService threadring;
|
||||
private boolean run;
|
||||
private Response responsering;
|
||||
//private SubmissionPublisher<Integer> publisherZahl;
|
||||
|
||||
public SIPRinging(RequestEvent evtubergabe)
|
||||
{
|
||||
this.evtubergabe = evtubergabe;
|
||||
threadring = Executors.newSingleThreadExecutor();
|
||||
try
|
||||
{
|
||||
responsering = this.messageFactory.createResponse(180, evtubergabe.getRequest());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
lg.getLogger(SIPmodel.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void start()
|
||||
{
|
||||
run = true;
|
||||
threadring.submit(this);
|
||||
}
|
||||
|
||||
public void stop()
|
||||
{
|
||||
run = false;
|
||||
}
|
||||
|
||||
public void createRingingHeader()
|
||||
{
|
||||
try
|
||||
{
|
||||
responsering.addHeader((ViaHeader) evtubergabe.getRequest().getHeader("Via"));
|
||||
responsering.addHeader((FromHeader) evtubergabe.getRequest().getHeader("From"));
|
||||
AllowHeader allow = this.headerFactory.createAllowHeader("NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS,MESSAGE");
|
||||
//Bei Ringing muss persönlicher Tag ergänzt werden
|
||||
ToHeader temptoring = (ToHeader) evtubergabe.getRequest().getHeader("To");
|
||||
proxyTag = temptoring.getTag();
|
||||
temptoring.setTag(String.valueOf(this.myTag));
|
||||
responsering.addHeader(temptoring);
|
||||
cSequenz = ((CSeqHeader) evtubergabe.getRequest().getHeader("Cseq")).getSeqNumber();
|
||||
responsering.addHeader((CSeqHeader) evtubergabe.getRequest().getHeader("Cseq"));
|
||||
responsering.addHeader(contactHeader);
|
||||
responsering.addHeader(allow);
|
||||
AllowEventsHeader allowevent = this.headerFactory.createAllowEventsHeader("talk,hold,refer,call-info");// für was gebraucht
|
||||
responsering.addHeader(allowevent);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
lg.getLogger(SIPmodel.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
while (run)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.sipProvider.sendResponse(responsering);
|
||||
}
|
||||
catch (SipException ex)
|
||||
{
|
||||
Logger.getLogger(SIPRinging.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
try
|
||||
{
|
||||
sleep(1000);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -42,23 +42,24 @@ import logger.OhmLogger;
|
||||
public class SIPmodel implements SipListenerExt
|
||||
{
|
||||
Hauptfenster view; //später entfernen wegen Zugriff
|
||||
private static final Logger lg = OhmLogger.getLogger();
|
||||
SipFactory sipFactory; // Used to access the SIP API.
|
||||
SipStack sipStack; // The SIP stack.
|
||||
SipProvider sipProvider; // Used to send SIP messages.
|
||||
MessageFactory messageFactory; // Used to create SIP message factory.
|
||||
HeaderFactory headerFactory; // Used to create SIP headers.
|
||||
AddressFactory addressFactory; // Used to create SIP URIs.
|
||||
ListeningPoint listeningPoint; // SIP listening IP address/port.
|
||||
Properties properties; // Other properties.
|
||||
public static final Logger lg = OhmLogger.getLogger();
|
||||
public SipFactory sipFactory; // Used to access the SIP API.
|
||||
public SipStack sipStack; // The SIP stack.
|
||||
public SipProvider sipProvider; // Used to send SIP messages.
|
||||
public MessageFactory messageFactory; // Used to create SIP message factory.
|
||||
public HeaderFactory headerFactory; // Used to create SIP headers.
|
||||
public AddressFactory addressFactory; // Used to create SIP URIs.
|
||||
public ListeningPoint listeningPoint; // SIP listening IP address/port.
|
||||
public Properties properties; // Other properties.
|
||||
|
||||
private int counter = 10;
|
||||
private String[][] codecs; //unterstütze Codecs[RTP-Parameter][CodecBezeichnung]
|
||||
|
||||
private int myPort = 5060;
|
||||
private String myName = "129";
|
||||
private String protocolTyp = "UDP";
|
||||
private String myIPAddress;
|
||||
private String proxyAddress;
|
||||
public int myPort = 5060;
|
||||
public String myName = "129";
|
||||
public String protocolTyp = "UDP";
|
||||
public String myIPAddress;
|
||||
public String proxyAddress;
|
||||
public CallIdHeader callID;
|
||||
|
||||
Boolean invite; //Bool für SDP falls ich anrufe
|
||||
|
||||
@ -67,10 +68,12 @@ public class SIPmodel implements SipListenerExt
|
||||
Boolean werdeAngerufen;
|
||||
private int countWerdeAngerufen;
|
||||
|
||||
int tag = (new Random()).nextInt();
|
||||
private int branch = hashCode();
|
||||
Address contactAddress;
|
||||
private ContactHeader contactHeader;
|
||||
public long cSequenz = 1;
|
||||
public String proxyTag;
|
||||
public int myTag = (new Random()).nextInt();
|
||||
public int branch = hashCode();
|
||||
public Address contactAddress;
|
||||
public ContactHeader contactHeader;
|
||||
|
||||
public SIPmodel(Hauptfenster view) //Konstruktor für eigene Daten
|
||||
{
|
||||
@ -81,14 +84,21 @@ public class SIPmodel implements SipListenerExt
|
||||
countWerdeAngerufen = 0;
|
||||
evtWerdeAngerufen = null;
|
||||
werdeAngerufen = false;
|
||||
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";
|
||||
|
||||
try
|
||||
{
|
||||
//wird an sich erstmal nicht gebraucht aber später sinnvoll um eigene Daten zu initialisieren
|
||||
String abc = InetAddress.getLocalHost().getHostAddress();
|
||||
|
||||
this.myIPAddress = InetAddress.getLocalHost().getHostAddress();
|
||||
|
||||
this.sipFactory = SipFactory.getInstance();
|
||||
this.sipFactory.setPathName("gov.nist");
|
||||
this.properties = new Properties();
|
||||
@ -103,19 +113,17 @@ public class SIPmodel implements SipListenerExt
|
||||
//this.contactAddress = this.addressFactory.createAddress("sip:129@" + this.myIPAddress + ":" + this.myPort); //+ ":" + this.myPort
|
||||
this.contactAddress = this.addressFactory.createAddress("sip:" + myName + "@" + this.myIPAddress + ":" + this.myPort);
|
||||
this.contactHeader = this.headerFactory.createContactHeader(contactAddress);
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.out.println("Fehler bei Initialisierung eigener Addresse");
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
int temp = tag * (new Random(100)).nextInt();
|
||||
int temp = myTag * (new Random(100)).nextInt();
|
||||
return temp;
|
||||
}
|
||||
|
||||
@ -124,10 +132,10 @@ public class SIPmodel implements SipListenerExt
|
||||
lg.info("Vorbereiten des Registrierungs Headers");
|
||||
proxyAddress = serverIP + ":" + serverPort;
|
||||
Address addressto = this.addressFactory.createAddress("sip:" + proxyAddress); //evtl. mit Port: sip:192.168.100.11:5060
|
||||
ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(tag) address + tag
|
||||
ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(myTag) address + myTag
|
||||
URI requestURI = addressto.getURI();
|
||||
CallIdHeader callId = this.sipProvider.getNewCallId();
|
||||
FromHeader from = this.headerFactory.createFromHeader(addressto, String.valueOf(this.tag)); //this.contactAddress
|
||||
FromHeader from = this.headerFactory.createFromHeader(addressto, String.valueOf(this.myTag)); //this.contactAddress
|
||||
ArrayList via = new ArrayList(); //Via needs a List as input
|
||||
ViaHeader viaheader = this.headerFactory.createViaHeader(this.myIPAddress, this.myPort, "UDP", String.valueOf(branch));
|
||||
via.add(viaheader);
|
||||
@ -148,26 +156,26 @@ public class SIPmodel implements SipListenerExt
|
||||
{
|
||||
invite = true;
|
||||
Address addressto = this.addressFactory.createAddress("sip:" + sipaddresse + "@" + proxyaddresse);
|
||||
ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(tag) address + tag
|
||||
ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(myTag) address + myTag
|
||||
URI requestURI = addressto.getURI();
|
||||
CallIdHeader callId = this.sipProvider.getNewCallId();
|
||||
FromHeader from = this.headerFactory.createFromHeader(addressto, String.valueOf(this.tag)); //this.contactAddress
|
||||
callID = this.sipProvider.getNewCallId();
|
||||
FromHeader from = this.headerFactory.createFromHeader(addressto, String.valueOf(this.myTag)); //this.contactAddress
|
||||
ArrayList via = new ArrayList(); //Via needs a List as input
|
||||
ViaHeader viaheader = this.headerFactory.createViaHeader(this.myIPAddress, this.myPort, "UDP", String.valueOf(branch));
|
||||
via.add(viaheader);
|
||||
CSeqHeader cSeq = this.headerFactory.createCSeqHeader(1L, "INVITE");
|
||||
|
||||
CSeqHeader cSeq = this.headerFactory.createCSeqHeader(cSequenz, "INVITE");
|
||||
|
||||
MaxForwardsHeader maxForwards = this.headerFactory.createMaxForwardsHeader(70);
|
||||
AllowHeader allow = this.headerFactory.createAllowHeader("NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS,MESSAGE");
|
||||
ExpiresHeader expire = this.headerFactory.createExpiresHeader(3600); //int value
|
||||
Request request = this.messageFactory.createRequest(requestURI, "INVITE", callId, cSeq, from, to, via, maxForwards);
|
||||
Request request = this.messageFactory.createRequest(requestURI, "INVITE", callID, cSeq, from, to, via, maxForwards);
|
||||
request.addHeader(contactHeader);
|
||||
request.addHeader(allow);
|
||||
request.addHeader(expire);
|
||||
|
||||
ContentTypeHeader content = headerFactory.createContentTypeHeader("application", "sdp");
|
||||
request.addHeader(content);
|
||||
|
||||
request.setContent(createSDPHeader(), content);
|
||||
request.setContent(createSDPHeader(null), content);
|
||||
this.sipProvider.sendRequest(request);
|
||||
|
||||
lg.info("Erfolgreiches Senden der Invitation");
|
||||
@ -185,25 +193,6 @@ public class SIPmodel implements SipListenerExt
|
||||
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"));
|
||||
response.addHeader((ToHeader) requestEvent.getRequest().getHeader("To"));
|
||||
response.addHeader((CallIdHeader) requestEvent.getRequest().getHeader("Call-ID"));
|
||||
response.addHeader((CSeqHeader) requestEvent.getRequest().getHeader("Cseq"));
|
||||
//Kontakt Header
|
||||
response.addHeader(contactHeader);
|
||||
//Accept Header für application/sdp
|
||||
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);
|
||||
this.sipProvider.sendResponse(response);
|
||||
view.getTxtArea().append("Server Option Request erfolgreich beantwortet\n");
|
||||
lg.info("Erfolgreiches senden des Headers");
|
||||
*/
|
||||
}
|
||||
catch (ParseException | SipException ex)
|
||||
{
|
||||
@ -213,8 +202,18 @@ public class SIPmodel implements SipListenerExt
|
||||
//Aktive Kommunikation
|
||||
else if ((Request.INVITE).equals(requestEvent.getRequest().getMethod())) // Invite von anderem Benutzer
|
||||
{
|
||||
try
|
||||
{
|
||||
this.sipProvider.sendResponse(create180Ringing(requestEvent));
|
||||
view.getTxtArea().append("Ringing geschickt\n");
|
||||
}
|
||||
catch (Exception ex)//Exceptions evtl. genauer definieren
|
||||
{
|
||||
lg.getLogger(SIPmodel.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
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);
|
||||
if (countWerdeAngerufen < 7)
|
||||
@ -238,6 +237,7 @@ public class SIPmodel implements SipListenerExt
|
||||
}
|
||||
else if ((Request.CANCEL).equals(requestEvent.getRequest().getMethod()))
|
||||
{
|
||||
view.getTxtArea().append("Anruf wurde gecancelt");
|
||||
try
|
||||
{
|
||||
//Cancel Request -> Response 200 Ok + Response 487 Request Terminated
|
||||
@ -257,9 +257,15 @@ public class SIPmodel implements SipListenerExt
|
||||
}
|
||||
else if ((Request.BYE).equals(requestEvent.getRequest().getMethod()))
|
||||
{
|
||||
try
|
||||
{
|
||||
this.sipProvider.sendResponse(create200Ok(requestEvent));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -270,20 +276,15 @@ public class SIPmodel implements SipListenerExt
|
||||
|
||||
if (responseEvent.getResponse().getStatusCode() == Response.UNAUTHORIZED)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
//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
|
||||
ToHeader to = this.headerFactory.createToHeader(addresstob, temp.getTag()); // Integer.toString(myTag) address + myTag
|
||||
URI requestURI = addresstob.getURI();
|
||||
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
|
||||
//wird WWWAuthenticateHeader überhaupt benötigt???
|
||||
FromHeader from = this.headerFactory.createFromHeader(addresstob, String.valueOf(this.myTag)); //this.contactAddress
|
||||
WWWAuthenticateHeader wwwauth = (WWWAuthenticateHeader) responseEvent.getResponse().getHeader("WWW-Authenticate");
|
||||
|
||||
//wird bei AuthorizationHeader wirklich alles benötigt? war glaub nur mal Test -> testen!!
|
||||
@ -324,6 +325,12 @@ public class SIPmodel implements SipListenerExt
|
||||
{
|
||||
lg.info("Erfolgreichen Response (200 OK) bekommen");
|
||||
}
|
||||
else if (responseEvent.getResponse().getStatusCode() == Response.RINGING)
|
||||
{
|
||||
ToHeader temp = (ToHeader) responseEvent.getResponse().getHeader("To");
|
||||
proxyTag = temp.getTag();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -344,14 +351,33 @@ public class SIPmodel implements SipListenerExt
|
||||
return response;
|
||||
}
|
||||
|
||||
public SessionDescription createSDPHeader() throws SdpException
|
||||
public Response create180Ringing(RequestEvent requestEvent) throws ParseException, SipException
|
||||
{
|
||||
|
||||
Response responsering = this.messageFactory.createResponse(180, requestEvent.getRequest());
|
||||
responsering.addHeader((ViaHeader) requestEvent.getRequest().getHeader("Via"));
|
||||
responsering.addHeader((FromHeader) requestEvent.getRequest().getHeader("From"));
|
||||
AllowHeader allow = this.headerFactory.createAllowHeader("NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS,MESSAGE");
|
||||
//Bei Ringing muss persönlicher Tag ergänzt werden
|
||||
ToHeader temptoring = (ToHeader) requestEvent.getRequest().getHeader("To");
|
||||
proxyTag = temptoring.getTag();
|
||||
temptoring.setTag(String.valueOf(this.myTag));
|
||||
responsering.addHeader(temptoring);
|
||||
cSequenz = ((CSeqHeader) requestEvent.getRequest().getHeader("Cseq")).getSeqNumber();
|
||||
responsering.addHeader((CSeqHeader) requestEvent.getRequest().getHeader("Cseq"));
|
||||
responsering.addHeader(contactHeader);
|
||||
responsering.addHeader(allow);
|
||||
AllowEventsHeader allowevent = this.headerFactory.createAllowEventsHeader("talk,hold,refer,call-info");// für was gebraucht
|
||||
responsering.addHeader(allowevent);
|
||||
return responsering;
|
||||
}
|
||||
|
||||
public SIPmodel()
|
||||
{
|
||||
}
|
||||
|
||||
public SessionDescription createSDPHeader(ArrayList<String> reqSDP) throws SdpException
|
||||
{
|
||||
/*
|
||||
String contentparam = "v=0\r\n" + "o=129 1202 1202" + " IN IP4 192.168.100.247\r\n" + "s=SIP Call\r\n"
|
||||
+ "c=192.168.100.247\r\n" + "t=0 0\r\n" + "m=audio 6022 RTP/AVP 0 4 18\r\n"
|
||||
+ "a=rtpmap:0 PCMU/8000\r\n" + "a=rtpmap:4 G723/8000\r\n" + "a=rtpmap:18 G729A/8000\r\n" +
|
||||
"a=ptime:20\r\n";
|
||||
*/
|
||||
SdpFactory sdpFactory = SdpFactory.getInstance();
|
||||
SessionDescription sessionDescription = sdpFactory.createSessionDescription();
|
||||
sessionDescription.setOrigin(sdpFactory.createOrigin(myName, 8000, 8000, "IN", "IP4", myIPAddress));
|
||||
@ -360,27 +386,37 @@ public class SIPmodel implements SipListenerExt
|
||||
|
||||
//Media Body
|
||||
Vector mediavec = new Vector();
|
||||
String cods[] = new String[codecs.length];
|
||||
System.out.println("System out: " + codecs.length);
|
||||
|
||||
for (int i = 0; i < cods.length; i++)//Übertragung der RTP-Values in neues Array
|
||||
{
|
||||
cods[i] = codecs[i][0];
|
||||
}
|
||||
|
||||
mediavec.add(sdpFactory.createMediaDescription("audio", 6022, 1, "RTP/AVP", cods)); //(Übertragungstyp, Port, anzahl der Ports, Verbindungstyp,..)
|
||||
mediavec.add(sdpFactory.createAttribute("sendrecv", null));
|
||||
if (invite = true)
|
||||
{
|
||||
String sdpformat[] =
|
||||
for (int i = 0; i == codecs[0].length; i++)
|
||||
{
|
||||
"0", "4", "8", "18",
|
||||
};
|
||||
mediavec.add(sdpFactory.createMediaDescription("audio", 6022, 1, "RTP/AVP", sdpformat)); //(Übertragungstyp, Port, anzahl der Ports, Verbindungstyp,..)
|
||||
//Media Attribute
|
||||
mediavec.add(sdpFactory.createAttribute("sendrecv", null));
|
||||
mediavec.add(sdpFactory.createAttribute("rtpmap", "0 PCMU/8000"));
|
||||
mediavec.add(sdpFactory.createAttribute("rtpmap", "4 G723/8000"));
|
||||
mediavec.add(sdpFactory.createAttribute("rtpmap", "8 PCMA/8000"));
|
||||
mediavec.add(sdpFactory.createAttribute("rtpmap", "18 G729/8000"));
|
||||
mediavec.add(sdpFactory.createAttribute("ptime", "20"));
|
||||
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
|
||||
{
|
||||
|
||||
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);
|
||||
|
||||
return sessionDescription;
|
||||
}
|
||||
|
||||
@ -393,6 +429,7 @@ public class SIPmodel implements SipListenerExt
|
||||
|
||||
try
|
||||
{
|
||||
callID = (CallIdHeader) requestEvent.getRequest().getHeader("Call-ID");
|
||||
//Trying Message to Server (Response Trying)
|
||||
Response responsetry = this.messageFactory.createResponse(100, requestEvent.getRequest());
|
||||
responsetry.addHeader((ViaHeader) requestEvent.getRequest().getHeader("Via"));
|
||||
@ -401,6 +438,8 @@ public class SIPmodel implements SipListenerExt
|
||||
responsetry.addHeader((CallIdHeader) requestEvent.getRequest().getHeader("Call-ID"));
|
||||
responsetry.addHeader((CSeqHeader) requestEvent.getRequest().getHeader("Cseq"));
|
||||
|
||||
CSeqHeader tempcs = (CSeqHeader) requestEvent.getRequest().getHeader("Cseq");
|
||||
tempcs.getSeqNumber();
|
||||
SupportedHeader supp = this.headerFactory.createSupportedHeader("replace,path,timer"); //nachschauen
|
||||
AllowHeader allow = this.headerFactory.createAllowHeader("NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS,MESSAGE");
|
||||
|
||||
@ -416,7 +455,7 @@ public class SIPmodel implements SipListenerExt
|
||||
responsering.addHeader((FromHeader) requestEvent.getRequest().getHeader("From"));
|
||||
|
||||
ToHeader temptoring = (ToHeader) requestEvent.getRequest().getHeader("To");
|
||||
String tempTag = String.valueOf(this.tag + Math.random());
|
||||
String tempTag = String.valueOf(this.myTag + Math.random());
|
||||
temptoring.setTag(tempTag); //evtl. besseren Tag
|
||||
responsering.addHeader(temptoring);
|
||||
|
||||
@ -433,7 +472,6 @@ public class SIPmodel implements SipListenerExt
|
||||
//Jetzt kommt 200 Ok SIP Header + SDP (SIP/SDP)
|
||||
//Sdp Header erstellen nächster Schritt
|
||||
invite = false;
|
||||
System.out.println(requestEvent.getDialog());
|
||||
Response okandSDP = this.messageFactory.createResponse(Response.OK, requestEvent.getRequest());
|
||||
//okandSDP.addHeader((ViaHeader) requestEvent.getRequest().getHeader("Via"));
|
||||
okandSDP.addHeader((FromHeader) requestEvent.getRequest().getHeader("From"));
|
||||
@ -447,7 +485,18 @@ public class SIPmodel implements SipListenerExt
|
||||
okandSDP.addHeader(allowevent);
|
||||
ContentTypeHeader content = headerFactory.createContentTypeHeader("application", "sdp");
|
||||
okandSDP.addHeader(content);
|
||||
okandSDP.setContent(createSDPHeader(), content);
|
||||
|
||||
String[] reqbody = (requestEvent.getRequest()).toString().split("\\s|" + System.getProperty("line.seperator"));//Req. Body in Zeilen aufteilen
|
||||
ArrayList<String> reqSDP = new ArrayList<>();
|
||||
for (String req : reqbody)//jeden String durchgehen und nach Codecs suchen die unterstützt werden
|
||||
{
|
||||
if (req.startsWith("a=rtpmap"))
|
||||
{
|
||||
reqSDP.add(req.replace("a=rtpmap:", ""));
|
||||
System.out.println(reqSDP);
|
||||
}
|
||||
}
|
||||
okandSDP.setContent(createSDPHeader(reqSDP), content);
|
||||
this.sipProvider.sendResponse(okandSDP);
|
||||
|
||||
view.getTxtArea().append("Telefonat beginnt\n");
|
||||
@ -466,9 +515,35 @@ public class SIPmodel implements SipListenerExt
|
||||
|
||||
}
|
||||
|
||||
public void cancelcall()
|
||||
public void byecall(String calluser) throws ParseException, InvalidArgumentException, SipException
|
||||
{
|
||||
invite = false;
|
||||
Address addressLine = this.addressFactory.createAddress("sip:" + calluser + "@" + proxyAddress);
|
||||
URI requestURI = addressLine.getURI();
|
||||
|
||||
Address addressfrom = this.addressFactory.createAddress("sip:" + myName + "@" + myIPAddress);
|
||||
FromHeader from = this.headerFactory.createFromHeader(addressfrom, String.valueOf(this.myTag));
|
||||
|
||||
Address addressTo = this.addressFactory.createAddress("sip:" + myName + "@" + proxyAddress);
|
||||
ToHeader to = this.headerFactory.createToHeader(addressTo, proxyTag); // Ergänzung TAG!!
|
||||
|
||||
ArrayList via = new ArrayList(); //Via needs a List as input
|
||||
ViaHeader viaheader = this.headerFactory.createViaHeader(this.myIPAddress, this.myPort, "UDP", String.valueOf(branch));
|
||||
via.add(viaheader);
|
||||
|
||||
cSequenz++;
|
||||
CSeqHeader cSeq = this.headerFactory.createCSeqHeader(cSequenz, "BYE");
|
||||
MaxForwardsHeader maxForwards = this.headerFactory.createMaxForwardsHeader(70);
|
||||
AllowHeader allow = this.headerFactory.createAllowHeader("NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS,MESSAGE");
|
||||
ExpiresHeader expire = this.headerFactory.createExpiresHeader(3600); //int value
|
||||
Request request = this.messageFactory.createRequest(requestURI, "BYE", callID, cSeq, from, to, via, maxForwards);
|
||||
request.addHeader(contactHeader);
|
||||
request.addHeader(allow);
|
||||
request.addHeader(expire);
|
||||
this.sipProvider.sendRequest(request);
|
||||
invite = false;
|
||||
|
||||
lg.info("Erfolgreiches Senden des BYE Headers");
|
||||
}
|
||||
|
||||
//Get Methoden falls man mal die Parameter braucht
|
||||
|
Loading…
x
Reference in New Issue
Block a user