blob: 5f260ed370de8b487b163f614a4e925ed88f0b7e [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::Weave::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() {
FX_CHECK(delegate_ != nullptr) << "ConnectivityManager delegate not set before Init.";
return delegate_->Init();
}
bool ConnectivityManagerImpl::_IsServiceTunnelConnected() {
return delegate_->IsServiceTunnelConnected();
}
bool ConnectivityManagerImpl::_IsServiceTunnelRestricted() {
return delegate_->IsServiceTunnelRestricted();
}
void ConnectivityManagerImpl::_OnPlatformEvent(const WeaveDeviceEvent* event) {
return delegate_->OnPlatformEvent(event);
}
bool ConnectivityManagerImpl::_HaveServiceConnectivityViaTunnel() {
return delegate_->IsServiceTunnelConnected() && !delegate_->IsServiceTunnelRestricted();
}
ConnectivityManager::ServiceTunnelMode ConnectivityManagerImpl::_GetServiceTunnelMode() {
return delegate_->GetServiceTunnelMode();
}
bool ConnectivityManagerImpl::_HaveIPv4InternetConnectivity() {
return delegate_->HaveIPv4InternetConnectivity();
}
bool ConnectivityManagerImpl::_HaveIPv6InternetConnectivity() {
return delegate_->HaveIPv6InternetConnectivity();
}
ConnectivityManager::ServiceTunnelMode ConnectivityManagerImpl::Delegate::GetServiceTunnelMode() {
return service_tunnel_mode_;
}
bool ConnectivityManagerImpl::Delegate::HaveIPv4InternetConnectivity() const {
return ::nl::GetFlag(flags_, kFlag_HaveIPv4InternetConnectivity);
}
bool ConnectivityManagerImpl::Delegate::HaveIPv6InternetConnectivity() const {
return ::nl::GetFlag(flags_, kFlag_HaveIPv6InternetConnectivity);
}
std::optional<std::string> ConnectivityManagerImpl::GetWiFiInterfaceName() {
return delegate_->GetWiFiInterfaceName();
}
ConnectivityManager::ThreadMode ConnectivityManagerImpl::_GetThreadMode() {
return delegate_->GetThreadMode();
}
fuchsia::net::interfaces::admin::ControlSyncPtr*
ConnectivityManagerImpl::GetTunInterfaceControlSyncPtr() {
return delegate_->GetTunInterfaceControlSyncPtr();
}
} // namespace nl::Weave::DeviceLayer