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 + -
显示快捷键?