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

📄 sipmanager.java.svn-base

📁 开源项目openfire的完整源程序
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
            ContactHeader contactHeader = null;
            try {
                contactHeader = getContactHeader();
                ok.addHeader(contactHeader);
                attachToTag(ok, dialog);
                System.err.println(ok.toString());
                serverTransaction.sendResponse(ok);
            } catch (CommunicationsException e) {
                e.printStackTrace();
            } catch (InvalidArgumentException e) {
                e.printStackTrace();
            } catch (SipException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }

            fireMessageReceived(request);

            return;
        }


        Request requestClone = (Request) request.clone();
        // INVITE
        if (request.getMethod().equals(Request.INVITE)) {

            if (serverTransaction.getDialog().getState() == null) {
                callProcessing.processInvite(serverTransaction, request);
            } else {
                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

            }
        }
        // BYE
        else if (request.getMethod().equals(Request.BYE)) {
            if (dialog.getFirstTransaction().getRequest().getMethod()
                    .equals(Request.INVITE) || dialog.getFirstTransaction().getRequest().getMethod()
                    .equals(Request.REFER)) {
                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)) {
            transferProcessing.processRefer(serverTransaction, request);
        } else if (request.getMethod().equals(Request.INFO)) {
            /** @todo add proper request handling */
            fireMessageReceived(request);
        } else if (request.getMethod().equals(Request.MESSAGE)) {
            messageProcessing.processMessageRequest(serverTransaction,
                    request);
            fireMessageReceived(request);
        } 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)) {

        } else if (request.getMethod().equals(Request.UPDATE)) {
            /** @todo add proper request handling */
            sendNotImplemented(serverTransaction, request);
            fireUnknownMessageReceived(requestReceivedEvent.getRequest());
        } else if (request.getMethod().equals(Request.INFO)) {
            sendNotImplemented(serverTransaction, request);
            fireUnknownMessageReceived(requestReceivedEvent.getRequest());
        } else {
            // We couldn't recognise the message
            sendNotImplemented(serverTransaction, request);
            fireUnknownMessageReceived(requestReceivedEvent.getRequest());
        }
    }

    public void processTimeout(TimeoutEvent 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
        }
    }

    // -------------------- PROCESS RESPONSE
    public void processResponse(ResponseEvent responseReceivedEvent) {
        Log.debug("<RESPONSE>");
        Log.debug("[" + responseReceivedEvent.getResponse().getStatusCode()
                + "]");
        Log.debug("</RESPONSE>");

        ClientTransaction clientTransaction = responseReceivedEvent
                .getClientTransaction();
        if (clientTransaction == null) {
            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 (method.equals(Request.BYE)) {
                callProcessing.processByeOK(clientTransaction, response);
            }// CANCEL
            else if (method.equals(Request.CANCEL)) {
                callProcessing.processCancelOK(clientTransaction, response);
            } else if (method.equals(Request.SUBSCRIBE)) {

            }

        }
        // SESSION PROGRESS
        else if (response.getStatusCode() == Response.SESSION_PROGRESS) {
            callProcessing.processRingingBack(clientTransaction, response);
        }
        // ACCEPTED
        else if (response.getStatusCode() == Response.ACCEPTED) {
            // SUBSCRIBE
            if (method.equals(Request.SUBSCRIBE)) {
            } else if (method.equals(Request.REFER)) {
                Call call = callProcessing.getCallDispatcher().findCall(clientTransaction.getDialog());
                try {
                    callProcessing.endCall(call);
                }
                catch (CommunicationsException e) {
                    Log.error("Trasnfer", e);
                }
            }
        }
        // RINGING - process RINGING before treating the general case of a
        // provisional response (see next "else if")
        // report and fix - Asa Karlsson
        else if (response.getStatusCode() == Response.RINGING) {
            if (method.equals(Request.INVITE)) {
                callProcessing.processRinging(clientTransaction, response);
            } else {
                fireUnknownMessageReceived(response);
            }
        }
        // TRYING
        else if (response.getStatusCode() == Response.TRYING
                // process all provisional responses here
                // reported by Les Roger Davis
                || response.getStatusCode() / 100 == 1) {
            if (method.equals(Request.INVITE)) {
                callProcessing.processTrying(clientTransaction, response);
            }
            // We could also receive a TRYING response to a REGISTER req
            // bug reports by
            // Steven Lass <sltemp at comcast.net>
            // Luis Vazquez <luis at teledata.com.uy>
            else if (method.equals(Request.REGISTER)) {
                // do nothing
            } else {
                // TODO TRYING // fireUnknownMessageReceived(response);
            }
        }
        // NOT_FOUND
        else if (response.getStatusCode() == Response.NOT_FOUND) {
            if (method.equals(Request.INVITE)) {
                callProcessing.processNotFound(clientTransaction, response);
            }
            if (method.equals(Request.SUBSCRIBE)) {
            } else if (method.equals(Request.REGISTER)) {
                fireRegistrationFailed("Invalid username.", RegistrationEvent.Type.NotFound);
                Log.debug("REGISTER NOT FOUND");

            }
        }
        // NOT_IMPLEMENTED
        else if (response.getStatusCode() == Response.NOT_IMPLEMENTED) {
            if (method.equals(Request.REGISTER)) {
                // Fixed typo issues - Reported by pizarro
                registerProcessing.processNotImplemented(clientTransaction,
                        response);
            } else if (method.equals(Request.INVITE)) {
                callProcessing.processNotImplemented(clientTransaction,
                        response);
            } else {
                fireUnknownMessageReceived(response);
            }
        }
        // REQUEST_TERMINATED
        else if (response.getStatusCode() == Response.REQUEST_TERMINATED) {
            callProcessing.processRequestTerminated(clientTransaction,
                    response);
        }
        // BUSY_HERE
        else if (response.getStatusCode() == Response.BUSY_HERE) {
            if (method.equals(Request.INVITE)) {
                callProcessing.processBusyHere(clientTransaction, response);
            } else {
                fireUnknownMessageReceived(response);
            }
        }
        // 401 UNAUTHORIZED
        else if (response.getStatusCode() == Response.UNAUTHORIZED
                || response.getStatusCode() == Response.PROXY_AUTHENTICATION_REQUIRED) {
            if (method.equals(Request.INVITE)) {
                callProcessing.processAuthenticationChallenge(
                        clientTransaction, response);
            } else if (method.equals(Request.REGISTER)) {

                CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME);
                if (cseq.getSeqNumber() < 2)
                    registerProcessing.processAuthenticationChallenge(
                            clientTransaction, response);
                else
                    fireRegistrationFailed("Invalid password.", RegistrationEvent.Type.WrongPass);

            } else if (method.equals(Request.SUBSCRIBE)) {
            } else
                fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.FORBIDDEN) {

        } else if (response.getStatusCode() == 403) {
            // Wrong Authorization User
            fireRegistrationFailed("Invalid auth user.", RegistrationEvent.Type.WrongAuthUser);
        }
        // Other Errors
        else if ( // We'll handle all errors the same way so no individual
            // handling
            // is needed
            // response.getStatusCode() == Response.NOT_ACCEPTABLE
            // || response.getStatusCode() == Response.SESSION_NOT_ACCEPTABLE
                response.getStatusCode() / 100 == 4) {
            if (method.equals(Request.INVITE)) {
                callProcessing
                        .processCallError(clientTransaction, response);
            } else {
                fireUnknownMessageReceived(response);
            }

        } else if (response.getStatusCode() == Response.ACCEPTED) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.ADDRESS_INCOMPLETE) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.ALTERNATIVE_SERVICE) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.AMBIGUOUS) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.BAD_EVENT) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.BAD_EXTENSION) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.BAD_GATEWAY) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.BAD_REQUEST) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.BUSY_EVERYWHERE) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.CALL_IS_BEING_FORWARDED) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.CALL_OR_TRANSACTION_DOES_NOT_EXIST) {
            /** @todo add proper request handling */
            // fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.DECLINE) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.DOES_NOT_EXIST_ANYWHERE) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.EXTENSION_REQUIRED) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.GONE) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.INTERVAL_TOO_BRIEF) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.LOOP_DETECTED) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.MESSAGE_TOO_LARGE) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.METHOD_NOT_ALLOWED) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.MOVED_PERMANENTLY) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else if (response.getStatusCode() == Response.MOVED_TEMPORARILY) {
            /** @todo add proper request handling */
            fireUnknownMessageReceived(response);
        } else i

⌨️ 快捷键说明

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