This tutorial uses NIST SIP JAIN Reference Implementation. Download the NIST source code from here.
Note: To understand the Authorization process for handling 401 response code from server please go through this tutorial.
REGISTER request is used to update the current location of a user on the REGISTRAR server. The application sends a REGISTER message informing the server its current location which in turn is stored in location server. When a caller calls a user the proxy server uses this information to find the location of the callee.
Register request should be sent by the client periodically. The validity of the REGISTER request is determined by the Expires header.
Flow
Sample Request
[code]
REGISTER sip:sip.linphone.org SIP/2.0
Call-ID: 0a0f14355fa76ae6435b98bfe085baf9@223.1.1.128
CSeq: 1 REGISTER
From: <sip:vkslabs@sip.linphone.org>;tag=-1427592833
To: <sip:vkslabs@sip.linphone.org>
Max-Forwards: 70
Via: SIP/2.0/TCP 223.1.1.128:5060;branch=z9hG4bK-323532-2a454f4ec2a4213f6d6928eba479521d
Contact: <sip:vkslabs@223.1.1.128;transport=tcp>
Content-Length: 0
[/code]
Now lets see how to construct the above request using the NIST SIP Stack.
First step is to create a class that implements the SIPListener. Make sure your SIP Stack is Initializing NIST JAIN SIP Stack.
1. Create Call-ID header
[java] CallIdHeader callIdHeader = this.sipProvider.getNewCallId(); [/java]
2. Create CSeq header
[java] CSeqHeader cSeqHeader = this.headerFactory.createCSeqHeader(cseq, "REGISTER"); [/java]
3. Create From header
[java] Address fromAddress = addressFactory.createAddress("sip:" + username + '@' + server);
FromHeader fromHeader = this.headerFactory.createFromHeader(fromAddress, String.valueOf(this.tag));
[/java]
4. Create To Header
[java] ToHeader toHeader = this.headerFactory.createToHeader(fromAddress, null); [/java]
5. Create Max-Forwards header
[java] MaxForwardsHeader maxForwardsHeader = this.headerFactory.createMaxForwardsHeader(70); [/java]
6. Create a Via header
[java]
ArrayList viaHeaders = new ArrayList();
ViaHeader viaHeader = this.headerFactory.createViaHeader(this.ip, this.port, "tcp", null);
viaHeaders.add(viaHeader);
[/java]
7. Create contact header
[java]
this.contactAddress = this.addressFactory.createAddress("sip:" + this.username + '@' + this.ip + "transport=tcp");
// Create the contact header used for all SIP messages.
this.contactHeader = this.headerFactory.createContactHeader(contactAddress);
[/java]
Once all the headers are created it is time to create the request itself.
[java]
request = this.messageFactory.createRequest("REGISTER sip:" + server + "SIP/2.0\r\n\r\n");
request.addHeader(callIdHeader);
request.addHeader(cSeqHeader);
request.addHeader(fromHeader);
request.addHeader(toHeader);
request.addHeader(maxForwardsHeader);
request.addHeader(viaHeader);
request.addHeader(contactHeader);
[/java]
Now that the request object is created with all the necessary headers it is time to send the request.
[java] inviteTid = sipProvider.getNewClientTransaction(request);
// send the request out.
inviteTid.sendRequest();
[/java]
Once the request is sent successfully the response will be passed to the application using the processResponse callback in SIPListener.
[java]
public void processResponse(ResponseEvent responseEvent) {
int statusCode = responseEvent.getResponse().getStatusCode();
}
[/java]
Code
[java]
public void register(Response response) {
try {
cseq++;
ArrayList viaHeaders = new ArrayList();
ViaHeader viaHeader = this.headerFactory.createViaHeader(this.ip,
this.port, "tcp", null);
viaHeaders.add(viaHeader);
// The "Max-Forwards" header.
MaxForwardsHeader maxForwardsHeader = this.headerFactory
.createMaxForwardsHeader(70);
// The "Call-Id" header.
CallIdHeader callIdHeader = this.sipProvider.getNewCallId();
// The "CSeq" header.
CSeqHeader cSeqHeader = this.headerFactory.createCSeqHeader(cseq,
"REGISTER");
Address fromAddress = addressFactory.createAddress("sip:"
+ username + '@' + server);
FromHeader fromHeader = this.headerFactory.createFromHeader(
fromAddress, String.valueOf(this.tag));
// The "To" header.
ToHeader toHeader = this.headerFactory.createToHeader(fromAddress,
null);
// this.contactHeader = this.headerFactory
// .createContactHeader(contactAddress);
request = this.messageFactory.createRequest("REGISTER sip:"
+ server + " SIP/2.0\r\n\r\n");
request.addHeader(callIdHeader);
request.addHeader(cSeqHeader);
request.addHeader(fromHeader);
request.addHeader(toHeader);
request.addHeader(maxForwardsHeader);
request.addHeader(viaHeader);
request.addHeader(contactHeader);
if (response != null) {
retry = true;
AuthorizationHeader authHeader = Utils.makeAuthHeader(headerFactory, response,
request, username, password);
request.addHeader(authHeader);
}
inviteTid = sipProvider.getNewClientTransaction(request);
// send the request out.
inviteTid.sendRequest();
this.dialog = inviteTid.getDialog();
// Send the request statelessly through the SIP provider.
// this.sipProvider.sendRequest(request);
// Display the message in the text area.
logger.debug("Request sent:\n" + request.toString() + "\n\n");
} catch (Exception e) {
// If an error occurred, display the error.
e.printStackTrace();
logger.debug("Request sent failed: " + e.getMessage() + "\n");
}
}
[/java]
Download the complete working code from here.
http://Www.Youtube.com/watch?v=A3ITCszNLSg
ReplyDeleteloansupermart.sg
ReplyDeleteSIP Register Request using JAIN SIP – VKSLabs
I visit day-to-day a few blogs and blogs to read articles, but this blog gives feature
ReplyDeletebased articles.
Full Piece of writing
ReplyDeleteSIP Register Request using JAIN SIP | VKS Labs
Natural bodybuilding supplements
ReplyDeleteSIP Register Request using JAIN SIP | VKS Labs
the full report
ReplyDeleteSIP Register Request using JAIN SIP | VKS Labs
in line 40, utils.makeAuthHeader , this line is causing me a problem saying that there is no such method for Utils, can any1 help please
ReplyDeletePlease could repaire the Download the complete working code link
ReplyDeletehttp://seofornown4eva.com
ReplyDeleteSIP Register Request using JAIN SIP | VKS Labs