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/preferred_network.h"
183f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
193f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehnamespace wifi_offload {
203f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
213f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi AlizadehPreferredNetwork::PreferredNetwork() : security_modes_(SecurityMode::UNKNOWN) {}
223f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
233f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehbool PreferredNetwork::operator==(const PreferredNetwork &other) const {
243f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  if (this == &other) {
253f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    return true;
263f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  }
273f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  return ssid_ == other.ssid_ && security_modes_ == other.security_modes_;
283f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
293f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
303f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehflatbuffers::Offset<PreferredNetwork::FbsType> PreferredNetwork::Serialize(
313f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    flatbuffers::FlatBufferBuilder *builder) const {
323f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  return fbs::CreatePreferredNetwork(*builder, ssid_.Serialize(builder),
333f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh                                     security_modes_);
343f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
353f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
363f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehbool PreferredNetwork::Deserialize(
373f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    const PreferredNetwork::FbsType &fbs_network) {
383f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  const auto &fbs_ssid = fbs_network.ssid();
393f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  if (fbs_ssid == nullptr || !ssid_.Deserialize(*fbs_ssid)) {
403f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    LOGE("Failed to deserialize PreferredNetwork. Null or incomplete members.");
413f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    return false;
423f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  }
433f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
443f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  security_modes_ = fbs_network.security_modes();
453f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  if (security_modes_ & ~SecurityMode::ALL_SECURITY_MODES_MASK) {
463f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    LOGE("Failed to deserialize PreferredNetwork. Invalid security mode.");
473f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    return false;
483f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  }
493f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
503f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  return true;
513f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
523f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
533f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehvoid PreferredNetwork::Log() const {
543f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  ssid_.Log();
553f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  LOGI("  security modes: 0x%" PRIx8, security_modes_);
563f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
573f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
583f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}  // namespace wifi_offload
59