// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "platform/test/fake_udp_socket.h" #include namespace openscreen { FakeUdpSocket::FakeUdpSocket(TaskRunner* task_runner, Client* client, Version version) : client_(client), version_(version) {} FakeUdpSocket::~FakeUdpSocket() = default; bool FakeUdpSocket::IsIPv4() const { return version_ == UdpSocket::Version::kV4; } bool FakeUdpSocket::IsIPv6() const { return version_ == UdpSocket::Version::kV6; } IPEndpoint FakeUdpSocket::GetLocalEndpoint() const { return IPEndpoint{}; } void FakeUdpSocket::Bind() { OSP_CHECK(bind_errors_.size()) << "No Bind responses queued."; ProcessConfigurationMethod(&bind_errors_); } void FakeUdpSocket::SetMulticastOutboundInterface( NetworkInterfaceIndex interface) { OSP_CHECK(set_multicast_outbound_interface_errors_.size()) << "No SetMulticastOutboundInterface responses queued."; ProcessConfigurationMethod(&set_multicast_outbound_interface_errors_); } void FakeUdpSocket::JoinMulticastGroup(const IPAddress& address, NetworkInterfaceIndex interface) { OSP_CHECK(join_multicast_group_errors_.size()) << "No JoinMulticastGroup responses queued."; ProcessConfigurationMethod(&join_multicast_group_errors_); } void FakeUdpSocket::SetDscp(DscpMode mode) { OSP_CHECK(set_dscp_errors_.size()) << "No SetDscp responses queued."; ProcessConfigurationMethod(&set_dscp_errors_); } void FakeUdpSocket::MockReceivePacket(UdpPacket packet) { if (client_) { client_->OnRead(this, std::move(packet)); } } void FakeUdpSocket::ProcessConfigurationMethod(std::queue* errors) { Error error = errors->front(); errors->pop(); if (!error.ok() && client_) { client_->OnError(this, std::move(error)); } } void FakeUdpSocket::SendMessage(const void* data, size_t length, const IPEndpoint& dest) { OSP_CHECK(send_errors_.size()) << "No SendMessage responses queued."; Error error = send_errors_.front(); send_errors_.pop(); if (!error.ok() && client_) { client_->OnSendError(this, std::move(error)); } } } // namespace openscreen