#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "services/network/udp_socket.h"
#include <algorithm>
#include <optional>
#include <utility>
#include "base/check_op.h"
#include "base/functional/bind.h"
#include "base/numerics/checked_math.h"
#include "base/numerics/safe_conversions.h"
#include "net/base/io_buffer.h"
#include "net/base/net_errors.h"
#include "net/log/net_log.h"
#include "net/socket/udp_socket.h"
namespace network {
namespace {
const uint32_t kMaxReadSize = …;
const uint32_t kMaxPacketSize = …;
int ClampUDPBufferSize(int requested_buffer_size) { … }
class SocketWrapperImpl : public UDPSocket::SocketWrapper { … };
}
UDPSocket::PendingSendRequest::PendingSendRequest() { … }
UDPSocket::PendingSendRequest::~PendingSendRequest() { … }
UDPSocket::UDPSocket(mojo::PendingRemote<mojom::UDPSocketListener> listener,
net::NetLog* net_log)
: … { … }
UDPSocket::~UDPSocket() { … }
void UDPSocket::Connect(const net::IPEndPoint& remote_addr,
mojom::UDPSocketOptionsPtr options,
ConnectCallback callback) { … }
void UDPSocket::Bind(const net::IPEndPoint& local_addr,
mojom::UDPSocketOptionsPtr options,
BindCallback callback) { … }
void UDPSocket::SetBroadcast(bool broadcast, SetBroadcastCallback callback) { … }
void UDPSocket::SetSendBufferSize(int32_t send_buffer_size,
SetSendBufferSizeCallback callback) { … }
void UDPSocket::SetReceiveBufferSize(int32_t receive_buffer_size,
SetSendBufferSizeCallback callback) { … }
void UDPSocket::JoinGroup(const net::IPAddress& group_address,
JoinGroupCallback callback) { … }
void UDPSocket::LeaveGroup(const net::IPAddress& group_address,
LeaveGroupCallback callback) { … }
void UDPSocket::ReceiveMore(uint32_t num_additional_datagrams) { … }
void UDPSocket::ReceiveMoreWithBufferSize(uint32_t num_additional_datagrams,
uint32_t buffer_size) { … }
void UDPSocket::SendTo(
const net::IPEndPoint& dest_addr,
base::span<const uint8_t> data,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
SendToCallback callback) { … }
void UDPSocket::Send(
base::span<const uint8_t> data,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
SendCallback callback) { … }
void UDPSocket::Close() { … }
std::unique_ptr<UDPSocket::SocketWrapper> UDPSocket::CreateSocketWrapper()
const { … }
bool UDPSocket::IsConnectedOrBound() const { … }
void UDPSocket::DoRecvFrom(uint32_t buffer_size) { … }
void UDPSocket::DoSendToOrWrite(
const net::IPEndPoint* dest_addr,
const base::span<const uint8_t>& data,
const net::NetworkTrafficAnnotationTag& traffic_annotation,
SendToCallback callback) { … }
void UDPSocket::DoSendToOrWriteBuffer(
const net::IPEndPoint* dest_addr,
scoped_refptr<net::IOBufferWithSize> buffer,
const net::NetworkTrafficAnnotationTag& traffic_annotation,
SendToCallback callback) { … }
void UDPSocket::OnRecvFromCompleted(uint32_t buffer_size, int net_result) { … }
void UDPSocket::OnSendToCompleted(int net_result) { … }
}