blob: af866793caf963a58b299575660f7fbfce803c5e [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// clang-format off
#include <Weave/DeviceLayer/internal/WeaveDeviceLayerInternal.h>
#include <Weave/DeviceLayer/ConnectivityManager.h>
#include <Weave/DeviceLayer/internal/GenericConnectivityManagerImpl_Thread.ipp>
// clang-format on
#include <lib/syslog/cpp/macros.h>
namespace nl {
namespace Weave {
namespace DeviceLayer {
ConnectivityManagerImpl ConnectivityManagerImpl::sInstance;
void ConnectivityManagerImpl::SetDelegate(std::unique_ptr<Delegate> delegate) {
FX_CHECK(!(delegate && delegate_)) << "Attempt to set an already set delegate. Must explicitly "
"clear the existing delegate first.";
delegate_ = std::move(delegate);
if (delegate_) {
delegate_->SetConnectivityManagerImpl(this);
}
}
ConnectivityManagerImpl::Delegate* ConnectivityManagerImpl::GetDelegate() {
return delegate_.get();
}
WEAVE_ERROR ConnectivityManagerImpl::_Init(void) {
FX_CHECK(delegate_ != nullptr) << "ConnectivityManager delegate not set before Init.";
return delegate_->Init();
}
bool ConnectivityManagerImpl::_IsServiceTunnelConnected(void) {
return delegate_->IsServiceTunnelConnected();
}
bool ConnectivityManagerImpl::_IsServiceTunnelRestricted(void) {
return delegate_->IsServiceTunnelRestricted();
}
void ConnectivityManagerImpl::_OnPlatformEvent(const WeaveDeviceEvent* event) {
return delegate_->OnPlatformEvent(event);
}
bool ConnectivityManagerImpl::_HaveServiceConnectivityViaTunnel(void) {
return delegate_->IsServiceTunnelConnected() && !delegate_->IsServiceTunnelRestricted();
}
ConnectivityManager::ServiceTunnelMode ConnectivityManagerImpl::_GetServiceTunnelMode(void) {
return delegate_->GetServiceTunnelMode();
}
bool ConnectivityManagerImpl::_HaveIPv4InternetConnectivity(void) {
return delegate_->HaveIPv4InternetConnectivity();
}
bool ConnectivityManagerImpl::_HaveIPv6InternetConnectivity(void) {
return delegate_->HaveIPv6InternetConnectivity();
}
ConnectivityManager::ServiceTunnelMode ConnectivityManagerImpl::Delegate::GetServiceTunnelMode(
void) {
return service_tunnel_mode_;
}
bool ConnectivityManagerImpl::Delegate::HaveIPv4InternetConnectivity(void) {
return ::nl::GetFlag(flags_, kFlag_HaveIPv4InternetConnectivity);
}
bool ConnectivityManagerImpl::Delegate::HaveIPv6InternetConnectivity(void) {
return ::nl::GetFlag(flags_, kFlag_HaveIPv6InternetConnectivity);
}
std::optional<std::string> ConnectivityManagerImpl::GetWiFiInterfaceName() {
return delegate_->GetWiFiInterfaceName();
}
ConnectivityManager::ThreadMode ConnectivityManagerImpl::_GetThreadMode(void) {
return delegate_->GetThreadMode();
}
} // namespace DeviceLayer
} // namespace Weave
} // namespace nl