messageprocessing.java
来自「java 开发的sip软电话 源码 jain sip」· Java 代码 · 共 545 行 · 第 1/2 页
JAVA
545 行
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);
}
String contentType = "text/plain";
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);
}
//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){
System.out.println("ERRO:"+e.toString());
}
ClientTransaction messageTransaction = null;
String subscriber = sipManCallback.getFromHeader().getAddress().getURI().toString();
try {
//messageTransaction =
sipManCallback.sipProvider.sendRequest(message);
//.getNewClientTransaction(message);
//
}
catch (TransactionUnavailableException ex) {
throw new CommunicationsException(
"Failed to create messageTransaction.", ex);
}catch(Exception e){
}
/* try {
messageTransaction.sendRawMessage("\0".getBytes(),InetAddress.getByName(Utils.getProperty("net.java.mais.sip.DEFAULT_DOMAIN_NAME")),Integer.parseInt(Utils.getProperty("net.java.mais.sip.REGISTRAR_PORT")));
}catch(Exception e){
}
*/
//return messageTransaction.toString();
} 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 =
Utils.getProperty("net.java.mais.sip.DEFAULT_DOMAIN_NAME");
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 + =
减小字号Ctrl + -
显示快捷键?