import javax.sip.*;
import javax.sip.address.*;
import javax.sip.header.*;
import javax.sip.message.*;
public class SipUserAgent implements SipListener {
private SipFactory sipFactory;
private SipProvider sipProvider;
private AddressFactory addressFactory;
private MessageFactory messageFactory;
private HeaderFactory headerFactory;
private String serverAddress;
private int serverPort;
private String username;
private String password;
public SipUserAgent(String serverAddress, int serverPort, String username, String password) {
this.serverAddress = serverAddress;
this.serverPort = serverPort;
this.username = username;
this.password = password;
}
public void init() throws Exception {
sipFactory = SipFactory.getInstance();
sipFactory.setPathName("gov.nist");
sipProvider = sipFactory.createSipProvider(
sipFactory.createSipStack(),
new ListeningPoint[] {
sipFactory.createListeningPoint(serverAddress, serverPort, "udp")
});
sipProvider.addSipListener(this);
addressFactory = sipFactory.createAddressFactory();
messageFactory = sipFactory.createMessageFactory();
headerFactory = sipFactory.createHeaderFactory();
}
public void register() throws Exception {
Address fromAddress = addressFactory.createAddress("sip:" + username + "@" + serverAddress + ":" + serverPort);
ContactHeader contactHeader = headerFactory.createContactHeader(addressFactory.createAddress("sip:" + username + "@" + serverAddress + ":" + serverPort));
Request registerRequest = messageFactory.createRequest(
fromAddress.getURI(),
Request.REGISTER,
sipProvider.getNewCallId(),
headerFactory.createCSeqHeader(1L, Request.REGISTER),
headerFactory.createFromHeader(fromAddress, "reg" + System.currentTimeMillis()),
headerFactory.createToHeader(fromAddress, null),
headerFactory.createViaHeader(serverAddress, serverPort, "udp", null),
contactHeader,
headerFactory.createMaxForwardsHeader(70));
registerRequest.addHeader(headerFactory.createAuthorizationHeader("Digest"));
registerRequest.addHeader(headerFactory.createExpiresHeader(3600));
ClientTransaction registerTransaction = sipProvider.getNewClientTransaction(registerRequest);
sipProvider.sendRequest(registerTransaction);
}
@Override
public void processRequest(RequestEvent event) {
}
@Override
public void processResponse(ResponseEvent event) {
}
@Override
public void processTimeout(TimeoutEvent event) {
}
@Override
public void processIOException(IOExceptionEvent event) {
}
@Override
public void processTransactionTerminated(TransactionTerminatedEvent event) {
}
@Override
public void processDialogTerminated(DialogTerminatedEvent event) {
}
}
public class Main {
public static void main(String[] args) {
String serverAddress = "example.com";
int serverPort = 5060;
String username = "alice";
String password = "password";
SipUserAgent userAgent = new SipUserAgent(serverAddress, serverPort, username, password);
try {
userAgent.init();
userAgent.register();
Thread.sleep(5000);
// ...
} catch (Exception e) {
e.printStackTrace();
}
}
}