summaryrefslogtreecommitdiff
path: root/src/core/hle/service/sockets
diff options
context:
space:
mode:
authorGravatar comex2023-07-01 15:02:25 -0700
committerGravatar comex2023-07-01 17:27:35 -0700
commit0e191c271125321589dfdbb09731413550710c9a (patch)
treee0d9e826197d2fd66cc9b7fd8d11cc8c7fd6e3ac /src/core/hle/service/sockets
parentMerge remote-tracking branch 'origin/master' into ssl (diff)
downloadyuzu-0e191c271125321589dfdbb09731413550710c9a.tar.gz
yuzu-0e191c271125321589dfdbb09731413550710c9a.tar.xz
yuzu-0e191c271125321589dfdbb09731413550710c9a.zip
Updates:
- Address PR feedback. - Add SecureTransport backend for macOS.
Diffstat (limited to 'src/core/hle/service/sockets')
-rw-r--r--src/core/hle/service/sockets/bsd.cpp23
-rw-r--r--src/core/hle/service/sockets/sfdnsres.cpp73
2 files changed, 74 insertions, 22 deletions
diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp
index 6034cc0b5..e63b0a357 100644
--- a/src/core/hle/service/sockets/bsd.cpp
+++ b/src/core/hle/service/sockets/bsd.cpp
@@ -443,15 +443,28 @@ void BSD::Close(HLERequestContext& ctx) {
443} 443}
444 444
445void BSD::DuplicateSocket(HLERequestContext& ctx) { 445void BSD::DuplicateSocket(HLERequestContext& ctx) {
446 struct InputParameters {
447 s32 fd;
448 u64 reserved;
449 };
450 static_assert(sizeof(InputParameters) == 0x10);
451
452 struct OutputParameters {
453 s32 ret;
454 Errno bsd_errno;
455 };
456 static_assert(sizeof(OutputParameters) == 0x8);
457
446 IPC::RequestParser rp{ctx}; 458 IPC::RequestParser rp{ctx};
447 const s32 fd = rp.Pop<s32>(); 459 auto input = rp.PopRaw<InputParameters>();
448 [[maybe_unused]] const u64 unused = rp.Pop<u64>();
449 460
450 Expected<s32, Errno> res = DuplicateSocketImpl(fd); 461 Expected<s32, Errno> res = DuplicateSocketImpl(input.fd);
451 IPC::ResponseBuilder rb{ctx, 4}; 462 IPC::ResponseBuilder rb{ctx, 4};
452 rb.Push(ResultSuccess); 463 rb.Push(ResultSuccess);
453 rb.Push(res.value_or(0)); // ret 464 rb.PushRaw(OutputParameters{
454 rb.Push(res ? 0 : static_cast<s32>(res.error())); // bsd errno 465 .ret = res.value_or(0),
466 .bsd_errno = res ? Errno::SUCCESS : res.error(),
467 });
455} 468}
456 469
457void BSD::EventFd(HLERequestContext& ctx) { 470void BSD::EventFd(HLERequestContext& ctx) {
diff --git a/src/core/hle/service/sockets/sfdnsres.cpp b/src/core/hle/service/sockets/sfdnsres.cpp
index 45f0f526a..84cc79de8 100644
--- a/src/core/hle/service/sockets/sfdnsres.cpp
+++ b/src/core/hle/service/sockets/sfdnsres.cpp
@@ -131,14 +131,15 @@ static std::vector<u8> SerializeAddrInfoAsHostEnt(const std::vector<Network::Add
131} 131}
132 132
133static std::pair<u32, GetAddrInfoError> GetHostByNameRequestImpl(HLERequestContext& ctx) { 133static std::pair<u32, GetAddrInfoError> GetHostByNameRequestImpl(HLERequestContext& ctx) {
134 struct Parameters { 134 struct InputParameters {
135 u8 use_nsd_resolve; 135 u8 use_nsd_resolve;
136 u32 cancel_handle; 136 u32 cancel_handle;
137 u64 process_id; 137 u64 process_id;
138 }; 138 };
139 static_assert(sizeof(InputParameters) == 0x10);
139 140
140 IPC::RequestParser rp{ctx}; 141 IPC::RequestParser rp{ctx};
141 const auto parameters = rp.PopRaw<Parameters>(); 142 const auto parameters = rp.PopRaw<InputParameters>();
142 143
143 LOG_WARNING( 144 LOG_WARNING(
144 Service, 145 Service,
@@ -164,21 +165,39 @@ static std::pair<u32, GetAddrInfoError> GetHostByNameRequestImpl(HLERequestConte
164void SFDNSRES::GetHostByNameRequest(HLERequestContext& ctx) { 165void SFDNSRES::GetHostByNameRequest(HLERequestContext& ctx) {
165 auto [data_size, emu_gai_err] = GetHostByNameRequestImpl(ctx); 166 auto [data_size, emu_gai_err] = GetHostByNameRequestImpl(ctx);
166 167
168 struct OutputParameters {
169 NetDbError netdb_error;
170 Errno bsd_errno;
171 u32 data_size;
172 };
173 static_assert(sizeof(OutputParameters) == 0xc);
174
167 IPC::ResponseBuilder rb{ctx, 5}; 175 IPC::ResponseBuilder rb{ctx, 5};
168 rb.Push(ResultSuccess); 176 rb.Push(ResultSuccess);
169 rb.Push(static_cast<s32>(GetAddrInfoErrorToNetDbError(emu_gai_err))); // netdb error code 177 rb.PushRaw(OutputParameters{
170 rb.Push(static_cast<s32>(GetAddrInfoErrorToErrno(emu_gai_err))); // errno 178 .netdb_error = GetAddrInfoErrorToNetDbError(emu_gai_err),
171 rb.Push(data_size); // serialized size 179 .bsd_errno = GetAddrInfoErrorToErrno(emu_gai_err),
180 .data_size = data_size,
181 });
172} 182}
173 183
174void SFDNSRES::GetHostByNameRequestWithOptions(HLERequestContext& ctx) { 184void SFDNSRES::GetHostByNameRequestWithOptions(HLERequestContext& ctx) {
175 auto [data_size, emu_gai_err] = GetHostByNameRequestImpl(ctx); 185 auto [data_size, emu_gai_err] = GetHostByNameRequestImpl(ctx);
176 186
187 struct OutputParameters {
188 u32 data_size;
189 NetDbError netdb_error;
190 Errno bsd_errno;
191 };
192 static_assert(sizeof(OutputParameters) == 0xc);
193
177 IPC::ResponseBuilder rb{ctx, 5}; 194 IPC::ResponseBuilder rb{ctx, 5};
178 rb.Push(ResultSuccess); 195 rb.Push(ResultSuccess);
179 rb.Push(data_size); // serialized size 196 rb.PushRaw(OutputParameters{
180 rb.Push(static_cast<s32>(GetAddrInfoErrorToNetDbError(emu_gai_err))); // netdb error code 197 .data_size = data_size,
181 rb.Push(static_cast<s32>(GetAddrInfoErrorToErrno(emu_gai_err))); // errno 198 .netdb_error = GetAddrInfoErrorToNetDbError(emu_gai_err),
199 .bsd_errno = GetAddrInfoErrorToErrno(emu_gai_err),
200 });
182} 201}
183 202
184static std::vector<u8> SerializeAddrInfo(const std::vector<Network::AddrInfo>& vec, 203static std::vector<u8> SerializeAddrInfo(const std::vector<Network::AddrInfo>& vec,
@@ -221,14 +240,15 @@ static std::vector<u8> SerializeAddrInfo(const std::vector<Network::AddrInfo>& v
221} 240}
222 241
223static std::pair<u32, GetAddrInfoError> GetAddrInfoRequestImpl(HLERequestContext& ctx) { 242static std::pair<u32, GetAddrInfoError> GetAddrInfoRequestImpl(HLERequestContext& ctx) {
224 struct Parameters { 243 struct InputParameters {
225 u8 use_nsd_resolve; 244 u8 use_nsd_resolve;
226 u32 cancel_handle; 245 u32 cancel_handle;
227 u64 process_id; 246 u64 process_id;
228 }; 247 };
248 static_assert(sizeof(InputParameters) == 0x10);
229 249
230 IPC::RequestParser rp{ctx}; 250 IPC::RequestParser rp{ctx};
231 const auto parameters = rp.PopRaw<Parameters>(); 251 const auto parameters = rp.PopRaw<InputParameters>();
232 252
233 LOG_WARNING( 253 LOG_WARNING(
234 Service, 254 Service,
@@ -264,23 +284,42 @@ static std::pair<u32, GetAddrInfoError> GetAddrInfoRequestImpl(HLERequestContext
264void SFDNSRES::GetAddrInfoRequest(HLERequestContext& ctx) { 284void SFDNSRES::GetAddrInfoRequest(HLERequestContext& ctx) {
265 auto [data_size, emu_gai_err] = GetAddrInfoRequestImpl(ctx); 285 auto [data_size, emu_gai_err] = GetAddrInfoRequestImpl(ctx);
266 286
287 struct OutputParameters {
288 Errno bsd_errno;
289 GetAddrInfoError gai_error;
290 u32 data_size;
291 };
292 static_assert(sizeof(OutputParameters) == 0xc);
293
267 IPC::ResponseBuilder rb{ctx, 5}; 294 IPC::ResponseBuilder rb{ctx, 5};
268 rb.Push(ResultSuccess); 295 rb.Push(ResultSuccess);
269 rb.Push(static_cast<s32>(GetAddrInfoErrorToErrno(emu_gai_err))); // errno 296 rb.PushRaw(OutputParameters{
270 rb.Push(static_cast<s32>(emu_gai_err)); // getaddrinfo error code 297 .bsd_errno = GetAddrInfoErrorToErrno(emu_gai_err),
271 rb.Push(data_size); // serialized size 298 .gai_error = emu_gai_err,
299 .data_size = data_size,
300 });
272} 301}
273 302
274void SFDNSRES::GetAddrInfoRequestWithOptions(HLERequestContext& ctx) { 303void SFDNSRES::GetAddrInfoRequestWithOptions(HLERequestContext& ctx) {
275 // Additional options are ignored 304 // Additional options are ignored
276 auto [data_size, emu_gai_err] = GetAddrInfoRequestImpl(ctx); 305 auto [data_size, emu_gai_err] = GetAddrInfoRequestImpl(ctx);
277 306
307 struct OutputParameters {
308 u32 data_size;
309 GetAddrInfoError gai_error;
310 NetDbError netdb_error;
311 Errno bsd_errno;
312 };
313 static_assert(sizeof(OutputParameters) == 0x10);
314
278 IPC::ResponseBuilder rb{ctx, 6}; 315 IPC::ResponseBuilder rb{ctx, 6};
279 rb.Push(ResultSuccess); 316 rb.Push(ResultSuccess);
280 rb.Push(data_size); // serialized size 317 rb.PushRaw(OutputParameters{
281 rb.Push(static_cast<s32>(emu_gai_err)); // getaddrinfo error code 318 .data_size = data_size,
282 rb.Push(static_cast<s32>(GetAddrInfoErrorToNetDbError(emu_gai_err))); // netdb error code 319 .gai_error = emu_gai_err,
283 rb.Push(static_cast<s32>(GetAddrInfoErrorToErrno(emu_gai_err))); // errno 320 .netdb_error = GetAddrInfoErrorToNetDbError(emu_gai_err),
321 .bsd_errno = GetAddrInfoErrorToErrno(emu_gai_err),
322 });
284} 323}
285 324
286void SFDNSRES::ResolverSetOptionRequest(HLERequestContext& ctx) { 325void SFDNSRES::ResolverSetOptionRequest(HLERequestContext& ctx) {