| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "device/bluetooth/bluetooth_service_record_win.h" | 5 #include "device/bluetooth/bluetooth_service_record_win.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | |
| 10 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| 12 #include "device/bluetooth/bluetooth_init_win.h" | 11 #include "device/bluetooth/bluetooth_init_win.h" |
| 13 #include "device/bluetooth/bluetooth_uuid.h" | 12 #include "device/bluetooth/bluetooth_uuid.h" |
| 14 | 13 |
| 15 namespace { | 14 namespace { |
| 16 | 15 |
| 17 const uint16 kProtocolDescriptorListId = 4; | 16 const uint16_t kProtocolDescriptorListId = 4; |
| 18 const uint16 kRfcommUuid = 3; | 17 const uint16_t kRfcommUuid = 3; |
| 19 const uint16 kUuidId = 1; | 18 const uint16_t kUuidId = 1; |
| 20 | 19 |
| 21 bool AdvanceToSdpType(const SDP_ELEMENT_DATA& sequence_data, | 20 bool AdvanceToSdpType(const SDP_ELEMENT_DATA& sequence_data, |
| 22 SDP_TYPE type, | 21 SDP_TYPE type, |
| 23 HBLUETOOTH_CONTAINER_ELEMENT* element, | 22 HBLUETOOTH_CONTAINER_ELEMENT* element, |
| 24 SDP_ELEMENT_DATA* sdp_data) { | 23 SDP_ELEMENT_DATA* sdp_data) { |
| 25 while (ERROR_SUCCESS == BluetoothSdpGetContainerElementData( | 24 while (ERROR_SUCCESS == BluetoothSdpGetContainerElementData( |
| 26 sequence_data.data.sequence.value, | 25 sequence_data.data.sequence.value, |
| 27 sequence_data.data.sequence.length, | 26 sequence_data.data.sequence.length, |
| 28 element, | 27 element, |
| 29 sdp_data)) { | 28 sdp_data)) { |
| 30 if (sdp_data->type == type) { | 29 if (sdp_data->type == type) { |
| 31 return true; | 30 return true; |
| 32 } | 31 } |
| 33 } | 32 } |
| 34 return false; | 33 return false; |
| 35 } | 34 } |
| 36 | 35 |
| 37 void ExtractChannels(const SDP_ELEMENT_DATA& protocol_descriptor_list_data, | 36 void ExtractChannels(const SDP_ELEMENT_DATA& protocol_descriptor_list_data, |
| 38 bool* supports_rfcomm, | 37 bool* supports_rfcomm, |
| 39 uint8* rfcomm_channel) { | 38 uint8_t* rfcomm_channel) { |
| 40 HBLUETOOTH_CONTAINER_ELEMENT sequence_element = NULL; | 39 HBLUETOOTH_CONTAINER_ELEMENT sequence_element = NULL; |
| 41 SDP_ELEMENT_DATA sequence_data; | 40 SDP_ELEMENT_DATA sequence_data; |
| 42 while (AdvanceToSdpType(protocol_descriptor_list_data, | 41 while (AdvanceToSdpType(protocol_descriptor_list_data, |
| 43 SDP_TYPE_SEQUENCE, | 42 SDP_TYPE_SEQUENCE, |
| 44 &sequence_element, | 43 &sequence_element, |
| 45 &sequence_data)) { | 44 &sequence_data)) { |
| 46 HBLUETOOTH_CONTAINER_ELEMENT inner_sequence_element = NULL; | 45 HBLUETOOTH_CONTAINER_ELEMENT inner_sequence_element = NULL; |
| 47 SDP_ELEMENT_DATA inner_sequence_data; | 46 SDP_ELEMENT_DATA inner_sequence_data; |
| 48 if (AdvanceToSdpType(sequence_data, | 47 if (AdvanceToSdpType(sequence_data, |
| 49 SDP_TYPE_UUID, | 48 SDP_TYPE_UUID, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 } | 96 } |
| 98 } | 97 } |
| 99 | 98 |
| 100 BTH_ADDR ConvertToBthAddr(const std::string& address) { | 99 BTH_ADDR ConvertToBthAddr(const std::string& address) { |
| 101 BTH_ADDR bth_addr = 0; | 100 BTH_ADDR bth_addr = 0; |
| 102 std::string numbers_only; | 101 std::string numbers_only; |
| 103 for (int i = 0; i < 6; ++i) { | 102 for (int i = 0; i < 6; ++i) { |
| 104 numbers_only += address.substr(i * 3, 2); | 103 numbers_only += address.substr(i * 3, 2); |
| 105 } | 104 } |
| 106 | 105 |
| 107 std::vector<uint8> address_bytes; | 106 std::vector<uint8_t> address_bytes; |
| 108 base::HexStringToBytes(numbers_only, &address_bytes); | 107 base::HexStringToBytes(numbers_only, &address_bytes); |
| 109 int byte_position = 0; | 108 int byte_position = 0; |
| 110 for (std::vector<uint8>::reverse_iterator iter = address_bytes.rbegin(); | 109 for (std::vector<uint8_t>::reverse_iterator iter = address_bytes.rbegin(); |
| 111 iter != address_bytes.rend(); | 110 iter != address_bytes.rend(); ++iter) { |
| 112 ++iter) { | |
| 113 bth_addr += *iter * pow(256.0, byte_position); | 111 bth_addr += *iter * pow(256.0, byte_position); |
| 114 byte_position++; | 112 byte_position++; |
| 115 } | 113 } |
| 116 return bth_addr; | 114 return bth_addr; |
| 117 } | 115 } |
| 118 | 116 |
| 119 } // namespace | 117 } // namespace |
| 120 | 118 |
| 121 namespace device { | 119 namespace device { |
| 122 | 120 |
| 123 BluetoothServiceRecordWin::BluetoothServiceRecordWin( | 121 BluetoothServiceRecordWin::BluetoothServiceRecordWin( |
| 124 const std::string& device_address, | 122 const std::string& device_address, |
| 125 const std::string& name, | 123 const std::string& name, |
| 126 const std::vector<uint8>& sdp_bytes, | 124 const std::vector<uint8_t>& sdp_bytes, |
| 127 const BluetoothUUID& gatt_uuid) | 125 const BluetoothUUID& gatt_uuid) |
| 128 : device_bth_addr_(ConvertToBthAddr(device_address)), | 126 : device_bth_addr_(ConvertToBthAddr(device_address)), |
| 129 device_address_(device_address), | 127 device_address_(device_address), |
| 130 name_(name), | 128 name_(name), |
| 131 uuid_(gatt_uuid), | 129 uuid_(gatt_uuid), |
| 132 supports_rfcomm_(false), | 130 supports_rfcomm_(false), |
| 133 rfcomm_channel_(0xFF) { | 131 rfcomm_channel_(0xFF) { |
| 134 // Bluetooth 2.0 | 132 // Bluetooth 2.0 |
| 135 if (sdp_bytes.size() > 0) { | 133 if (sdp_bytes.size() > 0) { |
| 136 LPBYTE blob_data = const_cast<LPBYTE>(&sdp_bytes[0]); | 134 LPBYTE blob_data = const_cast<LPBYTE>(&sdp_bytes[0]); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 153 } | 151 } |
| 154 | 152 |
| 155 bool BluetoothServiceRecordWin::IsEqual( | 153 bool BluetoothServiceRecordWin::IsEqual( |
| 156 const BluetoothServiceRecordWin& other) { | 154 const BluetoothServiceRecordWin& other) { |
| 157 return device_address_ == other.device_address_ && name_ == other.name_ && | 155 return device_address_ == other.device_address_ && name_ == other.name_ && |
| 158 uuid_ == other.uuid_ && supports_rfcomm_ == other.supports_rfcomm_ && | 156 uuid_ == other.uuid_ && supports_rfcomm_ == other.supports_rfcomm_ && |
| 159 rfcomm_channel_ == other.rfcomm_channel_; | 157 rfcomm_channel_ == other.rfcomm_channel_; |
| 160 } | 158 } |
| 161 | 159 |
| 162 } // namespace device | 160 } // namespace device |
| OLD | NEW |