summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/sockets/bsd.cpp29
-rw-r--r--src/core/hle/service/sockets/bsd.h23
-rw-r--r--src/core/internal_network/network.cpp4
-rw-r--r--src/core/internal_network/socket_proxy.cpp4
-rw-r--r--src/core/internal_network/socket_proxy.h5
-rw-r--r--src/core/internal_network/sockets.h9
6 files changed, 38 insertions, 36 deletions
diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp
index 9e94a462f..119d6ba5b 100644
--- a/src/core/hle/service/sockets/bsd.cpp
+++ b/src/core/hle/service/sockets/bsd.cpp
@@ -186,7 +186,7 @@ void BSD::Poll(Kernel::HLERequestContext& ctx) {
186 ExecuteWork(ctx, PollWork{ 186 ExecuteWork(ctx, PollWork{
187 .nfds = nfds, 187 .nfds = nfds,
188 .timeout = timeout, 188 .timeout = timeout,
189 .read_buffer = ctx.ReadBuffer(), 189 .read_buffer = ctx.ReadBufferSpan(),
190 .write_buffer = std::vector<u8>(ctx.GetWriteBufferSize()), 190 .write_buffer = std::vector<u8>(ctx.GetWriteBufferSize()),
191 }); 191 });
192} 192}
@@ -208,8 +208,7 @@ void BSD::Bind(Kernel::HLERequestContext& ctx) {
208 const s32 fd = rp.Pop<s32>(); 208 const s32 fd = rp.Pop<s32>();
209 209
210 LOG_DEBUG(Service, "called. fd={} addrlen={}", fd, ctx.GetReadBufferSize()); 210 LOG_DEBUG(Service, "called. fd={} addrlen={}", fd, ctx.GetReadBufferSize());
211 211 BuildErrnoResponse(ctx, BindImpl(fd, ctx.ReadBufferSpan()));
212 BuildErrnoResponse(ctx, BindImpl(fd, ctx.ReadBuffer()));
213} 212}
214 213
215void BSD::Connect(Kernel::HLERequestContext& ctx) { 214void BSD::Connect(Kernel::HLERequestContext& ctx) {
@@ -220,7 +219,7 @@ void BSD::Connect(Kernel::HLERequestContext& ctx) {
220 219
221 ExecuteWork(ctx, ConnectWork{ 220 ExecuteWork(ctx, ConnectWork{
222 .fd = fd, 221 .fd = fd,
223 .addr = ctx.ReadBuffer(), 222 .addr = ctx.ReadBufferSpan(),
224 }); 223 });
225} 224}
226 225
@@ -312,7 +311,7 @@ void BSD::SetSockOpt(Kernel::HLERequestContext& ctx) {
312 const u32 level = rp.Pop<u32>(); 311 const u32 level = rp.Pop<u32>();
313 const OptName optname = static_cast<OptName>(rp.Pop<u32>()); 312 const OptName optname = static_cast<OptName>(rp.Pop<u32>());
314 313
315 const std::vector<u8> buffer = ctx.ReadBuffer(); 314 const auto buffer = ctx.ReadBufferSpan();
316 const u8* optval = buffer.empty() ? nullptr : buffer.data(); 315 const u8* optval = buffer.empty() ? nullptr : buffer.data();
317 size_t optlen = buffer.size(); 316 size_t optlen = buffer.size();
318 317
@@ -383,7 +382,7 @@ void BSD::Send(Kernel::HLERequestContext& ctx) {
383 ExecuteWork(ctx, SendWork{ 382 ExecuteWork(ctx, SendWork{
384 .fd = fd, 383 .fd = fd,
385 .flags = flags, 384 .flags = flags,
386 .message = ctx.ReadBuffer(), 385 .message = ctx.ReadBufferSpan(),
387 }); 386 });
388} 387}
389 388
@@ -398,8 +397,8 @@ void BSD::SendTo(Kernel::HLERequestContext& ctx) {
398 ExecuteWork(ctx, SendToWork{ 397 ExecuteWork(ctx, SendToWork{
399 .fd = fd, 398 .fd = fd,
400 .flags = flags, 399 .flags = flags,
401 .message = ctx.ReadBuffer(0), 400 .message = ctx.ReadBufferSpan(0),
402 .addr = ctx.ReadBuffer(1), 401 .addr = ctx.ReadBufferSpan(1),
403 }); 402 });
404} 403}
405 404
@@ -412,7 +411,7 @@ void BSD::Write(Kernel::HLERequestContext& ctx) {
412 ExecuteWork(ctx, SendWork{ 411 ExecuteWork(ctx, SendWork{
413 .fd = fd, 412 .fd = fd,
414 .flags = 0, 413 .flags = 0,
415 .message = ctx.ReadBuffer(), 414 .message = ctx.ReadBufferSpan(),
416 }); 415 });
417} 416}
418 417
@@ -489,7 +488,7 @@ std::pair<s32, Errno> BSD::SocketImpl(Domain domain, Type type, Protocol protoco
489 return {fd, Errno::SUCCESS}; 488 return {fd, Errno::SUCCESS};
490} 489}
491 490
492std::pair<s32, Errno> BSD::PollImpl(std::vector<u8>& write_buffer, std::vector<u8> read_buffer, 491std::pair<s32, Errno> BSD::PollImpl(std::vector<u8>& write_buffer, std::span<const u8> read_buffer,
493 s32 nfds, s32 timeout) { 492 s32 nfds, s32 timeout) {
494 if (write_buffer.size() < nfds * sizeof(PollFD)) { 493 if (write_buffer.size() < nfds * sizeof(PollFD)) {
495 return {-1, Errno::INVAL}; 494 return {-1, Errno::INVAL};
@@ -584,7 +583,7 @@ std::pair<s32, Errno> BSD::AcceptImpl(s32 fd, std::vector<u8>& write_buffer) {
584 return {new_fd, Errno::SUCCESS}; 583 return {new_fd, Errno::SUCCESS};
585} 584}
586 585
587Errno BSD::BindImpl(s32 fd, const std::vector<u8>& addr) { 586Errno BSD::BindImpl(s32 fd, std::span<const u8> addr) {
588 if (!IsFileDescriptorValid(fd)) { 587 if (!IsFileDescriptorValid(fd)) {
589 return Errno::BADF; 588 return Errno::BADF;
590 } 589 }
@@ -595,7 +594,7 @@ Errno BSD::BindImpl(s32 fd, const std::vector<u8>& addr) {
595 return Translate(file_descriptors[fd]->socket->Bind(Translate(addr_in))); 594 return Translate(file_descriptors[fd]->socket->Bind(Translate(addr_in)));
596} 595}
597 596
598Errno BSD::ConnectImpl(s32 fd, const std::vector<u8>& addr) { 597Errno BSD::ConnectImpl(s32 fd, std::span<const u8> addr) {
599 if (!IsFileDescriptorValid(fd)) { 598 if (!IsFileDescriptorValid(fd)) {
600 return Errno::BADF; 599 return Errno::BADF;
601 } 600 }
@@ -800,15 +799,15 @@ std::pair<s32, Errno> BSD::RecvFromImpl(s32 fd, u32 flags, std::vector<u8>& mess
800 return {ret, bsd_errno}; 799 return {ret, bsd_errno};
801} 800}
802 801
803std::pair<s32, Errno> BSD::SendImpl(s32 fd, u32 flags, const std::vector<u8>& message) { 802std::pair<s32, Errno> BSD::SendImpl(s32 fd, u32 flags, std::span<const u8> message) {
804 if (!IsFileDescriptorValid(fd)) { 803 if (!IsFileDescriptorValid(fd)) {
805 return {-1, Errno::BADF}; 804 return {-1, Errno::BADF};
806 } 805 }
807 return Translate(file_descriptors[fd]->socket->Send(message, flags)); 806 return Translate(file_descriptors[fd]->socket->Send(message, flags));
808} 807}
809 808
810std::pair<s32, Errno> BSD::SendToImpl(s32 fd, u32 flags, const std::vector<u8>& message, 809std::pair<s32, Errno> BSD::SendToImpl(s32 fd, u32 flags, std::span<const u8> message,
811 const std::vector<u8>& addr) { 810 std::span<const u8> addr) {
812 if (!IsFileDescriptorValid(fd)) { 811 if (!IsFileDescriptorValid(fd)) {
813 return {-1, Errno::BADF}; 812 return {-1, Errno::BADF};
814 } 813 }
diff --git a/src/core/hle/service/sockets/bsd.h b/src/core/hle/service/sockets/bsd.h
index 81e855e0f..56bb3f8b1 100644
--- a/src/core/hle/service/sockets/bsd.h
+++ b/src/core/hle/service/sockets/bsd.h
@@ -4,6 +4,7 @@
4#pragma once 4#pragma once
5 5
6#include <memory> 6#include <memory>
7#include <span>
7#include <vector> 8#include <vector>
8 9
9#include "common/common_types.h" 10#include "common/common_types.h"
@@ -44,7 +45,7 @@ private:
44 45
45 s32 nfds; 46 s32 nfds;
46 s32 timeout; 47 s32 timeout;
47 std::vector<u8> read_buffer; 48 std::span<const u8> read_buffer;
48 std::vector<u8> write_buffer; 49 std::vector<u8> write_buffer;
49 s32 ret{}; 50 s32 ret{};
50 Errno bsd_errno{}; 51 Errno bsd_errno{};
@@ -65,7 +66,7 @@ private:
65 void Response(Kernel::HLERequestContext& ctx); 66 void Response(Kernel::HLERequestContext& ctx);
66 67
67 s32 fd; 68 s32 fd;
68 std::vector<u8> addr; 69 std::span<const u8> addr;
69 Errno bsd_errno{}; 70 Errno bsd_errno{};
70 }; 71 };
71 72
@@ -98,7 +99,7 @@ private:
98 99
99 s32 fd; 100 s32 fd;
100 u32 flags; 101 u32 flags;
101 std::vector<u8> message; 102 std::span<const u8> message;
102 s32 ret{}; 103 s32 ret{};
103 Errno bsd_errno{}; 104 Errno bsd_errno{};
104 }; 105 };
@@ -109,8 +110,8 @@ private:
109 110
110 s32 fd; 111 s32 fd;
111 u32 flags; 112 u32 flags;
112 std::vector<u8> message; 113 std::span<const u8> message;
113 std::vector<u8> addr; 114 std::span<const u8> addr;
114 s32 ret{}; 115 s32 ret{};
115 Errno bsd_errno{}; 116 Errno bsd_errno{};
116 }; 117 };
@@ -143,11 +144,11 @@ private:
143 void ExecuteWork(Kernel::HLERequestContext& ctx, Work work); 144 void ExecuteWork(Kernel::HLERequestContext& ctx, Work work);
144 145
145 std::pair<s32, Errno> SocketImpl(Domain domain, Type type, Protocol protocol); 146 std::pair<s32, Errno> SocketImpl(Domain domain, Type type, Protocol protocol);
146 std::pair<s32, Errno> PollImpl(std::vector<u8>& write_buffer, std::vector<u8> read_buffer, 147 std::pair<s32, Errno> PollImpl(std::vector<u8>& write_buffer, std::span<const u8> read_buffer,
147 s32 nfds, s32 timeout); 148 s32 nfds, s32 timeout);
148 std::pair<s32, Errno> AcceptImpl(s32 fd, std::vector<u8>& write_buffer); 149 std::pair<s32, Errno> AcceptImpl(s32 fd, std::vector<u8>& write_buffer);
149 Errno BindImpl(s32 fd, const std::vector<u8>& addr); 150 Errno BindImpl(s32 fd, std::span<const u8> addr);
150 Errno ConnectImpl(s32 fd, const std::vector<u8>& addr); 151 Errno ConnectImpl(s32 fd, std::span<const u8> addr);
151 Errno GetPeerNameImpl(s32 fd, std::vector<u8>& write_buffer); 152 Errno GetPeerNameImpl(s32 fd, std::vector<u8>& write_buffer);
152 Errno GetSockNameImpl(s32 fd, std::vector<u8>& write_buffer); 153 Errno GetSockNameImpl(s32 fd, std::vector<u8>& write_buffer);
153 Errno ListenImpl(s32 fd, s32 backlog); 154 Errno ListenImpl(s32 fd, s32 backlog);
@@ -157,9 +158,9 @@ private:
157 std::pair<s32, Errno> RecvImpl(s32 fd, u32 flags, std::vector<u8>& message); 158 std::pair<s32, Errno> RecvImpl(s32 fd, u32 flags, std::vector<u8>& message);
158 std::pair<s32, Errno> RecvFromImpl(s32 fd, u32 flags, std::vector<u8>& message, 159 std::pair<s32, Errno> RecvFromImpl(s32 fd, u32 flags, std::vector<u8>& message,
159 std::vector<u8>& addr); 160 std::vector<u8>& addr);
160 std::pair<s32, Errno> SendImpl(s32 fd, u32 flags, const std::vector<u8>& message); 161 std::pair<s32, Errno> SendImpl(s32 fd, u32 flags, std::span<const u8> message);
161 std::pair<s32, Errno> SendToImpl(s32 fd, u32 flags, const std::vector<u8>& message, 162 std::pair<s32, Errno> SendToImpl(s32 fd, u32 flags, std::span<const u8> message,
162 const std::vector<u8>& addr); 163 std::span<const u8> addr);
163 Errno CloseImpl(s32 fd); 164 Errno CloseImpl(s32 fd);
164 165
165 s32 FindFreeFileDescriptorHandle() noexcept; 166 s32 FindFreeFileDescriptorHandle() noexcept;
diff --git a/src/core/internal_network/network.cpp b/src/core/internal_network/network.cpp
index 447fbffaa..452212964 100644
--- a/src/core/internal_network/network.cpp
+++ b/src/core/internal_network/network.cpp
@@ -546,7 +546,7 @@ std::pair<s32, Errno> Socket::RecvFrom(int flags, std::vector<u8>& message, Sock
546 return {-1, GetAndLogLastError()}; 546 return {-1, GetAndLogLastError()};
547} 547}
548 548
549std::pair<s32, Errno> Socket::Send(const std::vector<u8>& message, int flags) { 549std::pair<s32, Errno> Socket::Send(std::span<const u8> message, int flags) {
550 ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max())); 550 ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max()));
551 ASSERT(flags == 0); 551 ASSERT(flags == 0);
552 552
@@ -559,7 +559,7 @@ std::pair<s32, Errno> Socket::Send(const std::vector<u8>& message, int flags) {
559 return {-1, GetAndLogLastError()}; 559 return {-1, GetAndLogLastError()};
560} 560}
561 561
562std::pair<s32, Errno> Socket::SendTo(u32 flags, const std::vector<u8>& message, 562std::pair<s32, Errno> Socket::SendTo(u32 flags, std::span<const u8> message,
563 const SockAddrIn* addr) { 563 const SockAddrIn* addr) {
564 ASSERT(flags == 0); 564 ASSERT(flags == 0);
565 565
diff --git a/src/core/internal_network/socket_proxy.cpp b/src/core/internal_network/socket_proxy.cpp
index 1e1c42cea..7a77171c2 100644
--- a/src/core/internal_network/socket_proxy.cpp
+++ b/src/core/internal_network/socket_proxy.cpp
@@ -182,7 +182,7 @@ std::pair<s32, Errno> ProxySocket::ReceivePacket(int flags, std::vector<u8>& mes
182 return {static_cast<u32>(read_bytes), Errno::SUCCESS}; 182 return {static_cast<u32>(read_bytes), Errno::SUCCESS};
183} 183}
184 184
185std::pair<s32, Errno> ProxySocket::Send(const std::vector<u8>& message, int flags) { 185std::pair<s32, Errno> ProxySocket::Send(std::span<const u8> message, int flags) {
186 LOG_WARNING(Network, "(STUBBED) called"); 186 LOG_WARNING(Network, "(STUBBED) called");
187 ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max())); 187 ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max()));
188 ASSERT(flags == 0); 188 ASSERT(flags == 0);
@@ -200,7 +200,7 @@ void ProxySocket::SendPacket(ProxyPacket& packet) {
200 } 200 }
201} 201}
202 202
203std::pair<s32, Errno> ProxySocket::SendTo(u32 flags, const std::vector<u8>& message, 203std::pair<s32, Errno> ProxySocket::SendTo(u32 flags, std::span<const u8> message,
204 const SockAddrIn* addr) { 204 const SockAddrIn* addr) {
205 ASSERT(flags == 0); 205 ASSERT(flags == 0);
206 206
diff --git a/src/core/internal_network/socket_proxy.h b/src/core/internal_network/socket_proxy.h
index f12b5f567..9421492bc 100644
--- a/src/core/internal_network/socket_proxy.h
+++ b/src/core/internal_network/socket_proxy.h
@@ -4,6 +4,7 @@
4#pragma once 4#pragma once
5 5
6#include <mutex> 6#include <mutex>
7#include <span>
7#include <vector> 8#include <vector>
8#include <queue> 9#include <queue>
9 10
@@ -48,11 +49,11 @@ public:
48 std::pair<s32, Errno> ReceivePacket(int flags, std::vector<u8>& message, SockAddrIn* addr, 49 std::pair<s32, Errno> ReceivePacket(int flags, std::vector<u8>& message, SockAddrIn* addr,
49 std::size_t max_length); 50 std::size_t max_length);
50 51
51 std::pair<s32, Errno> Send(const std::vector<u8>& message, int flags) override; 52 std::pair<s32, Errno> Send(std::span<const u8> message, int flags) override;
52 53
53 void SendPacket(ProxyPacket& packet); 54 void SendPacket(ProxyPacket& packet);
54 55
55 std::pair<s32, Errno> SendTo(u32 flags, const std::vector<u8>& message, 56 std::pair<s32, Errno> SendTo(u32 flags, std::span<const u8> message,
56 const SockAddrIn* addr) override; 57 const SockAddrIn* addr) override;
57 58
58 Errno SetLinger(bool enable, u32 linger) override; 59 Errno SetLinger(bool enable, u32 linger) override;
diff --git a/src/core/internal_network/sockets.h b/src/core/internal_network/sockets.h
index 2e328c645..4c7489258 100644
--- a/src/core/internal_network/sockets.h
+++ b/src/core/internal_network/sockets.h
@@ -5,6 +5,7 @@
5 5
6#include <map> 6#include <map>
7#include <memory> 7#include <memory>
8#include <span>
8#include <utility> 9#include <utility>
9 10
10#if defined(_WIN32) 11#if defined(_WIN32)
@@ -66,9 +67,9 @@ public:
66 virtual std::pair<s32, Errno> RecvFrom(int flags, std::vector<u8>& message, 67 virtual std::pair<s32, Errno> RecvFrom(int flags, std::vector<u8>& message,
67 SockAddrIn* addr) = 0; 68 SockAddrIn* addr) = 0;
68 69
69 virtual std::pair<s32, Errno> Send(const std::vector<u8>& message, int flags) = 0; 70 virtual std::pair<s32, Errno> Send(std::span<const u8> message, int flags) = 0;
70 71
71 virtual std::pair<s32, Errno> SendTo(u32 flags, const std::vector<u8>& message, 72 virtual std::pair<s32, Errno> SendTo(u32 flags, std::span<const u8> message,
72 const SockAddrIn* addr) = 0; 73 const SockAddrIn* addr) = 0;
73 74
74 virtual Errno SetLinger(bool enable, u32 linger) = 0; 75 virtual Errno SetLinger(bool enable, u32 linger) = 0;
@@ -138,9 +139,9 @@ public:
138 139
139 std::pair<s32, Errno> RecvFrom(int flags, std::vector<u8>& message, SockAddrIn* addr) override; 140 std::pair<s32, Errno> RecvFrom(int flags, std::vector<u8>& message, SockAddrIn* addr) override;
140 141
141 std::pair<s32, Errno> Send(const std::vector<u8>& message, int flags) override; 142 std::pair<s32, Errno> Send(std::span<const u8> message, int flags) override;
142 143
143 std::pair<s32, Errno> SendTo(u32 flags, const std::vector<u8>& message, 144 std::pair<s32, Errno> SendTo(u32 flags, std::span<const u8> message,
144 const SockAddrIn* addr) override; 145 const SockAddrIn* addr) override;
145 146
146 Errno SetLinger(bool enable, u32 linger) override; 147 Errno SetLinger(bool enable, u32 linger) override;