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

📄 servertransaction.java

📁 jsr-180 (SIP) 实现源码。可以在真实手机上使用
💻 JAVA
字号:
package com.micromethod.sipstack.ri;

/**
 * ServerTransaction
 */
public class ServerTransaction extends BaseTransaction {
  /**
   * m_sipConnectionNotifier
   */
  public Notifier m_sipConnectionNotifier = null;

  /**
   * m_sipServerConnection
   */
  public ServerConnection m_sipServerConnection = null;

  /**
   * ServerTransaction Constructor
   * 
   * @param txHandler
   *          txHandler
   * @param sipConnectionNotifier
   *          sipConnectionNotifier
   */
  public ServerTransaction(TxHandler txHandler, Notifier sipConnectionNotifier) {
    m_txHandler = txHandler;
    m_sipConnectionNotifier = sipConnectionNotifier;
    _fldint = 1;
  }

  /**
   * receiveRequest
   * 
   * @param sipRequest
   * @return result, 1:success, -1:fail
   */
  public int receiveRequest(SipRequest sipRequest) {
    try {
      m_lastRequest = sipRequest;
      if (m_lastEffectRequest == null) {
        m_lastEffectRequest = sipRequest;
      }
      else {
        if (m_sipMessage == null
            || !m_sipMessage.compareTo(((SipMessage) (sipRequest)))) {
          ;
        }
        else {
          Protocol
              .echo("---- ServerTransaction.receiveRequest(): Request Already Received: Dropped ----");
          return 0;
        }
      }
      m_sipMessage = ((SipMessage) (sipRequest));
      String s = sipRequest.getMethod();
      switch (_fldint) {
        case 1:
          if (s.equals("INVITE")) {
            setState((short) 4);
          }
          else {
            setState((short) 3);
          }
          m_sipConnectionNotifier.addSipServerConnectionNotifier(
              ((BaseTransaction) (this)), sipRequest);
          return 1;
        case 4:
          resendLastResponse();
          return 1;
        case 5:
          Protocol.echo("ServerTransaction: S_COMPLETED received " + s);
          if (!s.equals("ACK")) {
            Protocol
                .echo("ServerTransaction.receiveRequest(): should we resend last response ?");
            setState((short) 7);
            m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
                .createConfirmTask(((BaseTransaction) (this))))), 10000L);
            return -1;
          }
          else {
            setState((short) 6);
            m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
                .createConfirmTask(((BaseTransaction) (this))))), 10000L);
            return 1;
          }
        case 2:
        case 3:
        default:
          setState((short) 7);
          m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
              .createConfirmTask(((BaseTransaction) (this))))), 10000L);
          return -1;
      }
    }
    catch (Exception exception) {
      exception.printStackTrace();
      return -1;
    }
  }

  /**
   * sendResponse
   * 
   * @param sipResponse
   * @return result, 1:success, -1:fail
   */
  public int sendResponse(SipResponse sipResponse) {
    try {
      int i = 0;
      switch (_fldint) {
        case 3:
        case 4:
          int j = sipResponse.getStatusCode();
          if (99 >= j || j >= 200) {
            if (199 >= j || j >= 300) {
              if (299 >= j || j >= 700) {
                return -1;
              }
              else {
                setState((short) 5);
                Protocol
                    .echo("ServerTransaction: Sending 3xx-699 response -> S_COMPLETED");
                i = routeResponse(((SipMessage) (sipResponse)),
                    ((SipMessage) (m_lastEffectRequest)));
                if (i != 1) {
                  Protocol.echo("Problem routing the response! " + j);
                  return i;
                }
                else {
                  m_response = sipResponse;
                  m_txHandler.resendSipMessage(((SipMessage) (sipResponse)),
                      false);
                  if (this.m_lastRequest.getMethod().equals("INVITE"))
                    m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
                        .createCompletedTask(((BaseTransaction) (this))))),
                        500L);
                  else
                    m_timer
                        .schedule(((java.util.TimerTask) (TimerTaskImpl
                            .createConfirmTask(((BaseTransaction) (this))))),
                            5000L);
                  return 1;
                }
              }
            }
            else {
              i = routeResponse(((SipMessage) (sipResponse)),
                  ((SipMessage) (m_lastEffectRequest)));
              if (i == 1) {
                m_response = sipResponse;
                m_txHandler.resendSipMessage(((SipMessage) (sipResponse)),
                    false);
                if (this.m_lastRequest.getMethod().equals("INVITE")) {
                  setState((short) 7);
                  m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
                      .createConfirmTask(((BaseTransaction) (this))))), 5000L);
                }
                else {
                  setState((short) 5);
                  m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
                      .createConfirmTask(((BaseTransaction) (this))))), 5000L);
                }
              }
              else {
                Protocol.echo("Problem routing the response! " + j);
              }
              return i;
            }
          }
          else {
            setState((short) 4);
            i = routeResponse(((SipMessage) (sipResponse)),
                ((SipMessage) (m_lastEffectRequest)));
            if (i == 1) {
              m_response = sipResponse;
              m_txHandler.resendSipMessage(((SipMessage) (sipResponse)), false);
            }
            else {
              Protocol.echo("Problem routing the response! " + j);
            }
          }
          return i;
        case 2:
        default:
          return -1;
      }
    }
    catch (Exception exception) {
      exception.printStackTrace();
      return -1;
    }
  }

  /**
   * resendLastResponse
   */
  private void resendLastResponse() {
    Protocol.echo("ServerTransaction.resendLastResponse()");
    m_txHandler.resendSipMessage(((SipMessage) (m_response)), true);
  }

  /**
   * ackTimer
   * 
   * @return result, 1:set schedule, -1:not set
   */
  public int ackTimer() {
    // try {
    switch (_fldint) {
      case 5:
        Protocol.echo("ServerTranasction.ackTimer() in COMPLETED state");
        resendLastResponse();
        setState((short) 6);
        m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
            .createConfirmTask(((BaseTransaction) (this))))), 64 * 500);
        return 1;
      case 1:
      default:
        Protocol.echo("ServerTranasction.ackTimer() in state " + _fldint);
        setState((short) 7);
        return -1;
    }
    // }
    // catch (Exception exception) {
    // exception.printStackTrace();
    // return -1;
    // }
  }

  /**
   * transactionTimer
   */
  public void transactionTimer() {
    // try {
    switch (_fldint) {
      case 5: // '\005'
        setState((short) 7);
        m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
            .createConfirmTask(((BaseTransaction) (this))))), 5000L);
      // fall through

      case 6: // '\006'
      case 7: // '\007'
        m_timer.cancel();
        m_txHandler.removeTransaction(((BaseTransaction) (this)));
        setState((short) 8);
        return;
    }
    Protocol
        .echo("ServerTransaction.transactionTimer():transaction timer fired in state: "
            + _fldint);
    // }
    // catch (Exception exception) {
    // exception.printStackTrace();
    // }
  }

}

⌨️ 快捷键说明

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