Merge pull request #5859 from Morph1984/nifm
nifm: Stub GetCurrentNetworkProfile and GetCurrentIpConfigInfo
This commit is contained in:
		| @@ -21,6 +21,93 @@ enum class RequestState : u32 { | |||||||
|     Connected = 3, |     Connected = 3, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | struct IpAddressSetting { | ||||||
|  |     bool is_automatic{}; | ||||||
|  |     Network::IPv4Address current_address{}; | ||||||
|  |     Network::IPv4Address subnet_mask{}; | ||||||
|  |     Network::IPv4Address gateway{}; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(IpAddressSetting) == 0xD, "IpAddressSetting has incorrect size."); | ||||||
|  |  | ||||||
|  | struct DnsSetting { | ||||||
|  |     bool is_automatic{}; | ||||||
|  |     Network::IPv4Address primary_dns{}; | ||||||
|  |     Network::IPv4Address secondary_dns{}; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(DnsSetting) == 0x9, "DnsSetting has incorrect size."); | ||||||
|  |  | ||||||
|  | struct ProxySetting { | ||||||
|  |     bool enabled{}; | ||||||
|  |     INSERT_PADDING_BYTES(1); | ||||||
|  |     u16 port{}; | ||||||
|  |     std::array<char, 0x64> proxy_server{}; | ||||||
|  |     bool automatic_auth_enabled{}; | ||||||
|  |     std::array<char, 0x20> user{}; | ||||||
|  |     std::array<char, 0x20> password{}; | ||||||
|  |     INSERT_PADDING_BYTES(1); | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(ProxySetting) == 0xAA, "ProxySetting has incorrect size."); | ||||||
|  |  | ||||||
|  | struct IpSettingData { | ||||||
|  |     IpAddressSetting ip_address_setting{}; | ||||||
|  |     DnsSetting dns_setting{}; | ||||||
|  |     ProxySetting proxy_setting{}; | ||||||
|  |     u16 mtu{}; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(IpSettingData) == 0xC2, "IpSettingData has incorrect size."); | ||||||
|  |  | ||||||
|  | struct SfWirelessSettingData { | ||||||
|  |     u8 ssid_length{}; | ||||||
|  |     std::array<char, 0x20> ssid{}; | ||||||
|  |     u8 unknown_1{}; | ||||||
|  |     u8 unknown_2{}; | ||||||
|  |     u8 unknown_3{}; | ||||||
|  |     std::array<char, 0x41> passphrase{}; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(SfWirelessSettingData) == 0x65, "SfWirelessSettingData has incorrect size."); | ||||||
|  |  | ||||||
|  | struct NifmWirelessSettingData { | ||||||
|  |     u8 ssid_length{}; | ||||||
|  |     std::array<char, 0x21> ssid{}; | ||||||
|  |     u8 unknown_1{}; | ||||||
|  |     INSERT_PADDING_BYTES(1); | ||||||
|  |     u32 unknown_2{}; | ||||||
|  |     u32 unknown_3{}; | ||||||
|  |     std::array<char, 0x41> passphrase{}; | ||||||
|  |     INSERT_PADDING_BYTES(3); | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(NifmWirelessSettingData) == 0x70, | ||||||
|  |               "NifmWirelessSettingData has incorrect size."); | ||||||
|  |  | ||||||
|  | #pragma pack(push, 1) | ||||||
|  | struct SfNetworkProfileData { | ||||||
|  |     IpSettingData ip_setting_data{}; | ||||||
|  |     u128 uuid{}; | ||||||
|  |     std::array<char, 0x40> network_name{}; | ||||||
|  |     u8 unknown_1{}; | ||||||
|  |     u8 unknown_2{}; | ||||||
|  |     u8 unknown_3{}; | ||||||
|  |     u8 unknown_4{}; | ||||||
|  |     SfWirelessSettingData wireless_setting_data{}; | ||||||
|  |     INSERT_PADDING_BYTES(1); | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(SfNetworkProfileData) == 0x17C, "SfNetworkProfileData has incorrect size."); | ||||||
|  |  | ||||||
|  | struct NifmNetworkProfileData { | ||||||
|  |     u128 uuid{}; | ||||||
|  |     std::array<char, 0x40> network_name{}; | ||||||
|  |     u32 unknown_1{}; | ||||||
|  |     u32 unknown_2{}; | ||||||
|  |     u8 unknown_3{}; | ||||||
|  |     u8 unknown_4{}; | ||||||
|  |     INSERT_PADDING_BYTES(2); | ||||||
|  |     NifmWirelessSettingData wireless_setting_data{}; | ||||||
|  |     IpSettingData ip_setting_data{}; | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(NifmNetworkProfileData) == 0x18E, | ||||||
|  |               "NifmNetworkProfileData has incorrect size."); | ||||||
|  | #pragma pack(pop) | ||||||
|  |  | ||||||
| class IScanRequest final : public ServiceFramework<IScanRequest> { | class IScanRequest final : public ServiceFramework<IScanRequest> { | ||||||
| public: | public: | ||||||
|     explicit IScanRequest(Core::System& system_) : ServiceFramework{system_, "IScanRequest"} { |     explicit IScanRequest(Core::System& system_) : ServiceFramework{system_, "IScanRequest"} { | ||||||
| @@ -183,6 +270,46 @@ private: | |||||||
|         rb.Push(RESULT_SUCCESS); |         rb.Push(RESULT_SUCCESS); | ||||||
|         rb.PushIpcInterface<IRequest>(system); |         rb.PushIpcInterface<IRequest>(system); | ||||||
|     } |     } | ||||||
|  |     void GetCurrentNetworkProfile(Kernel::HLERequestContext& ctx) { | ||||||
|  |         LOG_WARNING(Service_NIFM, "(STUBBED) called"); | ||||||
|  |  | ||||||
|  |         const SfNetworkProfileData network_profile_data{ | ||||||
|  |             .ip_setting_data{ | ||||||
|  |                 .ip_address_setting{ | ||||||
|  |                     .is_automatic{true}, | ||||||
|  |                     .current_address{192, 168, 1, 100}, | ||||||
|  |                     .subnet_mask{255, 255, 255, 0}, | ||||||
|  |                     .gateway{192, 168, 1, 1}, | ||||||
|  |                 }, | ||||||
|  |                 .dns_setting{ | ||||||
|  |                     .is_automatic{true}, | ||||||
|  |                     .primary_dns{1, 1, 1, 1}, | ||||||
|  |                     .secondary_dns{1, 0, 0, 1}, | ||||||
|  |                 }, | ||||||
|  |                 .proxy_setting{ | ||||||
|  |                     .enabled{false}, | ||||||
|  |                     .port{}, | ||||||
|  |                     .proxy_server{}, | ||||||
|  |                     .automatic_auth_enabled{}, | ||||||
|  |                     .user{}, | ||||||
|  |                     .password{}, | ||||||
|  |                 }, | ||||||
|  |                 .mtu{1500}, | ||||||
|  |             }, | ||||||
|  |             .uuid{0xdeadbeef, 0xdeadbeef}, | ||||||
|  |             .network_name{"yuzu Network"}, | ||||||
|  |             .wireless_setting_data{ | ||||||
|  |                 .ssid_length{12}, | ||||||
|  |                 .ssid{"yuzu Network"}, | ||||||
|  |                 .passphrase{"yuzupassword"}, | ||||||
|  |             }, | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         ctx.WriteBuffer(network_profile_data); | ||||||
|  |  | ||||||
|  |         IPC::ResponseBuilder rb{ctx, 2}; | ||||||
|  |         rb.Push(RESULT_SUCCESS); | ||||||
|  |     } | ||||||
|     void RemoveNetworkProfile(Kernel::HLERequestContext& ctx) { |     void RemoveNetworkProfile(Kernel::HLERequestContext& ctx) { | ||||||
|         LOG_WARNING(Service_NIFM, "(STUBBED) called"); |         LOG_WARNING(Service_NIFM, "(STUBBED) called"); | ||||||
|  |  | ||||||
| @@ -214,6 +341,34 @@ private: | |||||||
|         rb.PushIpcInterface<INetworkProfile>(system); |         rb.PushIpcInterface<INetworkProfile>(system); | ||||||
|         rb.PushRaw<u128>(uuid); |         rb.PushRaw<u128>(uuid); | ||||||
|     } |     } | ||||||
|  |     void GetCurrentIpConfigInfo(Kernel::HLERequestContext& ctx) { | ||||||
|  |         LOG_WARNING(Service_NIFM, "(STUBBED) called"); | ||||||
|  |  | ||||||
|  |         struct IpConfigInfo { | ||||||
|  |             IpAddressSetting ip_address_setting; | ||||||
|  |             DnsSetting dns_setting; | ||||||
|  |         }; | ||||||
|  |         static_assert(sizeof(IpConfigInfo) == sizeof(IpAddressSetting) + sizeof(DnsSetting), | ||||||
|  |                       "IpConfigInfo has incorrect size."); | ||||||
|  |  | ||||||
|  |         const IpConfigInfo ip_config_info{ | ||||||
|  |             .ip_address_setting{ | ||||||
|  |                 .is_automatic{true}, | ||||||
|  |                 .current_address{192, 168, 1, 100}, | ||||||
|  |                 .subnet_mask{255, 255, 255, 0}, | ||||||
|  |                 .gateway{192, 168, 1, 1}, | ||||||
|  |             }, | ||||||
|  |             .dns_setting{ | ||||||
|  |                 .is_automatic{true}, | ||||||
|  |                 .primary_dns{1, 1, 1, 1}, | ||||||
|  |                 .secondary_dns{1, 0, 0, 1}, | ||||||
|  |             }, | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         IPC::ResponseBuilder rb{ctx, 2 + sizeof(IpConfigInfo) / sizeof(u32)}; | ||||||
|  |         rb.Push(RESULT_SUCCESS); | ||||||
|  |         rb.PushRaw<IpConfigInfo>(ip_config_info); | ||||||
|  |     } | ||||||
|     void IsWirelessCommunicationEnabled(Kernel::HLERequestContext& ctx) { |     void IsWirelessCommunicationEnabled(Kernel::HLERequestContext& ctx) { | ||||||
|         LOG_WARNING(Service_NIFM, "(STUBBED) called"); |         LOG_WARNING(Service_NIFM, "(STUBBED) called"); | ||||||
|  |  | ||||||
| @@ -252,7 +407,7 @@ IGeneralService::IGeneralService(Core::System& system_) | |||||||
|         {1, &IGeneralService::GetClientId, "GetClientId"}, |         {1, &IGeneralService::GetClientId, "GetClientId"}, | ||||||
|         {2, &IGeneralService::CreateScanRequest, "CreateScanRequest"}, |         {2, &IGeneralService::CreateScanRequest, "CreateScanRequest"}, | ||||||
|         {4, &IGeneralService::CreateRequest, "CreateRequest"}, |         {4, &IGeneralService::CreateRequest, "CreateRequest"}, | ||||||
|         {5, nullptr, "GetCurrentNetworkProfile"}, |         {5, &IGeneralService::GetCurrentNetworkProfile, "GetCurrentNetworkProfile"}, | ||||||
|         {6, nullptr, "EnumerateNetworkInterfaces"}, |         {6, nullptr, "EnumerateNetworkInterfaces"}, | ||||||
|         {7, nullptr, "EnumerateNetworkProfiles"}, |         {7, nullptr, "EnumerateNetworkProfiles"}, | ||||||
|         {8, nullptr, "GetNetworkProfile"}, |         {8, nullptr, "GetNetworkProfile"}, | ||||||
| @@ -262,7 +417,7 @@ IGeneralService::IGeneralService(Core::System& system_) | |||||||
|         {12, &IGeneralService::GetCurrentIpAddress, "GetCurrentIpAddress"}, |         {12, &IGeneralService::GetCurrentIpAddress, "GetCurrentIpAddress"}, | ||||||
|         {13, nullptr, "GetCurrentAccessPointOld"}, |         {13, nullptr, "GetCurrentAccessPointOld"}, | ||||||
|         {14, &IGeneralService::CreateTemporaryNetworkProfile, "CreateTemporaryNetworkProfile"}, |         {14, &IGeneralService::CreateTemporaryNetworkProfile, "CreateTemporaryNetworkProfile"}, | ||||||
|         {15, nullptr, "GetCurrentIpConfigInfo"}, |         {15, &IGeneralService::GetCurrentIpConfigInfo, "GetCurrentIpConfigInfo"}, | ||||||
|         {16, nullptr, "SetWirelessCommunicationEnabled"}, |         {16, nullptr, "SetWirelessCommunicationEnabled"}, | ||||||
|         {17, &IGeneralService::IsWirelessCommunicationEnabled, "IsWirelessCommunicationEnabled"}, |         {17, &IGeneralService::IsWirelessCommunicationEnabled, "IsWirelessCommunicationEnabled"}, | ||||||
|         {18, nullptr, "GetInternetConnectionStatus"}, |         {18, nullptr, "GetInternetConnectionStatus"}, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user