diff --git a/src/controller/CommandController.java b/src/controller/CommandController.java index 6e3015b..35ff822 100644 --- a/src/controller/CommandController.java +++ b/src/controller/CommandController.java @@ -6,6 +6,8 @@ package controller; +import controller.commands.CommandAnnehmen; +import controller.commands.CommandBeenden; import controller.commands.CommandInvite; import controller.commands.CommandRegister; import gui.Hauptfenster; @@ -36,6 +38,8 @@ public class CommandController implements ActionListener { view.getBtn1().addActionListener(this); view.getBtn2().addActionListener(this); + view.getBtnannehmen().addActionListener(this); + view.getBtnbeenden().addActionListener(this); } public void registerCommands() { @@ -43,13 +47,15 @@ public class CommandController implements ActionListener invoker.addCommand(view.getBtn1(), new CommandRegister(model, view)); invoker.addCommand(view.getBtn2(), new CommandInvite(model, view)); + invoker.addCommand(view.getBtnannehmen(), new CommandAnnehmen(model,view)); + invoker.addCommand(view.getBtnbeenden(), new CommandBeenden(model, view)); } @Override public void actionPerformed(ActionEvent e) { Object key = e.getSource(); - + invoker.executeCommand(key); } diff --git a/src/controller/commands/CommandAnnehmen.java b/src/controller/commands/CommandAnnehmen.java new file mode 100644 index 0000000..1427197 --- /dev/null +++ b/src/controller/commands/CommandAnnehmen.java @@ -0,0 +1,56 @@ +/* + * 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 controller.commands; + +import controller.CommandInterface; +import gui.Hauptfenster; +import java.util.logging.Logger; +import logger.OhmLogger; +import model.VoIP; + +/** + * + * @author Normal + */ +public class CommandAnnehmen implements CommandInterface +{ + private static final Logger lginvite = OhmLogger.getLogger(); + private VoIP model; + private Hauptfenster view; + public CommandAnnehmen(VoIP model, Hauptfenster view) + { + this.model = model; + this.view = view; + } + + @Override + public void execute() + {/* + try + { + view.getTxtArea().append("Anruf von" + "xxxxxx" + " annehmen?\n"); + model.acceptcall(view.getTxtcallIP().getText(),view.getTxtServerIP().getText(), 5078); + } + catch (ParseException|InvalidArgumentException|SdpException|SipException ex) + { + view.getTxtArea().append("Anruf konnte nicht angenommen werden\n"); + lginvite.getLogger(CommandAnnehmen.class.getName()).log(Level.SEVERE, null, ex); + } +*/ + } + @Override + public void undo() + { + + } + + @Override + public Boolean isundoable() + { + return false; + } +} diff --git a/src/controller/commands/CommandBeenden.java b/src/controller/commands/CommandBeenden.java new file mode 100644 index 0000000..0b5b2e5 --- /dev/null +++ b/src/controller/commands/CommandBeenden.java @@ -0,0 +1,55 @@ +/* + * 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 controller.commands; + +import controller.CommandInterface; +import gui.Hauptfenster; +import java.util.logging.Logger; +import logger.OhmLogger; +import model.VoIP; + +/** + * + * @author Normal + */ +public class CommandBeenden implements CommandInterface +{ + private static final Logger lginvite = OhmLogger.getLogger(); + private VoIP model; + private Hauptfenster view; + public CommandBeenden(VoIP model, Hauptfenster view) + { + this.model = model; + this.view = view; + } + + @Override + public void execute() + {/* + 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); + }*/ + } + @Override + public void undo() + { + + } + + @Override + public Boolean isundoable() + { + return false; + } +} diff --git a/src/controller/commands/CommandInvite.java b/src/controller/commands/CommandInvite.java index 822774f..851453c 100644 --- a/src/controller/commands/CommandInvite.java +++ b/src/controller/commands/CommandInvite.java @@ -36,8 +36,9 @@ public class CommandInvite implements CommandInterface public void execute() { try - { view.getTxtArea().append("Einladung an " + view.getTxtcallIP().getText() + " gesendet\n"); - model.sendInvitation(view.getTxtcallIP().getText(), 5078); + { + view.getTxtArea().append("Einladung an " + view.getTxtcallIP().getText() + " gesendet\n"); + model.sendInvitation(view.getTxtcallIP().getText(),view.getTxtServerIP().getText(), 5078); } catch (ParseException|InvalidArgumentException|SdpException|SipException ex) { diff --git a/src/controller/commands/CommandRegister.java b/src/controller/commands/CommandRegister.java index 4f9d262..3dd3ad3 100644 --- a/src/controller/commands/CommandRegister.java +++ b/src/controller/commands/CommandRegister.java @@ -37,8 +37,7 @@ public class CommandRegister implements CommandInterface try { view.getTxtArea().append("Registrierung an " + view.getTxtServerIP().getText() + " gesendet\n"); - System.out.println("Test: "+ view.getTxtServerIP().getText()); - model.sendRegister(view.getTxtServerIP().getText(), 5078); + model.sendRegister(view.getTxtServerIP().getText(), 5060); } catch (ParseException|InvalidArgumentException|SipException ex) diff --git a/src/gui/Hauptfenster.form b/src/gui/Hauptfenster.form index 1ba00ca..578b956 100644 --- a/src/gui/Hauptfenster.form +++ b/src/gui/Hauptfenster.form @@ -63,11 +63,16 @@ - + + + + + + @@ -99,7 +104,7 @@ - + @@ -124,7 +129,7 @@ - + diff --git a/src/gui/Hauptfenster.java b/src/gui/Hauptfenster.java index 1585c70..e4eeb08 100644 --- a/src/gui/Hauptfenster.java +++ b/src/gui/Hauptfenster.java @@ -11,6 +11,21 @@ package gui; */ public class Hauptfenster extends javax.swing.JFrame { + /** + * @return the btnannehmen + */ + public javax.swing.JButton getBtnannehmen() + { + return btnannehmen; + } + + /** + * @return the btnbeenden + */ + public javax.swing.JButton getBtnbeenden() + { + return btnbeenden; + } /** * @return the btn1 */ @@ -75,7 +90,8 @@ 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(); + btnannehmen = new javax.swing.JButton(); + btnbeenden = new javax.swing.JButton(); jPanel3 = new javax.swing.JPanel(); jPanel4 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); @@ -101,8 +117,11 @@ public class Hauptfenster extends javax.swing.JFrame btn2.setText("Anrufen"); jPanel1.add(btn2); - jButton1.setText("Annehmen"); - jPanel1.add(jButton1); + btnannehmen.setText("Annehmen"); + jPanel1.add(btnannehmen); + + btnbeenden.setText("Beenden"); + jPanel1.add(btnbeenden); getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_END); @@ -116,7 +135,7 @@ public class Hauptfenster extends javax.swing.JFrame jLabel2.setText("Server IP:"); jPanel4.add(jLabel2); - jLabel3.setText("Call IP:"); + jLabel3.setText("Call User:"); jPanel4.add(jLabel3); jPanel3.add(jPanel4); @@ -131,7 +150,7 @@ public class Hauptfenster extends javax.swing.JFrame txtServerIP.setText("xxx.xxx.xxx.xxx"); jPanel2.add(txtServerIP); - txtcallIP.setText("xxx.xxx.xxx.xxx"); + txtcallIP.setText("name"); jPanel2.add(txtcallIP); jPanel3.add(jPanel2); @@ -194,7 +213,8 @@ 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.JButton btnannehmen; + private javax.swing.JButton btnbeenden; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; diff --git a/src/model/VoIP.java b/src/model/VoIP.java index cff79d9..8dac60b 100644 --- a/src/model/VoIP.java +++ b/src/model/VoIP.java @@ -40,7 +40,7 @@ import logger.OhmLogger; public class VoIP implements SipListenerExt { Hauptfenster view; //später entfernen wegen Zugriff - private static final Logger lg = OhmLogger.getLogger(); + 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. @@ -49,19 +49,21 @@ 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; private String myName = "129"; private String protocolTyp = "UDP"; private String myIPAddress; + private String proxyAddress; + + Boolean invite; + int tag = (new Random()).nextInt(); private int branch = hashCode(); Address contactAddress; private ContactHeader contactHeader; - - public VoIP(Hauptfenster view) //Konstruktor für eigene Daten { @@ -70,7 +72,7 @@ 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(); - /* + invite = true; this.myIPAddress = InetAddress.getLocalHost().getHostAddress(); this.sipFactory = SipFactory.getInstance(); @@ -86,11 +88,12 @@ public class VoIP implements SipListenerExt this.sipProvider.addSipListener(this); this.contactAddress = this.addressFactory.createAddress("sip:129@" + this.myIPAddress + ":" + this.myPort); //+ ":" + this.myPort this.contactHeader = this.headerFactory.createContactHeader(contactAddress); - */ + + //proxyAddress = ""; } catch (Exception e) { - System.out.println("Shit"); + System.out.println("Fehler bei Initialisierung eigener Addresse"); System.exit(-1); } @@ -104,12 +107,10 @@ public class VoIP implements SipListenerExt public void sendRegister(String serverIP, int serverPort) throws ParseException, InvalidArgumentException, SipException { - System.out.println("Test"); - System.out.println(serverIP); lg.info("Vorbereiten des Registrierungs Headers"); - //Address addressto = this.addressFactory.createAddress("sip:"+serverIP); //evtl. mit Port: sip:192.168.100.11:5060 - Address addressto = this.addressFactory.createAddress("sip:192.168.100.11"); - System.out.println("Warum" + addressto); + proxyAddress = serverIP + ":"+ serverPort; + Address addressto = this.addressFactory.createAddress("sip:"+proxyAddress); //evtl. mit Port: sip:192.168.100.11:5060 + //Address addressto = this.addressFactory.createAddress("sip:192.168.100.11"); ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(tag) address + tag URI requestURI = addressto.getURI(); CallIdHeader callId = this.sipProvider.getNewCallId(); @@ -128,9 +129,12 @@ public class VoIP implements SipListenerExt this.sipProvider.sendRequest(request); lg.info("Erfolgreiches Senden der Registrierung"); } - public void sendInvitation(String sipaddresse, int serverPort)throws ParseException, InvalidArgumentException, SipException, SdpException + + public void sendInvitation(String sipaddresse, String proxyaddresse, int serverPort) throws ParseException, InvalidArgumentException, SipException, SdpException { - Address addressto = this.addressFactory.createAddress("sip:"+sipaddresse); //evtl. mit Port: sip:192.168.100.11:5060 + invite = true; + Address addressto = this.addressFactory.createAddress("sip:"+sipaddresse+"@"+proxyaddresse); //evtl. mit Port: sip:192.168.100.11:5060 + //Address addressto = this.addressFactory.createAddress("sip:121@192.168.100.11"); ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(tag) address + tag URI requestURI = addressto.getURI(); CallIdHeader callId = this.sipProvider.getNewCallId(); @@ -146,9 +150,10 @@ public class VoIP implements SipListenerExt 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); @@ -197,13 +202,14 @@ public class VoIP implements SipListenerExt //Aktive Kommunikation else if ((Request.INVITE).equals(requestEvent.getRequest().getMethod())) // Invite von anderem Benutzer { - view.getTxtArea().append("Werde von xxx angerufen\n"); + FromHeader abc = (FromHeader) requestEvent.getRequest().getHeader("From"); + String name = abc.getName(); + view.getTxtArea().append("Werde von "+name+" angerufen\n"); 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")); @@ -217,7 +223,7 @@ public class VoIP implements SipListenerExt responsetry.addHeader(supp); responsetry.addHeader(allow); this.sipProvider.sendResponse(responsetry); - view.getTxtArea().append("Trying geschickt"); + view.getTxtArea().append("Trying geschickt\n"); lg.info("Trying ist raus"); //Ringing Message to Server (Responste Ringing) @@ -238,10 +244,11 @@ public class VoIP implements SipListenerExt AllowEventsHeader allowevent = this.headerFactory.createAllowEventsHeader("talk,hold");// für was gebraucht responsering.addHeader(allowevent); this.sipProvider.sendResponse(responsering); - view.getTxtArea().append("Ringing geschickt"); + view.getTxtArea().append("Ringing geschickt\n"); //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")); @@ -316,14 +323,13 @@ public class VoIP implements SipListenerExt //Zusätzliche Register Header nach Unauthorzied //Create Request Header - System.out.println("----REQUEST HEADER2----"); Request request = this.messageFactory.createRequest(requestURI, "REGISTER", callId, cSeq, from, to, via, maxForwards); request.addHeader(contactHeader); request.addHeader(allow); request.addHeader(expire); request.addHeader(auth); this.sipProvider.sendRequest(request); - view.getTxtArea().append("Erfolgreich registriert"); + view.getTxtArea().append("Erfolgreich registriert\n"); } catch (ParseException | SipException | InvalidArgumentException ex) { @@ -337,6 +343,7 @@ public class VoIP implements SipListenerExt } } + public SessionDescription createSDPHeader() throws SdpException { /* @@ -352,33 +359,46 @@ public class VoIP implements SipListenerExt 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")); + if (invite = true) + { + String sdpformat[] = + { + "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")); + } + else + { + } sessionDescription.setAttributes(mediavec); return sessionDescription; } - + //Get Methoden falls man mal die Parameter braucht + public void cancelcall() + { + + } public String getmyName() { return myName; } + public Integer getMyPort() { return myPort; } + public String getMyIPAdress() { return myIPAddress; diff --git a/src/phone/Start.java b/src/phone/Start.java index c82292b..be34773 100644 --- a/src/phone/Start.java +++ b/src/phone/Start.java @@ -29,7 +29,7 @@ public class Start view.getLblmyIP().setText(InetAddress.getLocalHost().getHostAddress()); view.getTxtServerIP().setText("192.168.100.11"); - view.getTxtcallIP().setText("192.168.100.xxx"); + view.getTxtcallIP().setText("121"); //view.setExtendedState(view.MAXIMIZED_BOTH); view.setSize(300, 200); view.setTitle("TestOberfläche VoIP Phone");