diff options
| -rw-r--r-- | src/core/hle/service/ldn/ldn.cpp | 34 | 
1 files changed, 29 insertions, 5 deletions
| diff --git a/src/core/hle/service/ldn/ldn.cpp b/src/core/hle/service/ldn/ldn.cpp index 1c46609ae..c630d93cd 100644 --- a/src/core/hle/service/ldn/ldn.cpp +++ b/src/core/hle/service/ldn/ldn.cpp @@ -104,7 +104,7 @@ public:          : ServiceFramework{system_, "IUserLocalCommunicationService"} {          // clang-format off          static const FunctionInfo functions[] = { -            {0, nullptr, "GetState"}, +            {0, &IUserLocalCommunicationService::GetState, "GetState"},              {1, nullptr, "GetNetworkInfo"},              {2, nullptr, "GetIpv4Address"},              {3, nullptr, "GetDisconnectReason"}, @@ -139,14 +139,38 @@ public:          RegisterHandlers(functions);      } -    void Initialize2(Kernel::HLERequestContext& ctx) { +    void GetState(Kernel::HLERequestContext& ctx) {          LOG_WARNING(Service_LDN, "(STUBBED) called"); -        // Return the disabled error to indicate that LDN is currently unavailable, otherwise games -        // will continue to try to make a connection. +        IPC::ResponseBuilder rb{ctx, 3}; + +        // Indicate a network error, as we do not actually emulate LDN +        rb.Push(static_cast<u32>(State::Error)); + +        rb.Push(RESULT_SUCCESS); +    } + +    void Initialize2(Kernel::HLERequestContext& ctx) { +        LOG_DEBUG(Service_LDN, "called"); + +        is_initialized = true; +          IPC::ResponseBuilder rb{ctx, 2}; -        rb.Push(ERROR_DISABLED); +        rb.Push(RESULT_SUCCESS);      } + +private: +    enum class State { +        None, +        Initialized, +        AccessPointOpened, +        AccessPointCreated, +        StationOpened, +        StationConnected, +        Error, +    }; + +    bool is_initialized{};  };  class LDNS final : public ServiceFramework<LDNS> { | 
