📄 messageprocessing.java
字号:
}
// ViaHeaders
ArrayList viaHeaders = sipManCallback.getLocalViaHeaders();
// MaxForwards
MaxForwardsHeader maxForwards = sipManCallback
.getMaxForwardsHeader();
Request message = null;
try {
message = sipManCallback.messageFactory.createRequest(
requestURI, Request.MESSAGE, callIdHeader, cSeqHeader,
fromHeader, toHeader, viaHeaders, maxForwards);
message.setContentLength(contentLengthHeader);
message.setContent(messageBody, contentTypeHeader);
// message.addHeader(eventHeader);
}
catch (Exception e) {
Log.error("sendKeepAlive", e);
}
ClientTransaction messageTransaction = null;
String subscriber = sipManCallback.getFromHeader().getAddress()
.getURI().toString();
try {
messageTransaction = sipManCallback.sipProvider.getNewClientTransaction(message);
} catch (TransactionUnavailableException e) {
e.printStackTrace();
}
try {
((SIPClientTransaction) messageTransaction).sendRequest("\0".getBytes(), InetAddress.getByName(SIPConfig.getDefaultDomain()), SIPConfig.getRegistrarPort());
}
catch (Exception e) {
Log.error("sendKeepAlive", e);
}
}
finally {
try {
this.finalize();
}
catch (Throwable e) {
}
}
}
/**
* Sends an instant message in pager-mode using a SIMPLE/SIP MESSAGE
* request. In pager-mode, each message is independent of any other
* messages. An instant message will be the body of the MESSAGE request to
* be sent, therefore, its format must conform to the values in the
* "Content-Type" and "Content-Encoding" header fields. Refer to Message for
* details.
*
* @param to the address of receiver.
* @param messageBody the message to be sent. The messageBody will be the body of
* the MESSAGE request to be sent and its format must conform to
* the values in the parameters contentType and contentEncoding.
* Please refer to the setBody method for details.
* @param contentType the Internet media type of the messageBody. Please refer to
* the Message.setBody method for details.
* @param contentEncoding the encodings that have been applied to the messageBody in
* addition to those specified by contentType. Please refer to
* the Message.setBody method for details.
* @return the transaction ID associated with the MESSAGE request sent by
* this method.
* @throws CommunicationsException
*/
public java.lang.String sendMessage(java.lang.String to,
byte[] messageBody, java.lang.String contentType,
java.lang.String contentEncoding) throws CommunicationsException {
try {
to = to.trim();
// Handle default domain name (i.e. transform 1234 -> 1234@sip.com
String defaultDomainName = SIPConfig.getDefaultDomain();
if (defaultDomainName != null // no sip scheme
&& !to.trim().startsWith("tel:") && to.indexOf('@') == -1 // most
// probably
// a
// sip
// uri
) {
to = to + "@" + defaultDomainName;
}
// Let's be uri fault tolerant
if (to.toLowerCase().indexOf("sip:") == -1 // no sip scheme
&& to.indexOf('@') != -1 // most probably a sip uri
) {
to = "sip:" + to;
}
// Request URI
URI requestURI;
try {
requestURI = sipManCallback.addressFactory.createURI(to);
}
catch (ParseException ex) {
throw new CommunicationsException(to
+ " is not a legal SIP uri!", ex);
}
// Call ID
CallIdHeader callIdHeader = sipManCallback.sipProvider
.getNewCallId();
// CSeq
CSeqHeader cSeqHeader;
try {
cSeqHeader = sipManCallback.headerFactory.createCSeqHeader(1,
Request.MESSAGE);
}
catch (Exception ex) {
// Shouldn't happen
throw new CommunicationsException(
"An unexpected erro occurred while"
+ "constructing the CSeqHeadder", ex);
}
// FromHeader
FromHeader fromHeader = sipManCallback.getFromHeader();
// ToHeader
Address toAddress = sipManCallback.addressFactory
.createAddress(requestURI);
ToHeader toHeader;
try {
toHeader = sipManCallback.headerFactory.createToHeader(
toAddress, null);
}
catch (ParseException ex) {
// Shouldn't happen
throw new CommunicationsException(
"Null is not an allowed tag for the to header!", ex);
}
ContentTypeHeader contentTypeHeader = null;
try {
String[] contentTypeTab = contentType.split("/");
contentTypeHeader = sipManCallback.headerFactory
.createContentTypeHeader(contentTypeTab[0],
contentTypeTab[1]);
}
catch (ParseException ex) {
throw new CommunicationsException(
"ContentType Header must look like type/subtype!", ex);
}
ContentLengthHeader contentLengthHeader = null;
try {
contentLengthHeader = sipManCallback.headerFactory
.createContentLengthHeader(messageBody.length);
}
catch (InvalidArgumentException ex) {
throw new CommunicationsException(
"Cseq Header must contain a integer value!", ex);
}
/*
* EventHeader eventHeader = null; try { eventHeader =
* sipManCallback.headerFactory.createEventHeader("presence"); }
* catch (ParseException ex) { //Shouldn't happen console.error(
* "Unable to create event header!", ex); throw new
* CommunicationsException( "Unable to create event header!", ex); }
*/
ExpiresHeader expiresHeader = null;
try {
expiresHeader = sipManCallback.headerFactory
.createExpiresHeader(30);
}
catch (InvalidArgumentException ex) {
throw new CommunicationsException(
"Expires Header must be an integer!", ex);
}
// ViaHeaders
ArrayList viaHeaders = sipManCallback.getLocalViaHeaders();
// MaxForwards
MaxForwardsHeader maxForwards = sipManCallback
.getMaxForwardsHeader();
Request message = null;
try {
message = sipManCallback.messageFactory.createRequest(
requestURI, Request.MESSAGE, callIdHeader, cSeqHeader,
fromHeader, toHeader, viaHeaders, maxForwards);
message.setContent(messageBody, contentTypeHeader);
message.setContentLength(contentLengthHeader);
// message.addHeader(eventHeader);
}
catch (ParseException ex) {
throw new CommunicationsException(
"Failed to create message Request!", ex);
}
ClientTransaction messageTransaction = null;
String subscriber = sipManCallback.getFromHeader().getAddress()
.getURI().toString();
try {
messageTransaction = sipManCallback.sipProvider
.getNewClientTransaction(message);
//
}
catch (TransactionUnavailableException ex) {
throw new CommunicationsException(
"Failed to create messageTransaction.", ex);
}
try {
messageTransaction.sendRequest();
}
catch (SipException ex) {
throw new CommunicationsException(
"An error occurred while sending message request", ex);
}
return messageTransaction.toString();
}
finally {
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -