Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8abdf7f9 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 9815530 from 867b494f to tm-qpr3-release

Change-Id: Iea336ae17e18ded15a702d439adda653ad6b2d3b
parents 440b1d09 867b494f
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.bluetooth.BluetoothStatsLog;
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -41,8 +42,8 @@ import java.util.HashMap;
 */
public class MetricsLogger {
    private static final String TAG = "BluetoothMetricsLogger";
    private static final String BLOOMFILTER_PATH = "/data/misc/bluetooth/metrics";
    private static final String BLOOMFILTER_FILE = "/devices";
    private static final String BLOOMFILTER_PATH = "/data/misc/bluetooth";
    private static final String BLOOMFILTER_FILE = "/devices_for_metrics";
    public static final String BLOOMFILTER_FULL_PATH = BLOOMFILTER_PATH + BLOOMFILTER_FILE;

    public static final boolean DEBUG = false;
@@ -96,8 +97,19 @@ public class MetricsLogger {
            FileInputStream in = new FileInputStream(new File(path));
            mBloomFilter = BloomFilter.readFrom(in, Funnels.byteArrayFunnel());
            mBloomFilterInitialized = true;
        } catch (IOException e) {
            Log.w(TAG, "MetricsLogger can't read the BloomFilter file");
        } catch (IOException e1) {
            Log.w(TAG, "MetricsLogger can't read the BloomFilter file.");
            byte[] bloomfilterData = DeviceBloomfilterGenerator.hexStringToByteArray(
                    DeviceBloomfilterGenerator.BLOOM_FILTER_DEFAULT);
            try {
                mBloomFilter = BloomFilter.readFrom(
                        new ByteArrayInputStream(bloomfilterData), Funnels.byteArrayFunnel());
                mBloomFilterInitialized = true;
                Log.i(TAG, "The default bloomfilter is used");
                return true;
            } catch (IOException e2) {
                Log.w(TAG, "The default bloomfilter can't be used.");
            }
            return false;
        }
        return true;
@@ -237,7 +249,7 @@ public class MetricsLogger {
    }

    protected boolean logSanitizedBluetoothDeviceName(int metricId, String deviceName) {
        if (!mBloomFilterInitialized) {
        if (!mBloomFilterInitialized || deviceName == null) {
            return false;
        }

+53 −5
Original line number Diff line number Diff line
@@ -70,10 +70,15 @@ static uint8_t* add_attr(uint8_t* p, uint8_t* p_end, tSDP_DISCOVERY_DB* p_db,
 *
 ******************************************************************************/
static uint8_t* sdpu_build_uuid_seq(uint8_t* p_out, uint16_t num_uuids,
                                    Uuid* p_uuid_list) {
                                    Uuid* p_uuid_list, uint16_t& bytes_left) {
  uint16_t xx;
  uint8_t* p_len;

  if (bytes_left < 2) {
    DCHECK(0) << "SDP: No space for data element header";
    return (p_out);
  }

  /* First thing is the data element header */
  UINT8_TO_BE_STREAM(p_out, (DATA_ELE_SEQ_DESC_TYPE << 3) | SIZE_IN_NEXT_BYTE);

@@ -81,9 +86,20 @@ static uint8_t* sdpu_build_uuid_seq(uint8_t* p_out, uint16_t num_uuids,
  p_len = p_out;
  p_out += 1;

  /* Account for data element header and length */
  bytes_left -= 2;

  /* Now, loop through and put in all the UUID(s) */
  for (xx = 0; xx < num_uuids; xx++, p_uuid_list++) {
    int len = p_uuid_list->GetShortestRepresentationSize();

    if (len + 1 > bytes_left) {
      DCHECK(0) << "SDP: Too many UUIDs for internal buffer";
      break;
    } else {
      bytes_left -= (len + 1);
    }

    if (len == Uuid::kNumBytes16) {
      UINT8_TO_BE_STREAM(p_out, (UUID_DESC_TYPE << 3) | SIZE_TWO_BYTES);
      UINT16_TO_BE_STREAM(p_out, p_uuid_list->As16Bit());
@@ -120,6 +136,7 @@ static void sdp_snd_service_search_req(tCONN_CB* p_ccb, uint8_t cont_len,
  uint8_t *p, *p_start, *p_param_len;
  BT_HDR* p_cmd = (BT_HDR*)osi_malloc(SDP_DATA_BUF_SIZE);
  uint16_t param_len;
  uint16_t bytes_left = SDP_DATA_BUF_SIZE;

  /* Prepare the buffer for sending the packet to L2CAP */
  p_cmd->offset = L2CAP_MIN_OFFSET;
@@ -134,9 +151,24 @@ static void sdp_snd_service_search_req(tCONN_CB* p_ccb, uint8_t cont_len,
  p_param_len = p;
  p += 2;

  /* Account for header size, max service record count and
   * continuation state */
  const uint16_t base_bytes = (sizeof(BT_HDR) + L2CAP_MIN_OFFSET +
                               3u + /* service search request header */
                               2u + /* param len */
                               3u + ((p_cont) ? cont_len : 0));

  if (base_bytes > bytes_left) {
    DCHECK(0) << "SDP: Overran SDP data buffer";
    osi_free(p_cmd);
    return;
  }

  bytes_left -= base_bytes;

  /* Build the UID sequence. */
  p = sdpu_build_uuid_seq(p, p_ccb->p_db->num_uuid_filters,
                          p_ccb->p_db->uuid_filters);
                          p_ccb->p_db->uuid_filters, bytes_left);

  /* Set max service record count */
  UINT16_TO_BE_STREAM(p, sdp_cb.max_recs_per_search);
@@ -562,6 +594,7 @@ static void process_service_search_attr_rsp(tCONN_CB* p_ccb, uint8_t* p_reply,
  if ((cont_request_needed) || (!p_reply)) {
    BT_HDR* p_msg = (BT_HDR*)osi_malloc(SDP_DATA_BUF_SIZE);
    uint8_t* p;
    uint16_t bytes_left = SDP_DATA_BUF_SIZE;

    p_msg->offset = L2CAP_MIN_OFFSET;
    p = p_start = (uint8_t*)(p_msg + 1) + L2CAP_MIN_OFFSET;
@@ -575,9 +608,24 @@ static void process_service_search_attr_rsp(tCONN_CB* p_ccb, uint8_t* p_reply,
    p_param_len = p;
    p += 2;

    /* Account for header size, max service record count and
     * continuation state */
    const uint16_t base_bytes = (sizeof(BT_HDR) + L2CAP_MIN_OFFSET +
                                 3u + /* service search request header */
                                 2u + /* param len */
                                 3u + /* max service record count */
                                 ((p_reply) ? (*p_reply) : 0));

    if (base_bytes > bytes_left) {
      sdp_disconnect(p_ccb, SDP_INVALID_CONT_STATE);
      return;
    }

    bytes_left -= base_bytes;

    /* Build the UID sequence. */
    p = sdpu_build_uuid_seq(p, p_ccb->p_db->num_uuid_filters,
                            p_ccb->p_db->uuid_filters);
                            p_ccb->p_db->uuid_filters, bytes_left);

    /* Max attribute byte count */
    UINT16_TO_BE_STREAM(p, sdp_cb.max_attr_list_size);