/*package*/ void hangup(GsmConnection conn) throws CallStateException {
    if (conn.owner != this) {
      throw new CallStateException(
          "GsmConnection " + conn + "does not belong to GsmCallTracker " + this);
    }

    if (conn == pendingMO) {
      // We're hanging up an outgoing call that doesn't have it's
      // GSM index assigned yet

      if (Phone.DEBUG_PHONE) log("hangup: set hangupPendingMO to true");
      hangupPendingMO = true;
    } else {
      try {
        cm.hangupConnection(conn.getGSMIndex(), obtainCompleteMessage());
      } catch (CallStateException ex) {
        // Ignore "connection not found"
        // Call may have hung up already
        Rlog.w(LOG_TAG, "GsmCallTracker WARN: hangup() on absent connection " + conn);
      }
    }

    conn.onHangupLocal();
  }