13f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh/* 23f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Copyright (C) 2017 The Android Open Source Project 33f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * 43f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Licensed under the Apache License, Version 2.0 (the "License"); 53f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * you may not use this file except in compliance with the License. 63f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * You may obtain a copy of the License at 73f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * 83f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * http://www.apache.org/licenses/LICENSE-2.0 93f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * 103f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Unless required by applicable law or agreed to in writing, software 113f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * distributed under the License is distributed on an "AS IS" BASIS, 123f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * See the License for the specific language governing permissions and 143f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * limitations under the License. 153f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh */ 163f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 173f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "chre/apps/wifi_offload/scan_result_message.h" 183f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "chre/apps/wifi_offload/vector_serialization.h" 193f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 203f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehnamespace wifi_offload { 213f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 223f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehvoid ScanResultMessage::SetScanResults(const Vector<ScanResult> &results) { 233f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh scan_results_.clear(); 243f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh scan_results_.reserve(results.size()); 253f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh for (const auto &result : results) { 263f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh scan_results_.emplace_back(result); 273f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh } 283f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh} 293f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 303f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehvoid ScanResultMessage::GetScanResults(Vector<ScanResult> *results) { 313f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh if (results == nullptr) { 323f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh LOGE("ScanResultsMessage output pointer is null in GetScanResults."); 333f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh return; 343f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh } 353f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 363f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh results->clear(); 373f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh results->reserve(scan_results_.size()); 383f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh for (const auto &result : scan_results_) { 393f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh results->emplace_back(result); 403f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh } 413f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh} 423f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 433f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehflatbuffers::Offset<ScanResultMessage::FbsType> ScanResultMessage::Serialize( 443f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh flatbuffers::FlatBufferBuilder *builder) const { 453f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh auto results = SerializeVector(scan_results_, builder); 463f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh return fbs::CreateScanResultMessage(*builder, results); 473f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh} 483f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 493f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehbool ScanResultMessage::Deserialize( 503f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh const ScanResultMessage::FbsType &fbs_result_message) { 513f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh const auto &fbs_results = fbs_result_message.scan_results(); 523f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh if (fbs_results == nullptr || fbs_results->size() == 0) { 533f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh LOGE( 543f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh "Failed to deserialize ScanResultsMessage. Null or incomplete " 553f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh "members."); 563f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh return false; 573f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh } 583f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 593f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh if (!DeserializeVector<ScanResult>(*fbs_results, &scan_results_)) { 603f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh LOGE( 613f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh "Failed to deserialize ScanResultMessage. Null or incomplete members."); 623f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh return false; 633f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh } 643f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 653f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh return true; 663f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh} 673f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh 683f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh} // namespace wifi_offload 69