mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	Switched uuids from u128 to new UUID struct
This commit is contained in:
		
							parent
							
								
									f156a45c01
								
							
						
					
					
						commit
						5f8d253ce0
					
				| @ -3,7 +3,10 @@ | |||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
|  | #include "common/common_types.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
|  | #include "common/swap.h" | ||||||
|  | #include "core/core_timing.h" | ||||||
| #include "core/hle/ipc_helpers.h" | #include "core/hle/ipc_helpers.h" | ||||||
| #include "core/hle/service/acc/acc.h" | #include "core/hle/service/acc/acc.h" | ||||||
| #include "core/hle/service/acc/acc_aa.h" | #include "core/hle/service/acc/acc_aa.h" | ||||||
| @ -13,7 +16,6 @@ | |||||||
| #include "core/settings.h" | #include "core/settings.h" | ||||||
| 
 | 
 | ||||||
| namespace Service::Account { | namespace Service::Account { | ||||||
| 
 |  | ||||||
| // TODO: RE this structure
 | // TODO: RE this structure
 | ||||||
| struct UserData { | struct UserData { | ||||||
|     INSERT_PADDING_WORDS(1); |     INSERT_PADDING_WORDS(1); | ||||||
| @ -33,11 +35,11 @@ struct ProfileBase { | |||||||
| static_assert(sizeof(ProfileBase) == 0x38, "ProfileBase structure has incorrect size"); | static_assert(sizeof(ProfileBase) == 0x38, "ProfileBase structure has incorrect size"); | ||||||
| 
 | 
 | ||||||
| // TODO(ogniK): Generate a real user id based on username, md5(username) maybe?
 | // TODO(ogniK): Generate a real user id based on username, md5(username) maybe?
 | ||||||
| static constexpr u128 DEFAULT_USER_ID{1ull, 0ull}; | static UUID DEFAULT_USER_ID{1ull, 0ull}; | ||||||
| 
 | 
 | ||||||
| class IProfile final : public ServiceFramework<IProfile> { | class IProfile final : public ServiceFramework<IProfile> { | ||||||
| public: | public: | ||||||
|     explicit IProfile(u128 user_id) : ServiceFramework("IProfile"), user_id(user_id) { |     explicit IProfile(UUID user_id) : ServiceFramework("IProfile"), user_id(user_id) { | ||||||
|         static const FunctionInfo functions[] = { |         static const FunctionInfo functions[] = { | ||||||
|             {0, &IProfile::Get, "Get"}, |             {0, &IProfile::Get, "Get"}, | ||||||
|             {1, &IProfile::GetBase, "GetBase"}, |             {1, &IProfile::GetBase, "GetBase"}, | ||||||
| @ -51,7 +53,7 @@ private: | |||||||
|     void Get(Kernel::HLERequestContext& ctx) { |     void Get(Kernel::HLERequestContext& ctx) { | ||||||
|         LOG_WARNING(Service_ACC, "(STUBBED) called"); |         LOG_WARNING(Service_ACC, "(STUBBED) called"); | ||||||
|         ProfileBase profile_base{}; |         ProfileBase profile_base{}; | ||||||
|         profile_base.user_id = user_id; |         profile_base.user_id = user_id.uuid; | ||||||
|         if (Settings::values.username.size() > profile_base.username.size()) { |         if (Settings::values.username.size() > profile_base.username.size()) { | ||||||
|             std::copy_n(Settings::values.username.begin(), profile_base.username.size(), |             std::copy_n(Settings::values.username.begin(), profile_base.username.size(), | ||||||
|                         profile_base.username.begin()); |                         profile_base.username.begin()); | ||||||
| @ -70,7 +72,7 @@ private: | |||||||
| 
 | 
 | ||||||
|         // TODO(Subv): Retrieve this information from somewhere.
 |         // TODO(Subv): Retrieve this information from somewhere.
 | ||||||
|         ProfileBase profile_base{}; |         ProfileBase profile_base{}; | ||||||
|         profile_base.user_id = user_id; |         profile_base.user_id = user_id.uuid; | ||||||
|         if (Settings::values.username.size() > profile_base.username.size()) { |         if (Settings::values.username.size() > profile_base.username.size()) { | ||||||
|             std::copy_n(Settings::values.username.begin(), profile_base.username.size(), |             std::copy_n(Settings::values.username.begin(), profile_base.username.size(), | ||||||
|                         profile_base.username.begin()); |                         profile_base.username.begin()); | ||||||
| @ -83,7 +85,7 @@ private: | |||||||
|         rb.PushRaw(profile_base); |         rb.PushRaw(profile_base); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     u128 user_id; ///< The user id this profile refers to.
 |     UUID user_id; ///< The user id this profile refers to.
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class IManagerForApplication final : public ServiceFramework<IManagerForApplication> { | class IManagerForApplication final : public ServiceFramework<IManagerForApplication> { | ||||||
| @ -136,7 +138,7 @@ void Module::Interface::GetUserExistence(Kernel::HLERequestContext& ctx) { | |||||||
| void Module::Interface::ListAllUsers(Kernel::HLERequestContext& ctx) { | void Module::Interface::ListAllUsers(Kernel::HLERequestContext& ctx) { | ||||||
|     LOG_WARNING(Service_ACC, "(STUBBED) called"); |     LOG_WARNING(Service_ACC, "(STUBBED) called"); | ||||||
|     // TODO(Subv): There is only one user for now.
 |     // TODO(Subv): There is only one user for now.
 | ||||||
|     const std::vector<u128> user_ids = {DEFAULT_USER_ID}; |     const std::vector<UUID> user_ids = {DEFAULT_USER_ID}; | ||||||
|     ctx.WriteBuffer(user_ids); |     ctx.WriteBuffer(user_ids); | ||||||
|     IPC::ResponseBuilder rb{ctx, 2}; |     IPC::ResponseBuilder rb{ctx, 2}; | ||||||
|     rb.Push(RESULT_SUCCESS); |     rb.Push(RESULT_SUCCESS); | ||||||
| @ -145,7 +147,7 @@ void Module::Interface::ListAllUsers(Kernel::HLERequestContext& ctx) { | |||||||
| void Module::Interface::ListOpenUsers(Kernel::HLERequestContext& ctx) { | void Module::Interface::ListOpenUsers(Kernel::HLERequestContext& ctx) { | ||||||
|     LOG_WARNING(Service_ACC, "(STUBBED) called"); |     LOG_WARNING(Service_ACC, "(STUBBED) called"); | ||||||
|     // TODO(Subv): There is only one user for now.
 |     // TODO(Subv): There is only one user for now.
 | ||||||
|     const std::vector<u128> user_ids = {DEFAULT_USER_ID}; |     const std::vector<UUID> user_ids = {DEFAULT_USER_ID}; | ||||||
|     ctx.WriteBuffer(user_ids); |     ctx.WriteBuffer(user_ids); | ||||||
|     IPC::ResponseBuilder rb{ctx, 2}; |     IPC::ResponseBuilder rb{ctx, 2}; | ||||||
|     rb.Push(RESULT_SUCCESS); |     rb.Push(RESULT_SUCCESS); | ||||||
| @ -153,11 +155,11 @@ void Module::Interface::ListOpenUsers(Kernel::HLERequestContext& ctx) { | |||||||
| 
 | 
 | ||||||
| void Module::Interface::GetProfile(Kernel::HLERequestContext& ctx) { | void Module::Interface::GetProfile(Kernel::HLERequestContext& ctx) { | ||||||
|     IPC::RequestParser rp{ctx}; |     IPC::RequestParser rp{ctx}; | ||||||
|     u128 user_id = rp.PopRaw<u128>(); |     UUID user_id = rp.PopRaw<UUID>(); | ||||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||||
|     rb.Push(RESULT_SUCCESS); |     rb.Push(RESULT_SUCCESS); | ||||||
|     rb.PushIpcInterface<IProfile>(user_id); |     rb.PushIpcInterface<IProfile>(user_id); | ||||||
|     LOG_DEBUG(Service_ACC, "called user_id=0x{:016X}{:016X}", user_id[1], user_id[0]); |     LOG_DEBUG(Service_ACC, "called user_id={}", user_id.Format()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Module::Interface::InitializeApplicationInfo(Kernel::HLERequestContext& ctx) { | void Module::Interface::InitializeApplicationInfo(Kernel::HLERequestContext& ctx) { | ||||||
|  | |||||||
| @ -8,6 +8,43 @@ | |||||||
| 
 | 
 | ||||||
| namespace Service::Account { | namespace Service::Account { | ||||||
| 
 | 
 | ||||||
|  | struct UUID { | ||||||
|  |     // UUIDs which are 0 are considered invalid!
 | ||||||
|  |     u128 uuid{0, 0}; | ||||||
|  |     UUID() = default; | ||||||
|  |     explicit UUID(const u128& id) { | ||||||
|  |         uuid[0] = id[0]; | ||||||
|  |         uuid[1] = id[1]; | ||||||
|  |     }; | ||||||
|  |     explicit UUID(const u64& lo, const u64& hi) { | ||||||
|  |         uuid[0] = lo; | ||||||
|  |         uuid[1] = hi; | ||||||
|  |     }; | ||||||
|  |     operator bool() const { | ||||||
|  |         return uuid[0] != 0x0 && uuid[1] != 0x0; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     bool operator==(const UUID& rhs) { | ||||||
|  |         return uuid[0] == rhs.uuid[0] && uuid[1] == rhs.uuid[1]; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     bool operator!=(const UUID& rhs) { | ||||||
|  |         return uuid[0] != rhs.uuid[0] || uuid[1] != rhs.uuid[1]; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // TODO(ogniK): Properly generate uuids based on RFC-4122
 | ||||||
|  |     const UUID& Generate() { | ||||||
|  |         uuid[0] = (static_cast<u64>(std::rand()) << 32) | std::rand(); | ||||||
|  |         uuid[1] = (static_cast<u64>(std::rand()) << 32) | std::rand(); | ||||||
|  |         return *this; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     std::string Format() { | ||||||
|  |         return fmt::format("0x{:016X}{:016X}", uuid[1], uuid[0]); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(UUID) == 16, "UUID is an invalid size!"); | ||||||
|  | 
 | ||||||
| class Module final { | class Module final { | ||||||
| public: | public: | ||||||
|     class Interface : public ServiceFramework<Interface> { |     class Interface : public ServiceFramework<Interface> { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 David Marcec
						David Marcec