package iax.protocol.user.command;
import iax.protocol.call.Call;
import iax.protocol.frame.InfoElement;
import iax.protocol.frame.ProtocolControlFrame;
import iax.protocol.peer.Peer;
/**
* Implements the user command that starts a new call.
*/
public class NewCall implements UserCommand {
//Current peer
private Peer peer;
//Number (or name of the extension) of the peer to call
private String calledNumber;
/**
* Constructor. Initializes the command with suitable values.
* @param peer Current peer.
* @param calledNumber Number of the peer to be called.
*/
public NewCall(Peer peer, String calledNumber) {
this.peer = peer;
this.calledNumber = calledNumber;
}
public void execute() {
Thread t = new Thread(this);
t.start();
}
public void run() {
try {
Call call = peer.newCall(calledNumber);
ProtocolControlFrame newCallFrame =
new ProtocolControlFrame(call.getSrcCallNo(), false, 0, 0L,
call.getOseqno(),
call.getIseqno(), false,
ProtocolControlFrame.NEW_SC);
newCallFrame.setVersion(InfoElement.IAXVERSION_V);
newCallFrame.setCalledNumber(calledNumber);
newCallFrame.setCallingNumber(peer.getUserName());
newCallFrame.setCapability(InfoElement.GSM_V);
newCallFrame.setFormat(InfoElement.GSM_V);
newCallFrame.setUserName(peer.getUserName());
call.handleSendFrame(newCallFrame);
} catch (Exception e) {
e.printStackTrace();
}
}
}