Changes

Jump to navigation Jump to search
2,706 bytes added ,  23:45, 10 November 2019
Line 253: Line 253:  
== GetApplyDeltaTaskInfo ==
 
== GetApplyDeltaTaskInfo ==
 
Takes an input [[#ApplyDeltaTask]], returns an output [[#ApplyDeltaTaskInfo]].
 
Takes an input [[#ApplyDeltaTask]], returns an output [[#ApplyDeltaTaskInfo]].
 +
 +
== Cmd53 ==
 +
Takes an input [[NCM_services#StorageId|StorageId]], an u16 port, an u32 Ipv4Address, an u32 '''unk''', an u64 <code>nn::ncm::ApplicationId</code>, a type-0x5 input buffer containing an array of [[NCM_services#ContentMetaKey|ContentMetaKey]], returns an output [[#ReceiveApplicationTask]].
 +
 +
This is the ReceiveApplication version of [[#Cmd69]].
 +
 +
The wrapper used by official sw passes hard-coded value 0x2 for '''unk'''.
 +
 +
== Cmd56 ==
 +
Takes an input [[#ReceiveApplicationTask]], returns an output Event and an [[#IAsyncResult]].
 +
 +
This is the ReceiveApplication version of [[#Cmd72]].
 +
 +
== Cmd57 ==
 +
Takes an input [[#ReceiveApplicationTask]], returns an output [[#ReceiveApplicationTaskInfo]].
 +
 +
This is the ReceiveApplication version of [[#GetSystemUpdateTaskInfo]].
 +
 +
== Cmd60 ==
 +
Takes an input u16 port, an u32 Ipv4Address, an u64 <code>nn::ncm::ApplicationId</code>, a type-0x5 input buffer containing an array of {unknown}, returns an output [[#SendApplicationTask]].
 +
 +
This is the SendApplication version of [[#Cmd69]].
 +
 +
== Cmd61 ==
 +
Takes an input [[#SendApplicationTask]], returns an output Event and an [[#IAsyncResult]].
 +
 +
This is the SendApplicationTask version of [[#Cmd72]].
 +
 +
== Cmd63 ==
 +
Takes an input [[#SendApplicationTask]], returns an output [[#SendApplicationTaskInfo]].
 +
 +
This is the SendApplication version of [[#GetSystemUpdateTaskInfo]].
 +
 +
== Cmd67 ==
 +
Takes a type-0x6 output buffer containing an array of [[#ReceiveApplicationTask]] and an input u64 <code>nn::ncm::ApplicationId</code>. Returns a s32 for total output entries.
 +
 +
This is the ReceiveApplication version of [[#Cmd71]].
 +
 +
== Cmd68 ==
 +
Takes a type-0x6 output buffer containing an array of [[#SendApplicationTask]] and an input u64 <code>nn::ncm::ApplicationId</code>. Returns a s32 for total output entries.
 +
 +
This is the SendApplication version of [[#Cmd71]].
    
== Cmd69 ==
 
== Cmd69 ==
Line 259: Line 301:  
Official sw sets '''unk''' to: <code>unk = stateflag==0 ? 0x4 : 0xC</code>. The port/Ipv4Address params originate from the [[NS_Services#RequestReceiveSystemUpdate|RequestReceiveSystemUpdate]] params.
 
Official sw sets '''unk''' to: <code>unk = stateflag==0 ? 0x4 : 0xC</code>. The port/Ipv4Address params originate from the [[NS_Services#RequestReceiveSystemUpdate|RequestReceiveSystemUpdate]] params.
   −
This is the Receive version of [[#CreateSystemUpdateTask]].
+
This is the ReceiveSystemUpdate version of [[#CreateSystemUpdateTask]].
    
The ContentMetaKey is for the SystemUpdate Meta.
 
The ContentMetaKey is for the SystemUpdate Meta.
Line 285: Line 327:  
Takes a type-0x6 output buffer, for an array of [[#ReceiveSystemUpdateTask]]. Returns a s32 for total output entries.
 
Takes a type-0x6 output buffer, for an array of [[#ReceiveSystemUpdateTask]]. Returns a s32 for total output entries.
   −
This is the Receive version of [[#ListSystemUpdateTask]].
+
This is the ReceiveSystemUpdate version of [[#ListSystemUpdateTask]].
    
== Cmd72 ==
 
== Cmd72 ==
 
Takes an input [[#ReceiveSystemUpdateTask]], returns an output Event and an [[#IAsyncResult]].
 
Takes an input [[#ReceiveSystemUpdateTask]], returns an output Event and an [[#IAsyncResult]].
   −
This is the Receive version of RequestSystemUpdateTaskRun.
+
This is the ReceiveSystemUpdate version of RequestSystemUpdateTaskRun.
    
This creates the [[#IAsyncResult]] object + the async [[#Contents_Delivery|thread]] which handles the [[#IAsyncResult]] operation, which uses the state previously setup by [[#Cmd69]]. This throws an error if the object was already created.
 
This creates the [[#IAsyncResult]] object + the async [[#Contents_Delivery|thread]] which handles the [[#IAsyncResult]] operation, which uses the state previously setup by [[#Cmd69]]. This throws an error if the object was already created.
Line 297: Line 339:  
Takes an input [[#ReceiveSystemUpdateTask]], returns an output [[#ReceiveSystemUpdateTaskInfo]].
 
Takes an input [[#ReceiveSystemUpdateTask]], returns an output [[#ReceiveSystemUpdateTaskInfo]].
   −
This is the Receive version of [[#GetSystemUpdateTaskInfo]].
+
This is the ReceiveSystemUpdate version of [[#GetSystemUpdateTaskInfo]].
    
== Cmd76 ==
 
== Cmd76 ==
Line 336: Line 378:     
== Cmd81 ==
 
== Cmd81 ==
Takes a type-0x6 output buffer, for an array of [[#SystemUpdateTask]]. Returns a s32 for total output entries.
+
Takes a type-0x6 output buffer, for an array of [[#SendSystemUpdateTask]]. Returns a s32 for total output entries.
    
This is the Send version of [[#Cmd71]].
 
This is the Send version of [[#Cmd71]].
Line 414: Line 456:  
|-
 
|-
 
| 0x19 || 0x7 || Padding
 
| 0x19 || 0x7 || Padding
 +
|}
 +
 +
This is a 0x20-byte struct.
 +
 +
== ReceiveApplicationTask ==
 +
This is a 0x10-byte struct.
 +
 +
== ReceiveApplicationTaskInfo ==
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x1 || Status
 +
|-
 +
| 0x1 || 0x7 || ?
 +
|-
 +
| 0x8 || 0x10 || [[NS_Services#ReceiveApplicationProgress|ReceiveApplicationProgress]]
 +
|-
 +
| 0x18 || 0x20 || Unknown
 +
|}
 +
 +
This is a 0x38-byte struct.
 +
 +
== SendApplicationTask ==
 +
This is a 0x10-byte struct.
 +
 +
== SendApplicationTaskInfo ==
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x1 || Status
 +
|-
 +
| 0x1 || 0x7 || ?
 +
|-
 +
| 0x8 || 0x10 || [[NS_Services#SendApplicationProgress|SendApplicationProgress]]
 +
|-
 +
| 0x18 || 0x8 || Unknown
 
|}
 
|}
   Line 660: Line 744:     
= Contents Delivery =
 
= Contents Delivery =
Content can be transferred with a custom protocol over the network. This is intended for use with local [[LDN_services|ldn]] networks, however the used IP addresses can be arbitary. This can be used for SystemUpdates via the above Send/Receive commands (which are then used via [[NS_Services#ns:su|ns:su]]). Application content can also be transferred, which uses a similar (?) protocol.
+
Content can be transferred with a custom protocol over the network. This is intended for use with local [[LDN_services|ldn]] networks, however the used IP addresses can be arbitrary. This can be used for SystemUpdates via the above Send/Receive commands (which are then used via [[NS_Services#ns:su|ns:su]]). Application Patch content can also be transferred with this.
    
See [[#Cmd69]]/[[#Cmd76]] for the socket setup during Receive/Send task creation. Receive system = client, while Send system = server.
 
See [[#Cmd69]]/[[#Cmd76]] for the socket setup during Receive/Send task creation. Receive system = client, while Send system = server.
Line 671: Line 755:  
** This handles installation, with messages being used via vtable funcptrs.
 
** This handles installation, with messages being used via vtable funcptrs.
   −
The Send async [[#Cmd77|thread]] does the following:
+
The Send async [[#Cmd77|thread]] does the following (the SendApplication [[#Cmd61|thread]] is identical except it uses different previously setup state):
 
* This is identical to the Receive thread except the called func is different.
 
* This is identical to the Receive thread except the called func is different.
 
** That func does:
 
** That func does:
Line 682: Line 766:  
*** This repeatedly receives requests, processes them, and sends the replies. This loop (and func) will only exit when an error occurs, or when request ID 0x0 is used (the latter causes the func to return 0).
 
*** This repeatedly receives requests, processes them, and sends the replies. This loop (and func) will only exit when an error occurs, or when request ID 0x0 is used (the latter causes the func to return 0).
 
*** This handles the requests as required by the ID, no particular order is required by the server.
 
*** This handles the requests as required by the ID, no particular order is required by the server.
*** All IDs in the below table are implemented by the server, even 0x3 for SystemUpdate.
+
*** All IDs in the below table are implemented by the server, for both SystemUpdate and Application.
 
*** An error is thrown if the ID is unrecognized. An error is thrown if the value of the request size1 doesn't match the expected fixed value (except for ID 0x0).
 
*** An error is thrown if the ID is unrecognized. An error is thrown if the value of the request size1 doesn't match the expected fixed value (except for ID 0x0).
   Line 725: Line 809:  
The first message used by the client with SystemUpdate is ID 0x1.
 
The first message used by the client with SystemUpdate is ID 0x1.
   −
With SystemUpdate the server only uses StorageId=NandSystem.
+
With SystemUpdate the server only uses StorageId=BuiltInSystem.
    
Messages:
 
Messages:
Line 739: Line 823:  
| 0x2 || 0x18-bytes: [[NCM_services#ContentId|ContentId]] u8 flag, u8 pad[7]. When flag is 0, during the transfer [[#SendSystemUpdateTaskInfo]] [[NS_Services#SystemUpdateProgress|SystemUpdateProgress]] total_size is increased using the size of the current chunk. Once the transfer is finished, the end result is that it would be increased by the total content-size. || Size from [[NCM_services#GetSizeFromContentId|GetSizeFromContentId]] with data from [[NCM_services#ReadContentIdFile|ReadContentIdFile]]. || Gets the entire content data for the specified ContentId.
 
| 0x2 || 0x18-bytes: [[NCM_services#ContentId|ContentId]] u8 flag, u8 pad[7]. When flag is 0, during the transfer [[#SendSystemUpdateTaskInfo]] [[NS_Services#SystemUpdateProgress|SystemUpdateProgress]] total_size is increased using the size of the current chunk. Once the transfer is finished, the end result is that it would be increased by the total content-size. || Size from [[NCM_services#GetSizeFromContentId|GetSizeFromContentId]] with data from [[NCM_services#ReadContentIdFile|ReadContentIdFile]]. || Gets the entire content data for the specified ContentId.
 
|-
 
|-
| 0x3 || 0x10-byte input for [[ETicket_services|es]] GetCommonTicketAndCertificateSize/GetCommonTicketAndCertificateData. || 0x8-bytes: two size u32s. Then two blocks of data with the sizes specified by the u32s. The server loads the sizes and data from [[ETicket_services|es]] GetCommonTicketAndCertificateSize/GetCommonTicketAndCertificateData. || This is presumably used by the client for Application-Delivery. The two blocks of data are used as the buffers for [[ETicket_services|es]] ImportTicket by the client.
+
| 0x3 || 0x10-byte input for [[ETicket_services|es]] GetCommonTicketAndCertificateSize/GetCommonTicketAndCertificateData. || 0x8-bytes: two size u32s. Then two blocks of data with the sizes specified by the u32s. The server loads the sizes and data from [[ETicket_services|es]] GetCommonTicketAndCertificateSize/GetCommonTicketAndCertificateData. || The two blocks of data are used as the buffers for [[ETicket_services|es]] ImportTicket by the client. This is used for transferring the specified Application Patch CommonTicket.
 
|-
 
|-
 
| 0x4 || s64 current_size || 0x0 || The input data is copied into the server state, for [[#SendSystemUpdateTaskInfo]] [[NS_Services#SystemUpdateProgress|SystemUpdateProgress]] current_size.
 
| 0x4 || s64 current_size || 0x0 || The input data is copied into the server state, for [[#SendSystemUpdateTaskInfo]] [[NS_Services#SystemUpdateProgress|SystemUpdateProgress]] current_size.

Navigation menu