[Bluetooth] Fix the bug refer to failed tct. advertiseData of startAdvertise method
authorsangrae.kim <sangrae.kim@samsung.com>
Thu, 30 Jul 2015 06:33:09 +0000 (15:33 +0900)
committerHyunJin Park <hj.na.park@samsung.com>
Fri, 31 Jul 2015 01:21:10 +0000 (10:21 +0900)
Change-Id: Ib92b0817c42c3a32a7419f11c09141ee84157fc7
Signed-off-by: sangrae.kim <sangrae.kim@samsung.com>
src/bluetooth/bluetooth_le_adapter.cc

index e56fa11..7b33332 100755 (executable)
@@ -106,11 +106,10 @@ class BluetoothLEServiceData : public ParsedDataHolder {
 class BluetoothLEManufacturerData : public ParsedDataHolder {
  public:
   BluetoothLEManufacturerData()
-      : ParsedDataHolder(),
-        id_(-1) {
+      : ParsedDataHolder() {
   }
 
-  int id() const {
+  const std::string& id() const {
     return id_;
   }
 
@@ -138,12 +137,7 @@ class BluetoothLEManufacturerData : public ParsedDataHolder {
     LoggerD("Entered");
     const auto& id = obj.get("id");
     if (id.is<std::string>()) {
-      try {
-        out->id_ = std::stoi(id.get<std::string>());
-      } catch (...) {
-        LoggerE("Failed to convert string to int: %s", id.get<std::string>().c_str());
-        return false;
-      }
+      out->id_ = id.get<std::string>();
     } else {
       return false;
     }
@@ -164,7 +158,7 @@ class BluetoothLEManufacturerData : public ParsedDataHolder {
     return true;
   }
 
-  int id_;
+  std::string id_;
   std::string data_;
 };
 
@@ -509,13 +503,14 @@ void BluetoothLEAdapter::StartAdvertise(const picojson::value& data, picojson::o
       int (*)(bt_advertiser_h)> advertiser_ptr(advertiser, &bt_adapter_le_destroy_advertiser);  // automatically release the memory
 
   // configure advertiser
-
-  ret = bt_adapter_le_set_advertising_device_name(advertiser, packet_type,
-                                                  advertise_data.include_name());
-  if (BT_ERROR_NONE != ret) {
-    LoggerE("bt_adapter_le_set_advertising_device_name() failed with: %d", ret);
-    ReportError(util::GetBluetoothError(ret, "Failed to create advertiser"), &out);
-    return;
+  if (advertise_data.include_name()) {
+    ret = bt_adapter_le_set_advertising_device_name(advertiser, packet_type,
+                                                advertise_data.include_name());
+    if (BT_ERROR_NONE != ret) {
+      LoggerE("bt_adapter_le_set_advertising_device_name() failed with: %d", ret);
+      ReportError(util::GetBluetoothError(ret, "Failed to create advertiser"), &out);
+      return;
+    }
   }
 
   for (const auto& i : advertise_data.service_uuids()) {
@@ -547,39 +542,49 @@ void BluetoothLEAdapter::StartAdvertise(const picojson::value& data, picojson::o
     return;
   }
 
-  ret = bt_adapter_le_set_advertising_tx_power_level(advertiser, packet_type,
-                                                     advertise_data.include_tx_power_level());
-  if (BT_ERROR_NONE != ret) {
-    LoggerE("bt_adapter_le_set_advertising_tx_power_level() failed with: %d", ret);
-    ReportError(util::GetBluetoothError(ret, "Failed to create advertiser"), &out);
-    return;
+  if (advertise_data.include_tx_power_level()) {
+    ret = bt_adapter_le_set_advertising_tx_power_level(advertiser, packet_type,
+                                                       advertise_data.include_tx_power_level());
+    if (BT_ERROR_NONE != ret) {
+      LoggerE("bt_adapter_le_set_advertising_tx_power_level() failed with: %d", ret);
+      ReportError(util::GetBluetoothError(ret, "Failed to create advertiser"), &out);
+      return;
+    }
   }
 
   const auto& service_data = advertise_data.service_data();
-  ret = bt_adapter_le_add_advertising_service_data(advertiser, packet_type,
-                                                   service_data.uuid().c_str(),
-                                                   service_data.data().c_str(),
-                                                   service_data.data().length());
-  if (BT_ERROR_NONE != ret) {
-    LoggerE("bt_adapter_le_add_advertising_service_data() failed with: %d", ret);
-    ReportError(util::GetBluetoothError(ret, "Failed to create advertiser"), &out);
-    return;
-  }
-
-  const auto& manufacturer_data = advertise_data.manufacturer_data();
-  if (manufacturer_data.valid()) {
-    ret = bt_adapter_le_add_advertising_manufacturer_data(advertiser,
-                                                          packet_type,
-                                                          manufacturer_data.id(),
-                                                          manufacturer_data.data().c_str(),
-                                                          manufacturer_data.data().length());
+  if (service_data.uuid().empty() && service_data.data().empty()) {
+    LoggerD("service data is empty");
+  } else {
+    ret = bt_adapter_le_add_advertising_service_data(advertiser, packet_type,
+                                                     service_data.uuid().c_str(),
+                                                     service_data.data().c_str(),
+                                                     service_data.data().length());
     if (BT_ERROR_NONE != ret) {
-      LoggerE("bt_adapter_le_add_advertising_manufacturer_data() failed with: %d", ret);
+      LoggerE("bt_adapter_le_add_advertising_service_data() failed with: %d", ret);
       ReportError(util::GetBluetoothError(ret, "Failed to create advertiser"), &out);
       return;
     }
   }
 
+  const auto& manufacturer_data = advertise_data.manufacturer_data();
+  if (manufacturer_data.id().empty() && manufacturer_data.data().empty()) {
+    LoggerD("manufacturerData is empty");
+  } else {
+      if (manufacturer_data.valid()) {
+      ret = bt_adapter_le_add_advertising_manufacturer_data(advertiser,
+                                                            packet_type,
+                                                            atoi(manufacturer_data.id().c_str()),
+                                                            manufacturer_data.data().c_str(),
+                                                            manufacturer_data.data().length());
+      if (BT_ERROR_NONE != ret) {
+        LoggerE("bt_adapter_le_add_advertising_manufacturer_data() failed with: %d", ret);
+        ReportError(util::GetBluetoothError(ret, "Failed to create advertiser"), &out);
+        return;
+      }
+    }
+  }
+
   ret = bt_adapter_le_set_advertising_mode(advertiser, mode);
   if (BT_ERROR_NONE != ret) {
     LoggerE("bt_adapter_le_set_advertising_mode() failed with: %d", ret);