mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	Merge pull request #9348 from Morph1984/when-the-network-is-down
service: nifm: Update stubs for Submit/GetRequestState/GetResult
This commit is contained in:
		@@ -129,6 +129,9 @@ static_assert(sizeof(NifmNetworkProfileData) == 0x18E,
 | 
			
		||||
              "NifmNetworkProfileData has incorrect size.");
 | 
			
		||||
#pragma pack(pop)
 | 
			
		||||
 | 
			
		||||
constexpr Result ResultPendingConnection{ErrorModule::NIFM, 111};
 | 
			
		||||
constexpr Result ResultNetworkCommunicationDisabled{ErrorModule::NIFM, 1111};
 | 
			
		||||
 | 
			
		||||
class IScanRequest final : public ServiceFramework<IScanRequest> {
 | 
			
		||||
public:
 | 
			
		||||
    explicit IScanRequest(Core::System& system_) : ServiceFramework{system_, "IScanRequest"} {
 | 
			
		||||
@@ -192,6 +195,10 @@ private:
 | 
			
		||||
    void Submit(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
        LOG_WARNING(Service_NIFM, "(STUBBED) called");
 | 
			
		||||
 | 
			
		||||
        if (state == RequestState::NotSubmitted) {
 | 
			
		||||
            UpdateState(RequestState::Pending);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        rb.Push(ResultSuccess);
 | 
			
		||||
    }
 | 
			
		||||
@@ -201,19 +208,32 @@ private:
 | 
			
		||||
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 3};
 | 
			
		||||
        rb.Push(ResultSuccess);
 | 
			
		||||
 | 
			
		||||
        if (Network::GetHostIPv4Address().has_value()) {
 | 
			
		||||
            rb.PushEnum(RequestState::Connected);
 | 
			
		||||
        } else {
 | 
			
		||||
            rb.PushEnum(RequestState::NotSubmitted);
 | 
			
		||||
        }
 | 
			
		||||
        rb.PushEnum(state);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void GetResult(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
        LOG_WARNING(Service_NIFM, "(STUBBED) called");
 | 
			
		||||
 | 
			
		||||
        const auto result = [this] {
 | 
			
		||||
            const auto has_connection = Network::GetHostIPv4Address().has_value();
 | 
			
		||||
            switch (state) {
 | 
			
		||||
            case RequestState::NotSubmitted:
 | 
			
		||||
                return has_connection ? ResultSuccess : ResultNetworkCommunicationDisabled;
 | 
			
		||||
            case RequestState::Pending:
 | 
			
		||||
                if (has_connection) {
 | 
			
		||||
                    UpdateState(RequestState::Connected);
 | 
			
		||||
                } else {
 | 
			
		||||
                    UpdateState(RequestState::Error);
 | 
			
		||||
                }
 | 
			
		||||
                return ResultPendingConnection;
 | 
			
		||||
            case RequestState::Connected:
 | 
			
		||||
            default:
 | 
			
		||||
                return ResultSuccess;
 | 
			
		||||
            }
 | 
			
		||||
        }();
 | 
			
		||||
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        rb.Push(ResultSuccess);
 | 
			
		||||
        rb.Push(result);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void GetSystemEventReadableHandles(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
@@ -252,8 +272,15 @@ private:
 | 
			
		||||
        rb.Push<u32>(0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void UpdateState(RequestState new_state) {
 | 
			
		||||
        state = new_state;
 | 
			
		||||
        event1->Signal();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    KernelHelpers::ServiceContext service_context;
 | 
			
		||||
 | 
			
		||||
    RequestState state;
 | 
			
		||||
 | 
			
		||||
    Kernel::KEvent* event1;
 | 
			
		||||
    Kernel::KEvent* event2;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user