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

📄 refreshhelper.java

📁 jsr-180 (SIP) 实现源码。可以在真实手机上使用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        refreshListenerCallback(refresh, sipResponse.getStatusCode(),
            sipResponse.getReasonPhrase());
        return;
      }
    }
    catch (Exception exception) {
      Protocol
          .echo("RefreshHandler: problem in response removing refresh task");
      stop(refresh.m_refreshID);
    }
  }

  /**
   * compareAddressURI
   * 
   * @param contacts
   * @param sipHeader
   * @return same one
   */
  private SipHeader compareAddressURI(Vector contacts, SipHeader sipHeader) {
    for (int i = 0; i < contacts.size(); i++) {
      PairStructure t1 = (PairStructure) contacts.elementAt(i);
      SipHeader sipheader1 = new SipHeader(t1.getName(), t1.getValue());
      SipAddress sipaddress = new SipAddress(sipheader1.getValue());
      SipAddress sipaddress1 = new SipAddress(sipHeader.getValue());
      if (sipaddress.getURI().equals(((Object) (sipaddress1.getURI()))))
        return sipheader1;
    }
    return null;
  }

  /**
   * refreshListenerCallback
   * 
   * @param refresh
   * @param statusCode
   * @param reasonPhrase
   */
  private void refreshListenerCallback(Refresh refresh, int statusCode,
      String reasonPhrase) {
    try {
      refresh.m_sipRefreshListener.refreshEvent(refresh.m_refreshID,
          statusCode, reasonPhrase);
    }
    catch (Exception exception) {
      Integer integer = new Integer(refresh.m_refreshID);
      exception.printStackTrace();
      Protocol
          .echo("RefreshHelper: Problem with refresh listener callback, removing the refresh task!");
      if (refresh.m_timer != null)
        refresh.m_timer.cancel();
      m_refreshIDs.remove(((Object) (integer)));
    }
  }

  /**
   * stop
   * 
   * @param refreshID
   */
  public void stop(int refreshID) {
    Integer integer = new Integer(refreshID);
    Refresh b1 = (Refresh) m_refreshIDs.get(((Object) (integer)));
    if (b1 != null) {
      if (b1.m_timer != null)
        b1.m_timer.cancel();
      openContentOutputStream(b1, b1.m_sipHeaders, ((String) (null)), 0, 0);
      m_refreshIDs.remove(((Object) (integer)));
      refreshListenerCallback(b1, 0, "refresh stopped");
    }
  }

  /**
   * update
   * 
   * @param refreshID
   * @param contact
   * @param type
   * @param length
   * @param expires
   * @return OutputStream
   */
  public OutputStream update(int refreshID, String contact[], String type,
      int length, int expires) {
    Refresh b1;
    if (expires == 0) {
      stop(refreshID);
      return null;
    }
    b1 = (Refresh) m_refreshIDs.get(((Object) (new Integer(refreshID))));
    if (b1 != null) {
      if (expires > 0) {
        b1.m_expiresTime = expires;
      }
      if (b1.m_timer != null) {
        b1.m_timer.cancel();
      }
      if (contact != null) {
        Vector vector = null;
        if (b1.m_sipHeaders != null) {
          vector = new Vector(b1.m_sipHeaders.length + contact.length);
          for (int l = 0; l < b1.m_sipHeaders.length; l++) {
            b1.m_sipHeaders[l].setParameter("expires", "0");
            vector.addElement(((Object) (b1.m_sipHeaders[l])));
          }
        }
        else {
          vector = new Vector(contact.length);
        }
        for (int i1 = 0; i1 < contact.length; i1++) {
          SipHeader sipheader = new SipHeader("Contact", contact[i1]);
          for (int k1 = 0; k1 < vector.size(); k1++) {
            SipHeader sipheader2 = (SipHeader) vector.elementAt(k1);
            SipAddress sipaddress = new SipAddress(sipheader.getValue());
            SipAddress sipaddress1 = new SipAddress(sipheader2.getValue());
            if (sipaddress.getURI().equals(((Object) (sipaddress1.getURI())))) {
              vector.removeElementAt(k1);
            }
          }
          vector.addElement(((Object) (sipheader)));
        }

        b1.m_sipHeaders = new SipHeader[vector.size()];
        for (int j1 = 0; j1 < vector.size(); j1++) {
          try {
            SipHeader sipheader1 = (SipHeader) vector.elementAt(j1);
            b1.m_sipHeaders[j1] = sipheader1;
          }
          catch (Exception exception1) {
            ;
          }
        }
      }
      try {
        OutputStream outputstream = openContentOutputStream(b1,
            b1.m_sipHeaders, type, length, expires);
        return outputstream;
      }
      catch (Exception e) {
        e.printStackTrace();
        stop(refreshID);
      }
    }
    return null;
  }

  /**
   * openContentOutputStream
   * 
   * @param refresh
   * @param sipHeader
   * @param contentTypeValue
   * @param contentLength
   * @param expiresTime
   * @return OutputStream
   */
  public synchronized OutputStream openContentOutputStream(Refresh refresh,
      SipHeader sipHeader[], String contentTypeValue, int contentLength,
      int expiresTime) {
    try {
      ClientConnection s2;
      String s3;
      s2 = null;
      if (refresh.m_sipDialog != null) {
        s2 = new ClientConnection(refresh.m_sipDialog);
      }
      else {
        try {
          s2 = new ClientConnection("user@host", 0, false);
          s2.m_sipAddress = refresh.m_sipAddress;
        }
        catch (IOException ioexception) {
          ioexception.printStackTrace();
        }
      }
      s3 = refresh.m_sipRequest.getMethod();
      OutputStream outputstream;
      if (s3.equals("REGISTER")) {
        s2.initRequest(s3,
            ((com.micromethod.sipstack.i.SipConnectionNotifier) (null)));
        SipRequest u1 = (SipRequest) s2.m_sipRequest;
        s2.m_sipRequest = ((SipMessage) (refresh.m_sipRequest));
        s2.m_sipResponse = ((SipMessage) (refresh.m_sipRequest));
        refresh.m_cseqNum++;
        s2.m_sipRequest.removeHeaders("Contact");
        if (expiresTime == 0) {
          s2.addHeader("Contact", "*");
        }
        else {
          for (int k = 0; k < sipHeader.length; k++)
            s2.addHeader("Contact", sipHeader[k].getHeaderValue());

        }
        if (expiresTime != -1) {
          s2.setHeader("Expires", Integer.toString(expiresTime));
        }
        s2.setHeader("CSeq", refresh.m_cseqNum + " " + s3);
        s2.m_sipRequest.setHeader("Via", u1.getHeaderValue("Via"), true);
        Protocol.echo("RefreshTask: Refreshing " + refresh.m_refreshID
            + " method: " + refresh.m_sipRequest.getMethod());
      }
      else {
        s2.initRequest(s3,
            ((com.micromethod.sipstack.i.SipConnectionNotifier) (null)));
        SipRequest u2 = (SipRequest) s2.m_sipRequest;
        s2.m_sipRequest = ((SipMessage) (refresh.m_sipRequest));
        s2.m_sipResponse = ((SipMessage) (refresh.m_sipRequest));
        s2.m_sipRequest.setHeader("To", u2.getHeaderValue("To"), true);
        refresh.m_cseqNum++;
        s2.m_sipRequest.setHeader("CSeq", refresh.m_cseqNum + " "
            + refresh.m_sipRequest.getMethod(), true);
        s2.m_sipRequest.setHeader("Via", u2.getHeaderValue("Via"), true);
        if (expiresTime >= 0) {
          s2.setHeader("Expires", "" + expiresTime);
        }
        Protocol.echo("RefreshTask: Refreshing " + refresh.m_refreshID
            + " method: " + refresh.m_sipRequest.getMethod());
      }
      s2.m_id = refresh.m_refreshID;
      s2.m_sipClientConnectionListenerImpl = this;
      s2.setListener(((SipClientConnectionListener) (this)));
      if (contentTypeValue == null || contentLength <= 0) {
        s2.send();
        return null;
      }
      else {
        s2.setHeader("Content-Type", "" + contentTypeValue);
        s2.setHeader("Content-Length", "" + contentLength);
        outputstream = s2.openContentOutputStream();
        return outputstream;
      }
    }
    catch (Exception exception) {
      exception.printStackTrace();
      return null;
    }
  }

  /**
   * getRefresh
   * 
   * @param sipRequest
   * @return refresh
   */
  private Refresh getRefresh(SipRequest sipRequest) {
    for (Enumeration enumeration = m_refreshIDs.elements(); enumeration
        .hasMoreElements();) {
      Refresh b1 = (Refresh) enumeration.nextElement();
      String s1 = b1.m_sipRequest.getHeaderValue("Call-ID");
      String s2 = sipRequest.getHeaderValue("Call-ID");
      if (s1.equals(((Object) (s2)))) {
        String s3 = b1.m_sipRequest.getHeaderValue("Event");
        String s4 = sipRequest.getHeaderValue("Event");
        if (s3.equals(((Object) (s4)))) {
          String s5 = b1.m_sipRequest.getHeaderValue("From");
          SipHeader sipheader = new SipHeader("from", s5);
          String s6 = sipheader.getParameter("tag");
          String s7 = sipRequest.getHeaderValue("To");
          SipHeader sipheader1 = new SipHeader("to", s7);
          String s8 = sipheader1.getParameter("tag");
          if (s6.equals(((Object) (s8)))) {
            return b1;
          }
        }
      }
    }

    return null;
  }

  /**
   * startedRefresh
   * 
   * @param sipRequest
   */
  protected void startedRefresh(SipRequest sipRequest) {
    Refresh b1;
    b1 = getRefresh(sipRequest);
    if (b1 == null)
      return;
    Integer integer;
    String s1;
    integer = new Integer(b1.m_refreshID);
    s1 = sipRequest.getHeaderValue("Subscription-State");
    if (s1 == null)
      return;
    String s3;
    SipHeader sipheader = new SipHeader("foo", s1);
    String s2 = sipheader.getValue();
    if (s2 != null && s2.equals("terminated")) {
      if (b1.m_timer != null)
        b1.m_timer.cancel();
      m_refreshIDs.remove(((Object) (integer)));
      refreshListenerCallback(b1, 0, sipheader.getParameter("reason"));
      return;
    }
    if (!s2.equals("active")) {
      return;
    }
    s3 = sipheader.getParameter("expires");
    if (s3 == null || s3.equals(""))
      return;
    try {
      int i = Integer.parseInt(s3);
      long l = i * 1000 - m_timeout;
      Protocol.echo("RefreshHandler.gotNotify(): started refresh "
          + b1.m_refreshID + " expires = " + i + " sec, delay = " + l / 1000L
          + " sec");
      ClientTimerTaskImpl a1 = new ClientTimerTaskImpl(b1,
          ((SipHeader[]) (null)));
      synchronized (this) {
        if (b1.m_timer != null)
          b1.m_timer.cancel();
        b1.m_timer = new Timer();
        b1.m_timer.schedule(((TimerTask) (a1)), l);
      }
    }
    catch (Exception exception) {
      exception.printStackTrace();
    }
  }

}

⌨️ 快捷键说明

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