<dependencies>
<dependency>
<groupId>javax.sip</groupId>
<artifactId>javax.sip-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>gov.nist.javax.sip</groupId>
<artifactId>jain-sip-ri</artifactId>
<version>1.2.146</version>
</dependency>
</dependencies>
import javax.sip.*;
import javax.sip.header.*;
import javax.sip.message.*;
public class SipCallApp implements SipListener {
private SipFactory sipFactory;
private SipStack sipStack;
private SipProvider sipProvider;
private String localIp = "192.168.0.1";
private int localPort = 5060;
private String remoteIp = "192.168.0.2";
private int remotePort = 5060;
private String username = "user1";
private String password = "password1";
private String toSipUri = "sip:user2@domain.com";
public void init() throws Exception {
sipFactory = SipFactory.getInstance();
sipFactory.setPathName("gov.nist");
sipStack = sipFactory.createSipStack(createProperties());
sipProvider = sipStack.createSipProvider(createListeningPoint());
sipProvider.addSipListener(this);
}
private Properties createProperties() {
Properties properties = new Properties();
properties.setProperty("javax.sip.STACK_NAME", "mySipStack");
properties.setProperty("javax.sip.IP_ADDRESS", localIp);
return properties;
}
private ListeningPoint createListeningPoint() throws Exception {
ListeningPoint listeningPoint = sipStack.createListeningPoint(localIp, localPort, "udp");
return listeningPoint;
}
public void register() throws Exception {
AddressFactory addressFactory = sipFactory.createAddressFactory();
HeaderFactory headerFactory = sipFactory.createHeaderFactory();
Address localAddress = addressFactory.createAddress("sip:" + username + "@" + localIp + ":" + localPort);
ContactHeader contactHeader = headerFactory.createContactHeader(localAddress);
FromHeader fromHeader = headerFactory.createFromHeader(localAddress, null);
ToHeader toHeader = headerFactory.createToHeader(addressFactory.createAddress(toSipUri), null);
CallIdHeader callIdHeader = sipProvider.getNewCallId();
CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(1L, Request.REGISTER);
MaxForwardsHeader maxForwardsHeader = headerFactory.createMaxForwardsHeader(70);
Request request = sipFactory.createRequest(
"REGISTER sip:" + remoteIp + ":" + remotePort + " SIP/2.0\r
\r
",
fromHeader, toHeader, callIdHeader, cSeqHeader, contactHeader, maxForwardsHeader);
request.setHeader(headerFactory.createExpiresHeader(600));
ClientTransaction clientTransaction = sipProvider.getNewClientTransaction(request);
clientTransaction.sendRequest();
}
public void call() throws Exception {
AddressFactory addressFactory = sipFactory.createAddressFactory();
HeaderFactory headerFactory = sipFactory.createHeaderFactory();
Address localAddress = addressFactory.createAddress("sip:" + username + "@" + localIp + ":" + localPort);
ContactHeader contactHeader = headerFactory.createContactHeader(localAddress);
FromHeader fromHeader = headerFactory.createFromHeader(localAddress, null);
ToHeader toHeader = headerFactory.createToHeader(addressFactory.createAddress(toSipUri), null);
CallIdHeader callIdHeader = sipProvider.getNewCallId();
CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(1L, Request.INVITE);
MaxForwardsHeader maxForwardsHeader = headerFactory.createMaxForwardsHeader(70);
Request request = sipFactory.createRequest(
"INVITE sip:" + toSipUri + " SIP/2.0\r
\r
",
fromHeader, toHeader, callIdHeader, cSeqHeader, contactHeader, maxForwardsHeader);
ClientTransaction clientTransaction = sipProvider.getNewClientTransaction(request);
clientTransaction.sendRequest();
}
public void processRequest(RequestEvent requestEvent) {
}
public void processResponse(ResponseEvent responseEvent) {
}
public void processTimeout(TimeoutEvent timeoutEvent) {
}
public void processIOException(IOExceptionEvent exceptionEvent) {
}
public void processTransactionTerminated(TransactionTerminatedEvent event) {
}
public void processDialogTerminated(DialogTerminatedEvent event) {
}
public static void main(String[] args) {
try {
SipCallApp sipApp = new SipCallApp();
sipApp.init();
sipApp.register();
sipApp.call();
} catch (Exception e) {
e.printStackTrace();
}
}
}