Bug fix of HE cap parsing for HE device capability am: d057297e3a am: 8b1f606fe8

Original change: https://googleplex-android-review.googlesource.com/c/platform/system/connectivity/wificond/+/11818901

Change-Id: Id539e9a41444d9b9556217f77680d908687f1dc7
diff --git a/METADATA b/METADATA
new file mode 100644
index 0000000..d97975c
--- /dev/null
+++ b/METADATA
@@ -0,0 +1,3 @@
+third_party {
+  license_type: NOTICE
+}
diff --git a/server.cpp b/server.cpp
index 97fbd1e..2f7104b 100644
--- a/server.cpp
+++ b/server.cpp
@@ -39,6 +39,7 @@
 using android::wifi_system::InterfaceTool;
 
 using std::endl;
+using std::optional;
 using std::placeholders::_1;
 using std::string;
 using std::stringstream;
@@ -241,7 +242,7 @@
 }
 
 Status Server::getAvailable2gChannels(
-    std::unique_ptr<vector<int32_t>>* out_frequencies) {
+    std::optional<vector<int32_t>>* out_frequencies) {
   BandInfo band_info;
   ScanCapabilities scan_capabilities_ignored;
   WiphyFeatures wiphy_features_ignored;
@@ -250,17 +251,16 @@
                                     &scan_capabilities_ignored,
                                     &wiphy_features_ignored)) {
     LOG(ERROR) << "Failed to get wiphy info from kernel";
-    out_frequencies->reset(nullptr);
+    out_frequencies->reset();
     return Status::ok();
   }
 
-  out_frequencies->reset(
-      new vector<int32_t>(band_info.band_2g.begin(), band_info.band_2g.end()));
+  out_frequencies->emplace(band_info.band_2g.begin(), band_info.band_2g.end());
   return Status::ok();
 }
 
 Status Server::getAvailable5gNonDFSChannels(
-    std::unique_ptr<vector<int32_t>>* out_frequencies) {
+    std::optional<vector<int32_t>>* out_frequencies) {
   BandInfo band_info;
   ScanCapabilities scan_capabilities_ignored;
   WiphyFeatures wiphy_features_ignored;
@@ -269,17 +269,16 @@
                                     &scan_capabilities_ignored,
                                     &wiphy_features_ignored)) {
     LOG(ERROR) << "Failed to get wiphy info from kernel";
-    out_frequencies->reset(nullptr);
+    out_frequencies->reset();
     return Status::ok();
   }
 
-  out_frequencies->reset(
-      new vector<int32_t>(band_info.band_5g.begin(), band_info.band_5g.end()));
+  out_frequencies->emplace(band_info.band_5g.begin(), band_info.band_5g.end());
   return Status::ok();
 }
 
 Status Server::getAvailableDFSChannels(
-    std::unique_ptr<vector<int32_t>>* out_frequencies) {
+    std::optional<vector<int32_t>>* out_frequencies) {
   BandInfo band_info;
   ScanCapabilities scan_capabilities_ignored;
   WiphyFeatures wiphy_features_ignored;
@@ -288,17 +287,17 @@
                                     &scan_capabilities_ignored,
                                     &wiphy_features_ignored)) {
     LOG(ERROR) << "Failed to get wiphy info from kernel";
-    out_frequencies->reset(nullptr);
+    out_frequencies->reset();
     return Status::ok();
   }
 
-  out_frequencies->reset(new vector<int32_t>(band_info.band_dfs.begin(),
-                                             band_info.band_dfs.end()));
+  out_frequencies->emplace(band_info.band_dfs.begin(),
+                           band_info.band_dfs.end());
   return Status::ok();
 }
 
 Status Server::getAvailable6gChannels(
-    std::unique_ptr<vector<int32_t>>* out_frequencies) {
+    std::optional<vector<int32_t>>* out_frequencies) {
   BandInfo band_info;
   ScanCapabilities scan_capabilities_ignored;
   WiphyFeatures wiphy_features_ignored;
@@ -307,18 +306,17 @@
                                     &scan_capabilities_ignored,
                                     &wiphy_features_ignored)) {
     LOG(ERROR) << "Failed to get wiphy info from kernel";
-    out_frequencies->reset(nullptr);
+    out_frequencies->reset();
     return Status::ok();
   }
 
