Browse Source

Ergänzungen

RTP
Jan 5 years ago
parent
commit
fd3cf75524

+ 7
- 1
src/controller/CommandController.java View File



package controller; package controller;


import controller.commands.CommandAnnehmen;
import controller.commands.CommandBeenden;
import controller.commands.CommandInvite; import controller.commands.CommandInvite;
import controller.commands.CommandRegister; import controller.commands.CommandRegister;
import gui.Hauptfenster; import gui.Hauptfenster;
{ {
view.getBtn1().addActionListener(this); view.getBtn1().addActionListener(this);
view.getBtn2().addActionListener(this); view.getBtn2().addActionListener(this);
view.getBtnannehmen().addActionListener(this);
view.getBtnbeenden().addActionListener(this);
} }
public void registerCommands() public void registerCommands()
{ {
invoker.addCommand(view.getBtn1(), new CommandRegister(model, view)); invoker.addCommand(view.getBtn1(), new CommandRegister(model, view));
invoker.addCommand(view.getBtn2(), new CommandInvite(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 @Override
public void actionPerformed(ActionEvent e) public void actionPerformed(ActionEvent e)
{ {
Object key = e.getSource(); Object key = e.getSource();
invoker.executeCommand(key); invoker.executeCommand(key);
} }

+ 56
- 0
src/controller/commands/CommandAnnehmen.java View File

/*
* 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;
}
}

+ 55
- 0
src/controller/commands/CommandBeenden.java View File

/*
* 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;
}
}

+ 3
- 2
src/controller/commands/CommandInvite.java View File

public void execute() public void execute()
{ {
try 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) catch (ParseException|InvalidArgumentException|SdpException|SipException ex)
{ {

+ 1
- 2
src/controller/commands/CommandRegister.java View File

try try
{ {
view.getTxtArea().append("Registrierung an " + view.getTxtServerIP().getText() + " gesendet\n"); 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) catch (ParseException|InvalidArgumentException|SipException ex)

+ 8
- 3
src/gui/Hauptfenster.form View File

<Property name="text" type="java.lang.String" value="Anrufen"/> <Property name="text" type="java.lang.String" value="Anrufen"/>
</Properties> </Properties>
</Component> </Component>
<Component class="javax.swing.JButton" name="jButton1">
<Component class="javax.swing.JButton" name="btnannehmen">
<Properties> <Properties>
<Property name="text" type="java.lang.String" value="Annehmen"/> <Property name="text" type="java.lang.String" value="Annehmen"/>
</Properties> </Properties>
</Component> </Component>
<Component class="javax.swing.JButton" name="btnbeenden">
<Properties>
<Property name="text" type="java.lang.String" value="Beenden"/>
</Properties>
</Component>
</SubComponents> </SubComponents>
</Container> </Container>
<Container class="javax.swing.JPanel" name="jPanel3"> <Container class="javax.swing.JPanel" name="jPanel3">
</Component> </Component>
<Component class="javax.swing.JLabel" name="jLabel3"> <Component class="javax.swing.JLabel" name="jLabel3">
<Properties> <Properties>
<Property name="text" type="java.lang.String" value="Call IP:"/>
<Property name="text" type="java.lang.String" value="Call User:"/>
</Properties> </Properties>
</Component> </Component>
</SubComponents> </SubComponents>
</Component> </Component>
<Component class="javax.swing.JTextField" name="txtcallIP"> <Component class="javax.swing.JTextField" name="txtcallIP">
<Properties> <Properties>
<Property name="text" type="java.lang.String" value="xxx.xxx.xxx.xxx"/>
<Property name="text" type="java.lang.String" value="name"/>
</Properties> </Properties>
</Component> </Component>
</SubComponents> </SubComponents>

+ 26
- 6
src/gui/Hauptfenster.java View File

*/ */
public class Hauptfenster extends javax.swing.JFrame 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 * @return the btn1
*/ */
jPanel1 = new javax.swing.JPanel(); jPanel1 = new javax.swing.JPanel();
btn1 = new javax.swing.JButton(); btn1 = new javax.swing.JButton();
btn2 = 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(); jPanel3 = new javax.swing.JPanel();
jPanel4 = new javax.swing.JPanel(); jPanel4 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel(); jLabel1 = new javax.swing.JLabel();
btn2.setText("Anrufen"); btn2.setText("Anrufen");
jPanel1.add(btn2); 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); getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_END);


jLabel2.setText("Server IP:"); jLabel2.setText("Server IP:");
jPanel4.add(jLabel2); jPanel4.add(jLabel2);


jLabel3.setText("Call IP:");
jLabel3.setText("Call User:");
jPanel4.add(jLabel3); jPanel4.add(jLabel3);


jPanel3.add(jPanel4); jPanel3.add(jPanel4);
txtServerIP.setText("xxx.xxx.xxx.xxx"); txtServerIP.setText("xxx.xxx.xxx.xxx");
jPanel2.add(txtServerIP); jPanel2.add(txtServerIP);


txtcallIP.setText("xxx.xxx.xxx.xxx");
txtcallIP.setText("name");
jPanel2.add(txtcallIP); jPanel2.add(txtcallIP);


jPanel3.add(jPanel2); jPanel3.add(jPanel2);
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btn1; private javax.swing.JButton btn1;
private javax.swing.JButton btn2; 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 jLabel1;
private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel3;

+ 54
- 34
src/model/VoIP.java View File

public class VoIP implements SipListenerExt public class VoIP implements SipListenerExt
{ {
Hauptfenster view; //später entfernen wegen Zugriff 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. SipFactory sipFactory; // Used to access the SIP API.
SipStack sipStack; // The SIP stack. SipStack sipStack; // The SIP stack.
SipProvider sipProvider; // Used to send SIP messages. SipProvider sipProvider; // Used to send SIP messages.
AddressFactory addressFactory; // Used to create SIP URIs. AddressFactory addressFactory; // Used to create SIP URIs.
ListeningPoint listeningPoint; // SIP listening IP address/port. ListeningPoint listeningPoint; // SIP listening IP address/port.
Properties properties; // Other properties. Properties properties; // Other properties.
private int counter; private int counter;
private int myPort = 5060; private int myPort = 5060;


private String myName = "129"; private String myName = "129";
private String protocolTyp = "UDP"; private String protocolTyp = "UDP";
private String myIPAddress; private String myIPAddress;
private String proxyAddress;
Boolean invite;
int tag = (new Random()).nextInt(); int tag = (new Random()).nextInt();
private int branch = hashCode(); private int branch = hashCode();
Address contactAddress; Address contactAddress;
private ContactHeader contactHeader; private ContactHeader contactHeader;


public VoIP(Hauptfenster view) //Konstruktor für eigene Daten public VoIP(Hauptfenster view) //Konstruktor für eigene Daten
{ {
{ {
//wird an sich erstmal nicht gebraucht aber später sinnvoll um eigene Daten zu initialisieren //wird an sich erstmal nicht gebraucht aber später sinnvoll um eigene Daten zu initialisieren
String abc = InetAddress.getLocalHost().getHostAddress(); String abc = InetAddress.getLocalHost().getHostAddress();
/*
invite = true;
this.myIPAddress = InetAddress.getLocalHost().getHostAddress(); this.myIPAddress = InetAddress.getLocalHost().getHostAddress();


this.sipFactory = SipFactory.getInstance(); this.sipFactory = SipFactory.getInstance();
this.sipProvider.addSipListener(this); this.sipProvider.addSipListener(this);
this.contactAddress = this.addressFactory.createAddress("sip:129@" + this.myIPAddress + ":" + this.myPort); //+ ":" + this.myPort this.contactAddress = this.addressFactory.createAddress("sip:129@" + this.myIPAddress + ":" + this.myPort); //+ ":" + this.myPort
this.contactHeader = this.headerFactory.createContactHeader(contactAddress); this.contactHeader = this.headerFactory.createContactHeader(contactAddress);
*/

//proxyAddress = "";
} }
catch (Exception e) catch (Exception e)
{ {
System.out.println("Shit");
System.out.println("Fehler bei Initialisierung eigener Addresse");
System.exit(-1); System.exit(-1);
} }




public void sendRegister(String serverIP, int serverPort) throws ParseException, InvalidArgumentException, SipException 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"); 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 ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(tag) address + tag
URI requestURI = addressto.getURI(); URI requestURI = addressto.getURI();
CallIdHeader callId = this.sipProvider.getNewCallId(); CallIdHeader callId = this.sipProvider.getNewCallId();
this.sipProvider.sendRequest(request); this.sipProvider.sendRequest(request);
lg.info("Erfolgreiches Senden der Registrierung"); 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 ToHeader to = this.headerFactory.createToHeader(addressto, null); // Integer.toString(tag) address + tag
URI requestURI = addressto.getURI(); URI requestURI = addressto.getURI();
CallIdHeader callId = this.sipProvider.getNewCallId(); CallIdHeader callId = this.sipProvider.getNewCallId();
request.addHeader(contactHeader); request.addHeader(contactHeader);
request.addHeader(allow); request.addHeader(allow);
request.addHeader(expire); request.addHeader(expire);
ContentTypeHeader content = headerFactory.createContentTypeHeader("application", "sdp"); ContentTypeHeader content = headerFactory.createContentTypeHeader("application", "sdp");
request.addHeader(content); request.addHeader(content);

request.setContent(createSDPHeader(), content); request.setContent(createSDPHeader(), content);
System.out.println("---Invitation Header---"); System.out.println("---Invitation Header---");
System.out.println(request); System.out.println(request);
//Aktive Kommunikation //Aktive Kommunikation
else if ((Request.INVITE).equals(requestEvent.getRequest().getMethod())) // Invite von anderem Benutzer 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"); lg.info("Hab Invitation bekommen");
try try
{ {
//Trying Message to Server (Response Trying) //Trying Message to Server (Response Trying)
System.out.println("----REquest HEader----");

Response responsetry = this.messageFactory.createResponse(100, requestEvent.getRequest()); Response responsetry = this.messageFactory.createResponse(100, requestEvent.getRequest());
responsetry.addHeader((ViaHeader) requestEvent.getRequest().getHeader("Via")); responsetry.addHeader((ViaHeader) requestEvent.getRequest().getHeader("Via"));
responsetry.addHeader((FromHeader) requestEvent.getRequest().getHeader("From")); responsetry.addHeader((FromHeader) requestEvent.getRequest().getHeader("From"));
responsetry.addHeader(supp); responsetry.addHeader(supp);
responsetry.addHeader(allow); responsetry.addHeader(allow);
this.sipProvider.sendResponse(responsetry); this.sipProvider.sendResponse(responsetry);
view.getTxtArea().append("Trying geschickt");
view.getTxtArea().append("Trying geschickt\n");
lg.info("Trying ist raus"); lg.info("Trying ist raus");


//Ringing Message to Server (Responste Ringing) //Ringing Message to Server (Responste Ringing)
AllowEventsHeader allowevent = this.headerFactory.createAllowEventsHeader("talk,hold");// für was gebraucht AllowEventsHeader allowevent = this.headerFactory.createAllowEventsHeader("talk,hold");// für was gebraucht
responsering.addHeader(allowevent); responsering.addHeader(allowevent);
this.sipProvider.sendResponse(responsering); this.sipProvider.sendResponse(responsering);
view.getTxtArea().append("Ringing geschickt");
view.getTxtArea().append("Ringing geschickt\n");


//Jetzt kommt 200 Ok SIP Header + SDP (SIP/SDP) //Jetzt kommt 200 Ok SIP Header + SDP (SIP/SDP)
//Sdp Header erstellen nächster Schritt //Sdp Header erstellen nächster Schritt
invite = false;
System.out.println(requestEvent.getDialog()); System.out.println(requestEvent.getDialog());
Response okandSDP = this.messageFactory.createResponse(Response.OK, requestEvent.getRequest()); Response okandSDP = this.messageFactory.createResponse(Response.OK, requestEvent.getRequest());
//okandSDP.addHeader((ViaHeader) requestEvent.getRequest().getHeader("Via")); //okandSDP.addHeader((ViaHeader) requestEvent.getRequest().getHeader("Via"));


//Zusätzliche Register Header nach Unauthorzied //Zusätzliche Register Header nach Unauthorzied
//Create Request Header //Create Request Header
System.out.println("----REQUEST HEADER2----");
Request request = this.messageFactory.createRequest(requestURI, "REGISTER", callId, cSeq, from, to, via, maxForwards); Request request = this.messageFactory.createRequest(requestURI, "REGISTER", callId, cSeq, from, to, via, maxForwards);
request.addHeader(contactHeader); request.addHeader(contactHeader);
request.addHeader(allow); request.addHeader(allow);
request.addHeader(expire); request.addHeader(expire);
request.addHeader(auth); request.addHeader(auth);
this.sipProvider.sendRequest(request); this.sipProvider.sendRequest(request);
view.getTxtArea().append("Erfolgreich registriert");
view.getTxtArea().append("Erfolgreich registriert\n");
} }
catch (ParseException | SipException | InvalidArgumentException ex) catch (ParseException | SipException | InvalidArgumentException ex)
{ {
} }


} }

public SessionDescription createSDPHeader() throws SdpException public SessionDescription createSDPHeader() throws SdpException
{ {
/* /*
sessionDescription.setConnection(sdpFactory.createConnection("IN", "IP4", myIPAddress)); sessionDescription.setConnection(sdpFactory.createConnection("IN", "IP4", myIPAddress));


//Media Body //Media Body
String sdpformat[] =
{
"0", "4", "18",
};
Vector mediavec = new Vector(); 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); sessionDescription.setAttributes(mediavec);


return sessionDescription; return sessionDescription;
} }
//Get Methoden falls man mal die Parameter braucht //Get Methoden falls man mal die Parameter braucht
public void cancelcall()
{
}
public String getmyName() public String getmyName()
{ {
return myName; return myName;
} }

public Integer getMyPort() public Integer getMyPort()
{ {
return myPort; return myPort;
} }

public String getMyIPAdress() public String getMyIPAdress()
{ {
return myIPAddress; return myIPAddress;

+ 1
- 1
src/phone/Start.java View File

view.getLblmyIP().setText(InetAddress.getLocalHost().getHostAddress()); view.getLblmyIP().setText(InetAddress.getLocalHost().getHostAddress());
view.getTxtServerIP().setText("192.168.100.11"); view.getTxtServerIP().setText("192.168.100.11");
view.getTxtcallIP().setText("192.168.100.xxx");
view.getTxtcallIP().setText("121");
//view.setExtendedState(view.MAXIMIZED_BOTH); //view.setExtendedState(view.MAXIMIZED_BOTH);
view.setSize(300, 200); view.setSize(300, 200);
view.setTitle("TestOberfläche VoIP Phone"); view.setTitle("TestOberfläche VoIP Phone");

Loading…
Cancel
Save