diff options
| author | 2021-08-16 17:10:00 +0200 | |
|---|---|---|
| committer | 2021-08-16 17:10:00 +0200 | |
| commit | 521e6ac17483e975e2fc731fed879e9f3edf7547 (patch) | |
| tree | ca5a9b7559f475de1d461885f3df9ee2282bccdf /src/core/hle | |
| parent | Merge pull request #6861 from yzct12345/const-mempy-is-all-the-speed (diff) | |
| parent | network_interface: correct formatting (diff) | |
| download | yuzu-521e6ac17483e975e2fc731fed879e9f3edf7547.tar.gz yuzu-521e6ac17483e975e2fc731fed879e9f3edf7547.tar.xz yuzu-521e6ac17483e975e2fc731fed879e9f3edf7547.zip | |
Merge pull request #6863 from spholz/fix-lan-play
Fix LAN Play
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/nifm/nifm.cpp | 45 |
1 files changed, 31 insertions, 14 deletions
diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp index e742db48f..0a53c0c81 100644 --- a/src/core/hle/service/nifm/nifm.cpp +++ b/src/core/hle/service/nifm/nifm.cpp | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include "core/hle/service/nifm/nifm.h" | 11 | #include "core/hle/service/nifm/nifm.h" |
| 12 | #include "core/hle/service/service.h" | 12 | #include "core/hle/service/service.h" |
| 13 | #include "core/network/network.h" | 13 | #include "core/network/network.h" |
| 14 | #include "core/network/network_interface.h" | ||
| 14 | 15 | ||
| 15 | namespace Service::NIFM { | 16 | namespace Service::NIFM { |
| 16 | 17 | ||
| @@ -179,10 +180,10 @@ private: | |||
| 179 | IPC::ResponseBuilder rb{ctx, 3}; | 180 | IPC::ResponseBuilder rb{ctx, 3}; |
| 180 | rb.Push(ResultSuccess); | 181 | rb.Push(ResultSuccess); |
| 181 | 182 | ||
| 182 | if (Settings::values.bcat_backend.GetValue() == "none") { | 183 | if (Network::GetHostIPv4Address().has_value()) { |
| 183 | rb.PushEnum(RequestState::NotSubmitted); | ||
| 184 | } else { | ||
| 185 | rb.PushEnum(RequestState::Connected); | 184 | rb.PushEnum(RequestState::Connected); |
| 185 | } else { | ||
| 186 | rb.PushEnum(RequestState::NotSubmitted); | ||
| 186 | } | 187 | } |
| 187 | } | 188 | } |
| 188 | 189 | ||
| @@ -322,12 +323,15 @@ private: | |||
| 322 | void GetCurrentIpAddress(Kernel::HLERequestContext& ctx) { | 323 | void GetCurrentIpAddress(Kernel::HLERequestContext& ctx) { |
| 323 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); | 324 | LOG_WARNING(Service_NIFM, "(STUBBED) called"); |
| 324 | 325 | ||
| 325 | const auto [ipv4, error] = Network::GetHostIPv4Address(); | 326 | auto ipv4 = Network::GetHostIPv4Address(); |
| 326 | UNIMPLEMENTED_IF(error != Network::Errno::SUCCESS); | 327 | if (!ipv4) { |
| 328 | LOG_ERROR(Service_NIFM, "Couldn't get host IPv4 address, defaulting to 0.0.0.0"); | ||
| 329 | ipv4.emplace(Network::IPv4Address{0, 0, 0, 0}); | ||
| 330 | } | ||
| 327 | 331 | ||
| 328 | IPC::ResponseBuilder rb{ctx, 3}; | 332 | IPC::ResponseBuilder rb{ctx, 3}; |
| 329 | rb.Push(ResultSuccess); | 333 | rb.Push(ResultSuccess); |
| 330 | rb.PushRaw(ipv4); | 334 | rb.PushRaw(*ipv4); |
| 331 | } | 335 | } |
| 332 | void CreateTemporaryNetworkProfile(Kernel::HLERequestContext& ctx) { | 336 | void CreateTemporaryNetworkProfile(Kernel::HLERequestContext& ctx) { |
| 333 | LOG_DEBUG(Service_NIFM, "called"); | 337 | LOG_DEBUG(Service_NIFM, "called"); |
| @@ -354,10 +358,10 @@ private: | |||
| 354 | static_assert(sizeof(IpConfigInfo) == sizeof(IpAddressSetting) + sizeof(DnsSetting), | 358 | static_assert(sizeof(IpConfigInfo) == sizeof(IpAddressSetting) + sizeof(DnsSetting), |
| 355 | "IpConfigInfo has incorrect size."); | 359 | "IpConfigInfo has incorrect size."); |
| 356 | 360 | ||
| 357 | const IpConfigInfo ip_config_info{ | 361 | IpConfigInfo ip_config_info{ |
| 358 | .ip_address_setting{ | 362 | .ip_address_setting{ |
| 359 | .is_automatic{true}, | 363 | .is_automatic{true}, |
| 360 | .current_address{192, 168, 1, 100}, | 364 | .current_address{0, 0, 0, 0}, |
| 361 | .subnet_mask{255, 255, 255, 0}, | 365 | .subnet_mask{255, 255, 255, 0}, |
| 362 | .gateway{192, 168, 1, 1}, | 366 | .gateway{192, 168, 1, 1}, |
| 363 | }, | 367 | }, |
| @@ -368,6 +372,19 @@ private: | |||
| 368 | }, | 372 | }, |
| 369 | }; | 373 | }; |
| 370 | 374 | ||
| 375 | const auto iface = Network::GetSelectedNetworkInterface(); | ||
| 376 | if (iface) { | ||
| 377 | ip_config_info.ip_address_setting = | ||
| 378 | IpAddressSetting{.is_automatic{true}, | ||
| 379 | .current_address{Network::TranslateIPv4(iface->ip_address)}, | ||
| 380 | .subnet_mask{Network::TranslateIPv4(iface->subnet_mask)}, | ||
| 381 | .gateway{Network::TranslateIPv4(iface->gateway)}}; | ||
| 382 | |||
| 383 | } else { | ||
| 384 | LOG_ERROR(Service_NIFM, | ||
| 385 | "Couldn't get host network configuration info, using default values"); | ||
| 386 | } | ||
| 387 | |||
| 371 | IPC::ResponseBuilder rb{ctx, 2 + (sizeof(IpConfigInfo) + 3) / sizeof(u32)}; | 388 | IPC::ResponseBuilder rb{ctx, 2 + (sizeof(IpConfigInfo) + 3) / sizeof(u32)}; |
| 372 | rb.Push(ResultSuccess); | 389 | rb.Push(ResultSuccess); |
| 373 | rb.PushRaw<IpConfigInfo>(ip_config_info); | 390 | rb.PushRaw<IpConfigInfo>(ip_config_info); |
| @@ -384,10 +401,10 @@ private: | |||
| 384 | 401 | ||
| 385 | IPC::ResponseBuilder rb{ctx, 3}; | 402 | IPC::ResponseBuilder rb{ctx, 3}; |
| 386 | rb.Push(ResultSuccess); | 403 | rb.Push(ResultSuccess); |
| 387 | if (Settings::values.bcat_backend.GetValue() == "none") { | 404 | if (Network::GetHostIPv4Address().has_value()) { |
| 388 | rb.Push<u8>(0); | ||
| 389 | } else { | ||
| 390 | rb.Push<u8>(1); | 405 | rb.Push<u8>(1); |
| 406 | } else { | ||
| 407 | rb.Push<u8>(0); | ||
| 391 | } | 408 | } |
| 392 | } | 409 | } |
| 393 | void IsAnyInternetRequestAccepted(Kernel::HLERequestContext& ctx) { | 410 | void IsAnyInternetRequestAccepted(Kernel::HLERequestContext& ctx) { |
| @@ -395,10 +412,10 @@ private: | |||
| 395 | 412 | ||
| 396 | IPC::ResponseBuilder rb{ctx, 3}; | 413 | IPC::ResponseBuilder rb{ctx, 3}; |
| 397 | rb.Push(ResultSuccess); | 414 | rb.Push(ResultSuccess); |
| 398 | if (Settings::values.bcat_backend.GetValue() == "none") { | 415 | if (Network::GetHostIPv4Address().has_value()) { |
| 399 | rb.Push<u8>(0); | ||
| 400 | } else { | ||
| 401 | rb.Push<u8>(1); | 416 | rb.Push<u8>(1); |
| 417 | } else { | ||
| 418 | rb.Push<u8>(0); | ||
| 402 | } | 419 | } |
| 403 | } | 420 | } |
| 404 | }; | 421 | }; |