-  out_frequencies->reset(
-      new vector<int32_t>(band_info.band_6g.begin(), band_info.band_6g.end()));
+  out_frequencies->emplace(band_info.band_6g.begin(), band_info.band_6g.end());
   return Status::ok();
 }
 
 Status Server::getDeviceWiphyCapabilities(
     const std::string& iface_name,
-    std::unique_ptr<DeviceWiphyCapabilities>* capabilities) {
+    std::optional<DeviceWiphyCapabilities>* capabilities) {
   if (!RefreshWiphyIndex(iface_name)) {
     capabilities = nullptr;
     return Status::ok();
@@ -336,15 +334,15 @@
     return Status::ok();
   }
 
-  capabilities->reset(new DeviceWiphyCapabilities());
+  capabilities->emplace();
 
-  capabilities->get()->is80211nSupported_  = band_info.is_80211n_supported;
-  capabilities->get()->is80211acSupported_ = band_info.is_80211ac_supported;
-  capabilities->get()->is80211axSupported_ = band_info.is_80211ax_supported;
-  capabilities->get()->is160MhzSupported_ = band_info.is_160_mhz_supported;
-  capabilities->get()->is80p80MhzSupported_ = band_info.is_80p80_mhz_supported;
-  capabilities->get()->maxTxStreams_ = band_info.max_tx_streams;
-  capabilities->get()->maxRxStreams_ = band_info.max_rx_streams;
+  capabilities->value().is80211nSupported_  = band_info.is_80211n_supported;
+  capabilities->value().is80211acSupported_ = band_info.is_80211ac_supported;
+  capabilities->value().is80211axSupported_ = band_info.is_80211ax_supported;
+  capabilities->value().is160MhzSupported_ = band_info.is_160_mhz_supported;
+  capabilities->value().is80p80MhzSupported_ = band_info.is_80p80_mhz_supported;
+  capabilities->value().maxTxStreams_ = band_info.max_tx_streams;
+  capabilities->value().maxRxStreams_ = band_info.max_rx_streams;
 
   return Status::ok();
 }
diff --git a/server.h b/server.h
index 982bf12..8477671 100644
--- a/server.h
+++ b/server.h
@@ -56,16 +56,16 @@
           callback) override;
   // Returns a vector of available frequencies for 2.4GHz channels.
   android::binder::Status getAvailable2gChannels(
-      ::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override;
+      ::std::optional<::std::vector<int32_t>>* out_frequencies) override;
   // Returns a vector of available frequencies for 5GHz non-DFS channels.
   android::binder::Status getAvailable5gNonDFSChannels(
-      ::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override;
+      ::std::optional<::std::vector<int32_t>>* out_frequencies) override;
   // Returns a vector of available frequencies for DFS channels.
   android::binder::Status getAvailableDFSChannels(
-      ::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override;
+      ::std::optional<::std::vector<int32_t>>* out_frequencies) override;
   // Returns a vector of available frequencies for 6GHz channels.
   android::binder::Status getAvailable6gChannels(
-      ::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override;
+      ::std::optional<::std::vector<int32_t>>* out_frequencies) override;
 
   android::binder::Status createApInterface(
       const std::string& iface_name,
@@ -96,7 +96,7 @@
   // Returns device wiphy capabilities for an interface
   android::binder::Status getDeviceWiphyCapabilities(
       const std::string& iface_name,
-      ::std::unique_ptr<net::wifi::nl80211::DeviceWiphyCapabilities>* capabilities) override;
+      ::std::optional<net::wifi::nl80211::DeviceWiphyCapabilities>* capabilities) override;
 
  private:
   // Request interface information from kernel and setup local interface object.