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

📄 sipmanager.java

📁 jtapi for telephone
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    //---------------- received unknown message
    public void fireUnknownMessageReceived(Message message)
    {
        try
        {
            console.logEntry();
            if (console.isDebugEnabled())
            {
                console.debug("unknown message=" + message);
            }
            UnknownMessageEvent evt = new UnknownMessageEvent(message);
            for (int i = listeners.size() - 1; i >= 0; i--)
            {
                ( (CommunicationsListener) listeners.get(i)).
                receivedUnknownMessage(
                evt);
            }
        }
        finally
        {
            console.logExit();
        }
    } //unknown message
    
    //---------------- rejected a call
    public void fireCallRejectedLocally(String reason, Message invite)
    {
        try
        {
            console.logEntry();
            if (console.isDebugEnabled())
            {
                console.debug("locally rejected call. reason="
                + reason
                + "\ninvite message=" + invite);
            }
            CallRejectedEvent evt = new CallRejectedEvent(reason, invite);
            for (int i = listeners.size() - 1; i >= 0; i--)
            {
                ( (CommunicationsListener) listeners.get(i)).
                callRejectedLocally(
                evt);
            }
        }
        finally
        {
            console.logExit();
        }
    }
    
    public void fireCallRejectedRemotely(String reason, Message invite)
    {
        try
        {
            console.logEntry();
            if (console.isDebugEnabled())
            {
                console.debug("call rejected remotely. reason="
                + reason
                + "\ninvite message=" + invite);
            }
            CallRejectedEvent evt = new CallRejectedEvent(reason, invite);
            for (int i = listeners.size() - 1; i >= 0; i--)
            {
                ( (CommunicationsListener) listeners.get(i)).
                callRejectedRemotely(
                evt);
            }
        }
        finally
        {
            console.logExit();
        }
    }
    
    //call rejected
    //---------------- error occurred
    public void fireCommunicationsError(Throwable throwable)
    {
        try
        {
            console.logEntry();
            console.error(throwable);
            CommunicationsErrorEvent evt = new CommunicationsErrorEvent(
            throwable);
            for (int i = listeners.size() - 1; i >= 0; i--)
            {
                ( (CommunicationsListener) listeners.get(i)).
                communicationsErrorOccurred(evt);
            }
        }
        finally
        {
            console.logExit();
        }
    } //error occurred
    
    //============================= SIP LISTENER METHODS ==============================
    public void processRequest(RequestEvent requestReceivedEvent)
    {
        try
        {
            console.logEntry();
            if (console.isDebugEnabled())
            {
                console.debug("received request=" + requestReceivedEvent);
            }
            ServerTransaction serverTransaction = requestReceivedEvent.
            getServerTransaction();
            Request request = requestReceivedEvent.getRequest();
            String method = ( (CSeqHeader) request.getHeader(CSeqHeader.NAME)).getMethod();
            if (serverTransaction == null)
            {
                try
                {
                    serverTransaction = sipProvider.getNewServerTransaction(
                    request);
                }
                catch (TransactionAlreadyExistsException ex)
                {
                    /*fireCommunicationsError(
                        new CommunicationsException(
                        "Failed to create a new server"
                        + "transaction for an incoming request\n"
                        + "(Next message contains the request)",
                        ex));
                    fireUnknownMessageReceived(request);*/
                    //let's not scare the user
                    console.error("Failed to create a new server"
                    + "transaction for an incoming request\n"
                    + "(Next message contains the request)",
                    ex
                    );
                    
                    return;
                }
                catch (TransactionUnavailableException ex)
                {
                    /**
                     * fireCommunicationsError(
                     * new CommunicationsException(
                     * "Failed to create a new server"
                     * + "transaction for an incoming request\n"
                     * + "(Next message contains the request)",
                     * ex));
                     * fireUnknownMessageReceived(request);*/
                    //let's not scare the user
                    console.error("Failed to create a new server"
                    + "transaction for an incoming request\n"
                    + "(Next message contains the request)",
                    ex
                    );
                    return;
                }
            }
            Dialog dialog = serverTransaction.getDialog();
            Request requestClone = (Request) request.clone();
            //INVITE
            if (request.getMethod().equals(Request.INVITE))
            {
                console.debug("received INVITE");
                if(serverTransaction.getDialog().getState() == null)
                {
                    if(console.isDebugEnabled())
                        console.debug("request is an INVITE. Dialog state="
                        +serverTransaction.getDialog().getState());
                    callProcessing.processInvite(serverTransaction, request);
                }
                else
                {
                    console.debug("request is a reINVITE. Dialog state="
                    +serverTransaction.getDialog().getState());
                    callProcessing.processReInvite(serverTransaction, request);
                }
            }
            //ACK
            else if (request.getMethod().equals(Request.ACK))
            {
                if (serverTransaction != null
                && serverTransaction.getDialog().getFirstTransaction().
                getRequest().getMethod().equals(Request.INVITE))
                {
                    callProcessing.processAck(serverTransaction, request);
                }
                else
                {
                    // just ignore
                    console.debug("ignoring ack");
                }
            }
            //BYE
            else if (request.getMethod().equals(Request.BYE))
            {
                if (dialog.getFirstTransaction().getRequest().getMethod().
                equals(
                Request.INVITE))
                {
                    callProcessing.processBye(serverTransaction, request);
                }
            }
            //CANCEL
            else if (request.getMethod().equals(Request.CANCEL))
            {
                if (dialog.getFirstTransaction().getRequest().getMethod().
                equals(
                Request.INVITE))
                {
                    callProcessing.processCancel(serverTransaction, request);
                }
                else
                {
                    sendNotImplemented(serverTransaction, request);
                    fireUnknownMessageReceived(requestReceivedEvent.getRequest());
                }
            }
            //REFER
            else if (request.getMethod().equals(Request.REFER))
            {
                console.debug("Received REFER request");
                transferProcessing.processRefer(serverTransaction, request);
            }
            else if (request.getMethod().equals(Request.INFO))
            {
                /** @todo add proper request handling */
                sendNotImplemented(serverTransaction, request);
                fireUnknownMessageReceived(requestReceivedEvent.getRequest());
            }
            else if (request.getMethod().equals(Request.MESSAGE))
            {
                fireMessageReceived(request);
            }
            else if (request.getMethod().equals(Request.NOTIFY))
            {
                /** @todo add proper request handling */
                //                try {
                //                	watcher.processNotification(request, serverTransaction.getBranchId());
                //                }
                //                catch (CommunicationsException e) {
                //					// TODO: handle exception
                //				}
                sendNotImplemented(serverTransaction, request);
                fireUnknownMessageReceived(requestReceivedEvent.getRequest());
            }
            else if (request.getMethod().equals(Request.OPTIONS))
            {
                /** @todo add proper request handling */
                sendNotImplemented(serverTransaction, request);
                fireUnknownMessageReceived(requestReceivedEvent.getRequest());
            }
            else if (request.getMethod().equals(Request.PRACK))
            {
                /** @todo add proper request handling */
                sendNotImplemented(serverTransaction, request);
                fireUnknownMessageReceived(requestReceivedEvent.getRequest());
            }
            else if (request.getMethod().equals(Request.REGISTER))
            {
                /** @todo add proper request handling */
                sendNotImplemented(serverTransaction, request);
                fireUnknownMessageReceived(requestReceivedEvent.getRequest());
            }
            else if (request.getMethod().equals(Request.SUBSCRIBE))
            {
                /** @todo add proper request handling */
                
                //fireUnknownMessageReceived(requestReceivedEvent.getRequest());
            }
            else if (request.getMethod().equals(Request.UPDATE))
            {
                /** @todo add proper request handling */
                sendNotImplemented(serverTransaction, request);
                fireUnknownMessageReceived(requestReceivedEvent.getRequest());
            }
            else
            {
                //We couldn't recognise the message
                sendNotImplemented(serverTransaction, request);
                fireUnknownMessageReceived(requestReceivedEvent.getRequest());
            }
        }
        finally
        {
            console.logExit();
        }
    }
    
    public void processTimeout(TimeoutEvent transactionTimeOutEvent)
    {
        try
        {
            console.logEntry();
            if (console.isDebugEnabled())
            {
                console.debug("received time out event: "
                + transactionTimeOutEvent);
            }
            Transaction transaction;
            if (transactionTimeOutEvent.isServerTransaction())
            {
                transaction = transactionTimeOutEvent.getServerTransaction();
            }
            else
            {
                transaction = transactionTimeOutEvent.getClientTransaction();
            }
            Request request =
            transaction.getRequest();
            if (request.getMethod().equals(Request.REGISTER))
            {
                registerProcessing.processTimeout(transaction, request);
            }
            else if (request.getMethod().equals(Request.INVITE))
            {
                callProcessing.processTimeout(transaction, request);
            }
            else
            {
                //Just show an error for now
                Console.showError("TimeOut Error!",
                "Received a TimeoutEvent while waiting on a message"
                + "\n(Check Details to see the message that caused it)",
                request.toString()
                );
            }
        }
        finally
        {
            console.logExit();
        }
    }
    
    //-------------------- PROCESS RESPONSE
    public void processResponse(ResponseEvent responseReceivedEvent)
    {
        try
        {
            console.logEntry();
            if (console.isDebugEnabled())
            {
                console.debug("received response=" + responseReceivedEvent);
            }
            ClientTransaction clientTransaction = responseReceivedEvent.
            getClientTransaction();
            if (clientTransaction == null)
            {
                console.debug("ignoring a transactionless response");
                return;
            }
            Response response = responseReceivedEvent.getResponse();
            Dialog dialog = clientTransaction.getDialog();
            String method = ( (CSeqHeader) response.getHeader(CSeqHeader.NAME)).
            getMethod();
            Response responseClone = (Response) response.clone();
            //OK
            if (response.getStatusCode() == Response.OK)
            {
                //REGISTER
                if (method.equals(Request.REGISTER))
                {
                    registerProcessing.processOK(clientTransaction, response);
                }//INVITE
                else if (method.equals(Request.INVITE))
                {
                    callProcessing.processInviteOK(clientTransaction, response);
                }//BYE
                else if (me

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -