private void initiateQuery(long bssid) {
    LinkedList<QuerySet> queryEntries = mBssQueues.get(bssid);
    if (queryEntries == null) {
      return;
    } else if (queryEntries.isEmpty()) {
      mBssQueues.remove(bssid);
      return;
    }

    QuerySet querySet = queryEntries.getFirst();
    QueryEntry queryEntry = querySet.peek();
    if (queryEntry.bumpRetry() >= RetryCount) {
      QueryEntry newEntry = querySet.pop();
      if (newEntry == null) {
        // No more entries in this QuerySet, advance to the next set.
        querySet.getOsuInfo().setIconStatus(OSUInfo.IconStatus.NotAvailable);
        queryEntries.removeFirst();
        if (queryEntries.isEmpty()) {
          // No further QuerySet on this BSSID, drop the bucket and bail.
          mBssQueues.remove(bssid);
          return;
        } else {
          querySet = queryEntries.getFirst();
          queryEntry = querySet.peek();
          queryEntry.bumpRetry();
        }
      }
    }
    mOSUManager.doIconQuery(bssid, queryEntry.getKey().getFileName());
  }
    private IconKey updateIcon(String fileName, HSIconFileElement iconFileElement) {
      IconKey key = null;
      for (QueryEntry queryEntry : mEntries) {
        if (queryEntry.getKey().getFileName().equals(fileName)) {
          key = queryEntry.getKey();
        }
      }
      if (key == null) {
        return null;
      }

      if (iconFileElement != null) {
        mOsuInfo.setIconFileElement(iconFileElement, fileName);
      } else {
        mOsuInfo.setIconStatus(OSUInfo.IconStatus.NotAvailable);
      }
      return key;
    }
  public void startIconQuery(OSUInfo osuInfo, List<IconInfo> icons) {
    Log.d("ZXZ", String.format("Icon query on %012x for %s", osuInfo.getBSSID(), icons));
    if (icons == null || icons.isEmpty()) {
      return;
    }

    QuerySet querySet = new QuerySet(osuInfo, icons);
    for (QueryEntry entry : querySet.getAllEntries()) {
      HSIconFileElement iconElement = mCache.get(entry.getKey());
      if (iconElement != null) {
        osuInfo.setIconFileElement(iconElement, entry.getKey().getFileName());
        mOSUManager.iconResults(Arrays.asList(osuInfo));
        return;
      }
    }
    if (enqueue(querySet)) {
      initiateQuery(querySet.getBssid());
    }
  }
    private boolean updateIcon(IconKey key, HSIconFileElement iconFileElement) {
      boolean match = false;
      for (QueryEntry queryEntry : mEntries) {
        if (queryEntry.getKey().equals(key)) {
          match = true;
          break;
        }
      }
      if (!match) {
        return false;
      }

      if (iconFileElement != null) {
        mOsuInfo.setIconFileElement(iconFileElement, key.getFileName());
      } else {
        mOsuInfo.setIconStatus(OSUInfo.IconStatus.NotAvailable);
      }
      return true;
    }