diff --git a/src/controller/CommandController.java b/src/controller/CommandController.java
index 6d4d2d8..326012b 100644
--- a/src/controller/CommandController.java
+++ b/src/controller/CommandController.java
@@ -12,8 +12,10 @@ import java.awt.event.ActionListener;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.sdp.SdpException;
import javax.sip.InvalidArgumentException;
import javax.sip.SipException;
+import logger.OhmLogger;
import model.VoIP;
/**
@@ -22,6 +24,7 @@ import model.VoIP;
*/
public class CommandController implements ActionListener
{
+ private static final Logger lc = OhmLogger.getLogger();
private VoIP model;
private Hauptfenster view;
public CommandController(VoIP model, Hauptfenster view)
@@ -33,26 +36,35 @@ public class CommandController implements ActionListener
public void registerEvents()
{
view.getBtn1().addActionListener(this);
+ view.getBtn2().addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e)
{
- try
+ Object key = e.getSource();
+ if (key.equals(view.getBtn1()))
{
- model.sendRegister("123123", 1);
+ lc.info("Register Butten geklickt");
+ try
+ {
+ model.sendRegister("123123", 1);
+ }
+ catch (ParseException|InvalidArgumentException|SipException ex)
+ {
+ lc.getLogger(CommandController.class.getName()).log(Level.SEVERE, null, ex);
+ }
}
- catch (ParseException ex)
+ if(key.equals(view.getBtn2()))
{
- Logger.getLogger(CommandController.class.getName()).log(Level.SEVERE, null, ex);
- }
- catch (InvalidArgumentException ex)
- {
- Logger.getLogger(CommandController.class.getName()).log(Level.SEVERE, null, ex);
- }
- catch (SipException ex)
- {
- Logger.getLogger(CommandController.class.getName()).log(Level.SEVERE, null, ex);
+ try {
+ lc.info("Invite Button geklickt");
+ model.sendInvitation("23", 2);
+ }
+ catch (ParseException|InvalidArgumentException|SdpException|SipException ex) {
+ lc.getLogger(CommandController.class.getName()).log(Level.SEVERE, null, ex);
+ }
}
+
}
}
diff --git a/src/gui/Hauptfenster.form b/src/gui/Hauptfenster.form
index 5ecd561..0da850b 100644
--- a/src/gui/Hauptfenster.form
+++ b/src/gui/Hauptfenster.form
@@ -18,6 +18,7 @@
+
@@ -60,12 +61,18 @@
-
+
+
-
+
+
+
+
+
+
diff --git a/src/gui/Hauptfenster.java b/src/gui/Hauptfenster.java
index a7782e2..2ea6a01 100644
--- a/src/gui/Hauptfenster.java
+++ b/src/gui/Hauptfenster.java
@@ -83,6 +83,7 @@ public class Hauptfenster extends javax.swing.JFrame
jPanel1 = new javax.swing.JPanel();
btn1 = new javax.swing.JButton();
btn2 = new javax.swing.JButton();
+ jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
@@ -93,12 +94,16 @@ public class Hauptfenster extends javax.swing.JFrame
getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
getContentPane().add(textField, java.awt.BorderLayout.PAGE_START);
- btn1.setText("btn1");
+ btn1.setText("Register");
+ btn1.setToolTipText("Registrierung am Server");
jPanel1.add(btn1);
- btn2.setText("btn2");
+ btn2.setText("Anrufen");
jPanel1.add(btn2);
+ jButton1.setText("Annehmen");
+ jPanel1.add(jButton1);
+
getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_END);
pack();
@@ -157,6 +162,7 @@ public class Hauptfenster extends javax.swing.JFrame
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btn1;
private javax.swing.JButton btn2;
+ private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextField textField;
diff --git a/src/logger/OhmLogger.java b/src/logger/OhmLogger.java
new file mode 100644
index 0000000..0794888
--- /dev/null
+++ b/src/logger/OhmLogger.java
@@ -0,0 +1,57 @@
+/*
+ * 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 logger;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.FileHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import logger.myformatter.MyFormatter;
+
+/**
+ *
+ * @author nobody
+ */
+public class OhmLogger
+{
+ private static Logger lg = null;
+
+ public static Logger getLogger()
+ {
+ if (lg == null)
+ {
+ lg = Logger.getLogger("OhmLogger");
+ initLogger();
+ }
+ return lg;
+ }
+
+ private static void initLogger()
+ {
+ try
+ {
+ String datei = System.getProperty("java.io.tmpdir") + File.separator + "log.txt";
+ FileHandler fh = new FileHandler(datei);
+ ConsoleHandler ch = new ConsoleHandler();
+ lg.setUseParentHandlers(false);
+ lg.addHandler(fh);
+ ch.setFormatter(new MyFormatter());
+ lg.addHandler(ch);
+ lg.setLevel(Level.ALL);
+ }
+ catch (IOException ioex)
+ {
+ System.err.println(ioex);
+ }
+ }
+
+ public OhmLogger()
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/src/logger/myformatter/MyFormatter.java b/src/logger/myformatter/MyFormatter.java
new file mode 100644
index 0000000..ba0db8d
--- /dev/null
+++ b/src/logger/myformatter/MyFormatter.java
@@ -0,0 +1,35 @@
+/*
+ * 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 logger.myformatter;
+
+import java.util.Date;
+import java.util.logging.LogRecord;
+import java.util.logging.SimpleFormatter;
+
+/**
+ *
+ * @author nobody
+ */
+public class MyFormatter extends SimpleFormatter
+{
+ private String message;
+ private final Date dat = new Date();
+
+ @Override
+ public String format(LogRecord record)
+ {
+ dat.setTime(record.getMillis());
+ message = "| " + dat + " | " + record.getLevel() + " | "
+ + record.getSourceClassName() + " | " + record.getMessage() + " |\n";
+
+ return message;
+ }
+ public MyFormatter()
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/src/model/VoIP.java b/src/model/VoIP.java
index 02b2f3f..0e6b228 100644
--- a/src/model/VoIP.java
+++ b/src/model/VoIP.java
@@ -30,6 +30,7 @@ import javax.sip.TransactionTerminatedEvent;
import javax.sip.address.*;
import javax.sip.header.*;
import javax.sip.message.*;
+import logger.OhmLogger;
/**
*
@@ -37,6 +38,7 @@ import javax.sip.message.*;
*/
public class VoIP implements SipListenerExt
{
+ 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.
@@ -45,7 +47,7 @@ public class VoIP implements SipListenerExt
AddressFactory addressFactory; // Used to create SIP URIs.
ListeningPoint listeningPoint; // SIP listening IP address/port.
Properties properties; // Other properties.
-
+
private int counter;
private int myPort = 5060;
@@ -56,6 +58,8 @@ public class VoIP implements SipListenerExt
private int branch = hashCode();
Address contactAddress;
private ContactHeader contactHeader;
+
+
public VoIP() //Konstruktor für eigene Daten
{
@@ -64,7 +68,9 @@ public class VoIP implements SipListenerExt
{
//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();
@@ -95,13 +101,12 @@ public class VoIP implements SipListenerExt
public void sendRegister(String serverIP, int serverPort) throws ParseException, InvalidArgumentException, SipException
{
- System.out.println("-----------SendRegister-----------");
+ lg.info("Vorbereiten des Registrierungs Headers");
Address addressto = this.addressFactory.createAddress("sip:192.168.100.11"); //evtl. mit Port: sip:192.168.100.11:5060
- Address addresstob = this.addressFactory.createAddress("sip:192.168.100.11"); //to get example maybe needed
- ToHeader to = this.headerFactory.createToHeader(addresstob, null); // Integer.toString(tag) address + tag
+ ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(tag) address + tag
URI requestURI = addressto.getURI();
CallIdHeader callId = this.sipProvider.getNewCallId();
- FromHeader from = this.headerFactory.createFromHeader(addresstob, String.valueOf(this.tag)); //this.contactAddress
+ FromHeader from = this.headerFactory.createFromHeader(addressto, String.valueOf(this.tag)); //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);
@@ -109,14 +114,39 @@ public class VoIP implements SipListenerExt
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
- //Create Request Header
- System.out.println("----REQUEST HEADER----");
Request request = this.messageFactory.createRequest(requestURI, "REGISTER", callId, cSeq, from, to, via, maxForwards);
request.addHeader(contactHeader);
request.addHeader(allow);
request.addHeader(expire);
+ this.sipProvider.sendRequest(request);
+ lg.info("Erfolgreiches Senden der Registrierung");
+ }
+ public void sendInvitation(String sipaddresse, int serverPort)throws ParseException, InvalidArgumentException, SipException, SdpException
+ {
+ Address addressto = this.addressFactory.createAddress(sipaddresse); //evtl. mit Port: sip:192.168.100.11:5060
+ ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(tag) address + tag
+ URI requestURI = addressto.getURI();
+ CallIdHeader callId = this.sipProvider.getNewCallId();
+ FromHeader from = this.headerFactory.createFromHeader(addressto, String.valueOf(this.tag)); //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");
+ 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, "REGISTER", 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);
+ System.out.println("---Invitation Header---");
System.out.println(request);
this.sipProvider.sendRequest(request);
+ //lg.info("Erfolgreiches Senden der Invitation");
}
@Override
@@ -127,11 +157,11 @@ public class VoIP implements SipListenerExt
@Override
public void processRequest(RequestEvent requestEvent)
{
- System.out.println("----Bekomme Anfrage----");
+ lg.info("Bekomme Anfrage");
//Kommunikation mit Server das man zur Verfügung steht
if ((Request.OPTIONS).equals(requestEvent.getRequest().getMethod())) //Options Anfrage von Server nach erfolgreicher Registrierung
{
- System.out.println("200 OK zu Server");
+ lg.info("Option Request von Server, erstellen 200 OK zu Server");
try
{
Response response = this.messageFactory.createResponse(200, requestEvent.getRequest());
@@ -149,23 +179,23 @@ public class VoIP implements SipListenerExt
response.addHeader(allow);
response.addHeader(allowevents);
this.sipProvider.sendResponse(response);
+ lg.info("Erfolgreiches senden des Headers");
}
catch (ParseException | SipException ex)
{
- Logger.getLogger(VoIP.class.getName()).log(Level.SEVERE, null, ex);
+ lg.getLogger(VoIP.class.getName()).log(Level.SEVERE, null, ex);
}
}
//Aktive Kommunikation
else if ((Request.INVITE).equals(requestEvent.getRequest().getMethod())) // Invite von anderem Benutzer
{
- System.out.println("Hab invitation bekommen");
- System.out.println("Gleich antworte ich");
+ lg.info("Hab Invitation bekommen");
try
{
//Trying Message to Server (Response Trying)
+
System.out.println("----REquest HEader----");
Response responsetry = this.messageFactory.createResponse(100, requestEvent.getRequest());
-
responsetry.addHeader((ViaHeader) requestEvent.getRequest().getHeader("Via"));
responsetry.addHeader((FromHeader) requestEvent.getRequest().getHeader("From"));
responsetry.addHeader((ToHeader) requestEvent.getRequest().getHeader("To"));
@@ -178,7 +208,7 @@ public class VoIP implements SipListenerExt
responsetry.addHeader(supp);
responsetry.addHeader(allow);
this.sipProvider.sendResponse(responsetry);
- System.out.println("Trying ist raus");
+ lg.info("Trying ist raus");
//Ringing Message to Server (Responste Ringing)
Response responsering = this.messageFactory.createResponse(180, requestEvent.getRequest());
@@ -216,44 +246,11 @@ public class VoIP implements SipListenerExt
okandSDP.addHeader(allow);
okandSDP.addHeader(allowevent);
ContentTypeHeader content = headerFactory.createContentTypeHeader("application", "sdp");
-
- //Create Session Description Body
- SdpFactory sdpFactory = SdpFactory.getInstance();
- SessionDescription 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
- String sdpformat[] =
- {
- "0", "4", "18",
- };
- Vector mediavec = new Vector();
- mediavec.add(sdpFactory.createMediaDescription("audio", 6022, 1, "RTP/AVP", sdpformat));
-
- //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", "18 G729A/8000"));
- mediavec.add(sdpFactory.createAttribute("ptime", "20"));
-
- sessionDescription.setAttributes(mediavec);
-
-
- System.out.println("---Beispiel Header---");
- /*
- 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";
- */
okandSDP.addHeader(content);
- okandSDP.setContent(sessionDescription, content);
+ okandSDP.setContent(createSDPHeader(), content);
System.out.println(okandSDP);
this.sipProvider.sendResponse(okandSDP);
- }
+ }
catch (ParseException | SipException | SdpException ex)
{
Logger.getLogger(VoIP.class.getName()).log(Level.SEVERE, null, ex);
@@ -316,23 +313,52 @@ public class VoIP implements SipListenerExt
request.addHeader(allow);
request.addHeader(expire);
request.addHeader(auth);
- //System.out.println(request);
this.sipProvider.sendRequest(request);
}
catch (ParseException | SipException | InvalidArgumentException ex)
{
- Logger.getLogger(VoIP.class.getName()).log(Level.SEVERE, null, ex);
+ lg.getLogger(VoIP.class.getName()).log(Level.SEVERE, null, ex);
}
}
else if (responseEvent.getResponse().getStatusCode() == Response.OK)
{
- //System.out.println("responseEvent.getResponse()" + responseEvent.getResponse());
- System.out.println("Server hat Registrierung akzeptiert");
-
+ lg.info("Erfolgreichen Response (200 OK) bekommen");
}
}
+ public SessionDescription createSDPHeader() 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));
+ sessionDescription.setSessionName(sdpFactory.createSessionName("SIP Call"));
+ sessionDescription.setConnection(sdpFactory.createConnection("IN", "IP4", myIPAddress));
+
+ //Media Body
+ String sdpformat[] =
+ {
+ "0", "4", "18",
+ };
+ Vector mediavec = new Vector();
+ 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", "18 G729A/8000"));
+ mediavec.add(sdpFactory.createAttribute("ptime", "20"));
+
+ sessionDescription.setAttributes(mediavec);
+
+ return sessionDescription;
+ }
@Override
public void processTimeout(TimeoutEvent timeoutEvent)