⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 messageprocessing.java

📁 开源项目openfire的完整源程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            }

            // 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 + -