#include "third_party/blink/renderer/modules/direct_sockets/udp_socket.h"
#include "base/barrier_callback.h"
#include "base/metrics/histogram_functions.h"
#include "base/ranges/algorithm.h"
#include "net/base/net_errors.h"
#include "third_party/blink/public/mojom/direct_sockets/direct_sockets.mojom-blink.h"
#include "third_party/blink/public/platform/task_type.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_socket_dns_query_type.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_udp_socket_open_info.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_udp_socket_options.h"
#include "third_party/blink/renderer/core/dom/dom_exception.h"
#include "third_party/blink/renderer/core/streams/readable_stream.h"
#include "third_party/blink/renderer/core/streams/writable_stream.h"
#include "third_party/blink/renderer/modules/direct_sockets/stream_wrapper.h"
#include "third_party/blink/renderer/modules/direct_sockets/udp_readable_stream_wrapper.h"
#include "third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/heap/persistent.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
#include "third_party/blink/renderer/platform/wtf/functional.h"
namespace blink {
namespace {
constexpr char kUDPNetworkFailuresHistogramName[] = …;
bool CheckSendReceiveBufferSize(const UDPSocketOptions* options,
ExceptionState& exception_state) { … }
std::optional<network::mojom::blink::RestrictedUDPSocketMode>
InferUDPSocketMode(const UDPSocketOptions* options,
ExceptionState& exception_state) { … }
mojom::blink::DirectConnectedUDPSocketOptionsPtr
CreateConnectedUDPSocketOptions(const UDPSocketOptions* options,
ExceptionState& exception_state) { … }
mojom::blink::DirectBoundUDPSocketOptionsPtr CreateBoundUDPSocketOptions(
const UDPSocketOptions* options,
ExceptionState& exception_state) { … }
}
UDPSocket* UDPSocket::Create(ScriptState* script_state,
const UDPSocketOptions* options,
ExceptionState& exception_state) { … }
UDPSocket::UDPSocket(ScriptState* script_state)
: … { … }
UDPSocket::~UDPSocket() = default;
ScriptPromise<UDPSocketOpenInfo> UDPSocket::opened(
ScriptState* script_state) const { … }
ScriptPromise<IDLUndefined> UDPSocket::close(ScriptState*,
ExceptionState& exception_state) { … }
bool UDPSocket::Open(const UDPSocketOptions* options,
ExceptionState& exception_state) { … }
void UDPSocket::FinishOpen(
network::mojom::RestrictedUDPSocketMode mode,
mojo::PendingReceiver<network::mojom::blink::UDPSocketListener>
socket_listener,
int32_t result,
const std::optional<net::IPEndPoint>& local_addr,
const std::optional<net::IPEndPoint>& peer_addr) { … }
void UDPSocket::OnConnectedUDPSocketOpened(
mojo::PendingReceiver<network::mojom::blink::UDPSocketListener>
socket_listener,
int32_t result,
const std::optional<net::IPEndPoint>& local_addr,
const std::optional<net::IPEndPoint>& peer_addr) { … }
void UDPSocket::OnBoundUDPSocketOpened(
mojo::PendingReceiver<network::mojom::blink::UDPSocketListener>
socket_listener,
int32_t result,
const std::optional<net::IPEndPoint>& local_addr) { … }
void UDPSocket::FailOpenWith(int32_t error) { … }
mojo::PendingReceiver<network::mojom::blink::RestrictedUDPSocket>
UDPSocket::GetUDPSocketReceiver() { … }
bool UDPSocket::HasPendingActivity() const { … }
void UDPSocket::ContextDestroyed() { … }
void UDPSocket::Trace(Visitor* visitor) const { … }
void UDPSocket::OnServiceConnectionError() { … }
void UDPSocket::CloseOnError() { … }
void UDPSocket::ReleaseResources() { … }
void UDPSocket::OnBothStreamsClosed(std::vector<ScriptValue> args) { … }
}