mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	UDS: divide IPC and impl for BeginHostingNetwork
This commit is contained in:
		
							parent
							
								
									1076864935
								
							
						
					
					
						commit
						5353d539ce
					
				
					 2 changed files with 24 additions and 14 deletions
				
			
		|  | @ -814,23 +814,14 @@ void NWM_UDS::Unbind(Kernel::HLERequestContext& ctx) { | ||||||
|     rb.Push<u32>(0); |     rb.Push<u32>(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void NWM_UDS::BeginHostingNetwork(Kernel::HLERequestContext& ctx) { | ResultCode NWM_UDS::BeginHostingNetwork(const u8* network_info_buffer, | ||||||
|     IPC::RequestParser rp(ctx, 0x1D, 1, 4); |                                         std::size_t network_info_size, std::vector<u8> passphrase) { | ||||||
| 
 |  | ||||||
|     const u32 passphrase_size = rp.Pop<u32>(); |  | ||||||
| 
 |  | ||||||
|     const std::vector<u8> network_info_buffer = rp.PopStaticBuffer(); |  | ||||||
|     ASSERT(network_info_buffer.size() == sizeof(NetworkInfo)); |  | ||||||
|     const std::vector<u8> passphrase = rp.PopStaticBuffer(); |  | ||||||
|     ASSERT(passphrase.size() == passphrase_size); |  | ||||||
| 
 |  | ||||||
|     // TODO(Subv): Store the passphrase and verify it when attempting a connection.
 |     // TODO(Subv): Store the passphrase and verify it when attempting a connection.
 | ||||||
| 
 | 
 | ||||||
|     LOG_DEBUG(Service_NWM, "called"); |  | ||||||
| 
 |  | ||||||
|     { |     { | ||||||
|         std::lock_guard<std::mutex> lock(connection_status_mutex); |         std::lock_guard<std::mutex> lock(connection_status_mutex); | ||||||
|         std::memcpy(&network_info, network_info_buffer.data(), sizeof(NetworkInfo)); |         network_info = {}; | ||||||
|  |         std::memcpy(&network_info, network_info_buffer, network_info_size); | ||||||
| 
 | 
 | ||||||
|         // The real UDS module throws a fatal error if this assert fails.
 |         // The real UDS module throws a fatal error if this assert fails.
 | ||||||
|         ASSERT_MSG(network_info.max_nodes > 1, "Trying to host a network of only one member."); |         ASSERT_MSG(network_info.max_nodes > 1, "Trying to host a network of only one member."); | ||||||
|  | @ -886,10 +877,26 @@ void NWM_UDS::BeginHostingNetwork(Kernel::HLERequestContext& ctx) { | ||||||
|     system.CoreTiming().ScheduleEvent(msToCycles(DefaultBeaconInterval * MillisecondsPerTU), |     system.CoreTiming().ScheduleEvent(msToCycles(DefaultBeaconInterval * MillisecondsPerTU), | ||||||
|                                       beacon_broadcast_event, 0); |                                       beacon_broadcast_event, 0); | ||||||
| 
 | 
 | ||||||
|  |     return RESULT_SUCCESS; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void NWM_UDS::BeginHostingNetwork(Kernel::HLERequestContext& ctx) { | ||||||
|  |     IPC::RequestParser rp(ctx, 0x1D, 1, 4); | ||||||
|  | 
 | ||||||
|  |     const u32 passphrase_size = rp.Pop<u32>(); | ||||||
|  | 
 | ||||||
|  |     const std::vector<u8> network_info_buffer = rp.PopStaticBuffer(); | ||||||
|  |     ASSERT(network_info_buffer.size() == sizeof(NetworkInfo)); | ||||||
|  |     std::vector<u8> passphrase = rp.PopStaticBuffer(); | ||||||
|  |     ASSERT(passphrase.size() == passphrase_size); | ||||||
|  | 
 | ||||||
|  |     LOG_DEBUG(Service_NWM, "called"); | ||||||
|  |     auto result = BeginHostingNetwork(network_info_buffer.data(), network_info_buffer.size(), | ||||||
|  |                                       std::move(passphrase)); | ||||||
|     LOG_DEBUG(Service_NWM, "An UDS network has been created."); |     LOG_DEBUG(Service_NWM, "An UDS network has been created."); | ||||||
| 
 | 
 | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); |     IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||||||
|     rb.Push(RESULT_SUCCESS); |     rb.Push(result); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void NWM_UDS::UpdateNetworkAttribute(Kernel::HLERequestContext& ctx) { | void NWM_UDS::UpdateNetworkAttribute(Kernel::HLERequestContext& ctx) { | ||||||
|  |  | ||||||
|  | @ -388,6 +388,9 @@ private: | ||||||
|         u32 sharedmem_size, const NodeInfo& node, u16 version, |         u32 sharedmem_size, const NodeInfo& node, u16 version, | ||||||
|         Kernel::SharedPtr<Kernel::SharedMemory> sharedmem); |         Kernel::SharedPtr<Kernel::SharedMemory> sharedmem); | ||||||
| 
 | 
 | ||||||
|  |     ResultCode BeginHostingNetwork(const u8* network_info_buffer, std::size_t network_info_size, | ||||||
|  |                                    std::vector<u8> passphrase); | ||||||
|  | 
 | ||||||
|     void BeaconBroadcastCallback(u64 userdata, s64 cycles_late); |     void BeaconBroadcastCallback(u64 userdata, s64 cycles_late); | ||||||
| 
 | 
 | ||||||
|     /**
 |     /**
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue