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

📄 clienttransaction.java

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

/**
 * ClientTransaction
 */
public class ClientTransaction extends BaseTransaction {
  /**
   * m_sipClientConnection
   */
  public ClientConnection m_sipClientConnection = null;

  /**
   * ClientTransaction Constructor
   * 
   * @param txHandler
   * @param sipClientConnection
   */
  public ClientTransaction(TxHandler txHandler,
      ClientConnection sipClientConnection) {
    m_txHandler = txHandler;
    m_sipClientConnection = sipClientConnection;
    _fldint = 1;
  }

  /**
   * receiveResponse
   * 
   * @param sipResponse
   * @return result, 1:success, -1:fail
   */
  public int receiveResponse(SipResponse sipResponse) {
    try {
      int i = sipResponse.getStatusCode();
      switch (_fldint) {
        case 3:
        case 4:
          if (99 >= i || i >= 200) {
            if (199 >= i || i >= 300) {
              if (299 >= i || i >= 700) {
                return -1;
              }
              else {
                _fldint = 5;
                if (m_lastEffectRequest.getMethod().equals("INVITE")) {
                  m_lastRequest = m_sipClientConnection.createSipRequest("ACK",
                      ((Notifier) (null)));
                  try {
                    m_lastRequest.setHeader("Via", m_lastEffectRequest
                        .getHeaderValue("Via"), true);
                  }
                  catch (Exception exception) {
                  }
                  routeRequest(((SipMessage) (m_lastRequest)));
                  m_txHandler.resendSipMessage(((SipMessage) (m_lastRequest)),
                      false);
                  m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
                      .createCompletedTask(((BaseTransaction) (this))))),
                      15000L);
                }
                else {
                  m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
                      .createConfirmTask(((BaseTransaction) (this))))), 5000L);
                }
                m_sipClientConnection.addNotifyResponse(sipResponse);
                return 1;
              }
            }
            else {
              if (m_lastEffectRequest.getMethod().equals("INVITE")) {
                _fldint = 7;
              }
              else {
                _fldint = 5;
              }
              m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
                  .createConfirmTask(((BaseTransaction) (this))))), 10000L);
              m_sipClientConnection.addNotifyResponse(sipResponse);
              return 1;
            }
          }
          else {
            _fldint = 4;
            m_sipClientConnection.addNotifyResponse(sipResponse);
            return 1;
          }
        case 5:
          if (299 >= i || i >= 700
              || !m_lastEffectRequest.getMethod().equals("INVITE")) {
            Protocol
                .echo("ClientTransaction.receiveResponse ignoring response "
                    + i + " in S_COMPLETED state");
            return 1;
          }
          else {
            routeRequest(((SipMessage) (m_lastRequest)));
            m_txHandler.resendSipMessage(((SipMessage) (m_lastRequest)), true);
            return 1;
          }
        case 7:
          if (199 < i && i < 299
              && m_lastEffectRequest.getMethod().equals("INVITE"))
            m_sipClientConnection.addNotifyResponse(sipResponse);
          Protocol
              .echo("ClientTransaction.receiveResponse just passing up response "
                  + i + " in S_TERMINATED state");
          return 1;
        case 6:
        default:
          throw new IllegalStateException(
              "wrong state in ClientTransaction.receiveResponse()");
      }
    }
    catch (Exception exception1) {
      exception1.printStackTrace();
      return -1;
    }
  }

  /**
   * sendRequest
   * 
   * @param sipRequest
   * @return result, 1:success, -1:fail
   */
  public int sendRequest(SipRequest sipRequest) {
    // try {
    if (m_lastEffectRequest == null) {
      m_lastEffectRequest = sipRequest;
    }
    switch (_fldint) {
      case 1:
      case 3:
        _fldint = 3;
        routeRequest(((SipMessage) (sipRequest)));
        m_txHandler.resendSipMessage(((SipMessage) (sipRequest)), false);
        b = 0;
        _fldnull = 500;
        m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
            .createCallingTask(((BaseTransaction) (this)),
                ((SipMessage) (sipRequest))))), _fldnull);
        return 1;
      case 5:
        throw new IllegalStateException(
            "ClientTransaction.sendRequest S_COMPLETED");
      case 2:
      case 4:
      default:
        throw new IllegalStateException(
            "ClientTransaction.sendRequest default:");
    }
    // }
    // catch (Exception exception) {
    // exception.printStackTrace();
    // return -1;
    // }
  }

  /**
   * reSendRequest
   * 
   * @param sipRequest
   * @return result, 1:success, -1:fail
   */
  public int reSendRequest(SipRequest sipRequest) {
    // try {
    switch (_fldint) {
      case 3:
        if (b != 6) {
          Protocol.echo("ClientTransaction.resendRequest: resend timer fired ");
          routeRequest(((SipMessage) (sipRequest)));
          m_txHandler.resendSipMessage(((SipMessage) (sipRequest)), true);
          _fldnull = Math.min(_fldnull * 2, 4000);
          b++;
          Protocol.echo("ClientTransaction.resend: new Timer E = " + _fldnull);
          m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
              .createCallingTask(((BaseTransaction) (this)),
                  ((SipMessage) (sipRequest))))), _fldnull);
          return 1;
        }
        else {
          Protocol.echo("ClientTransaction.resend: max resend reached");
          _fldnull = 500;
          b = 0;
          m_sipClientConnection.notifyResponse();
          return 1;
        }
      case 4:
        return 1;
      default:
        return 1;
    }
    // }
    // catch (Exception exception) {
    // exception.printStackTrace();
    // return -1;
    // }
  }

  /**
   * ackTimer
   */
  public int ackTimer() {
    // try {
    switch (_fldint) {
      case 5:
        Protocol.echo("ClientTransaction.ackTimer: S_COMPLETED");
        _fldint = 7;
        timeout();
        return 1;
      default:
        return -1;
    }
    // }
    // catch (Exception exception) {
    // exception.printStackTrace();
    // return -1;
    // }
  }

  /**
   * transactionTimer
   */
  public void transactionTimer() {
    // try {
    switch (_fldint) {
      case 5: // '\005'
      case 7: // '\007'
        timeout();
        return;
      default:
        return;
    }
    // }
    // catch (Exception exception) {
    // exception.printStackTrace();
    // }
  }

  /**
   * timeout
   */
  private void timeout() {
    m_timer.cancel();
    m_txHandler.removeTransaction(((BaseTransaction) (this)));
    _fldint = 8;
  }
}

⌨️ 快捷键说明

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