Line 1: |
Line 1: |
− | =nim= | + | = nim = |
| + | This is "nn::nim::detail::INetworkInstallManager". |
| | | |
− | =nim:shp= | + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || CreateSystemUpdateTask |
| + | |- |
| + | | 1 || [[#DestroySystemUpdateTask]] |
| + | |- |
| + | | 2 || [[#ListSystemUpdateTask]] |
| + | |- |
| + | | 3 || RequestSystemUpdateTaskRun |
| + | |- |
| + | | 4 || [[#GetSystemUpdateTaskInfo]] |
| + | |- |
| + | | 5 || [[#CommitSystemUpdateTask]] |
| + | |- |
| + | | 6 || CreateNetworkInstallTask |
| + | |- |
| + | | 7 || DestroyNetworkInstallTask |
| + | |- |
| + | | 8 || ListNetworkInstallTask |
| + | |- |
| + | | 9 || RequestNetworkInstallTaskRun |
| + | |- |
| + | | 10 || GetNetworkInstallTaskInfo |
| + | |- |
| + | | 11 || CommitNetworkInstallTask |
| + | |- |
| + | | 12 || RequestLatestSystemUpdateMeta |
| + | |- |
| + | | 14 || ListApplicationNetworkInstallTask |
| + | |- |
| + | | 15 || ListNetworkInstallTaskContentMeta |
| + | |- |
| + | | 16 || RequestLatestVersion |
| + | |- |
| + | | 17 || SetNetworkInstallTaskAttribute |
| + | |- |
| + | | 18 || AddNetworkInstallTaskContentMeta |
| + | |- |
| + | | 19 || [[#GetDownloadedSystemDataPath]] |
| + | |- |
| + | | 20 || CalculateNetworkInstallTaskRequiredSize |
| + | |- |
| + | | 21 || [[#IsExFatDriverIncluded]] |
| + | |- |
| + | | 22 || GetBackgroundDownloadStressTaskInfo |
| + | |- |
| + | | 23 || [2.0.0+] RequestDeviceAuthenticationToken |
| + | |- |
| + | | 24 || [2.0.0+] RequestGameCardRegistrationStatus |
| + | |- |
| + | | 25 || [2.0.0+] RequestRegisterGameCard |
| + | |- |
| + | | 26 || [2.0.0+] RequestRegisterNotificationToken |
| + | |- |
| + | | 27 || [2.0.0+] RequestDownloadTaskList |
| + | |- |
| + | | 28 || [2.0.0+] RequestApplicationControl |
| + | |- |
| + | | 29 || [2.0.0+] RequestLatestApplicationControl |
| + | |- |
| + | | 30 || [2.0.0+] RequestVersionList |
| + | |- |
| + | | 31 || [2.0.0+] CreateApplyDeltaTask |
| + | |- |
| + | | 32 || [2.0.0+] DestroyApplyDeltaTask |
| + | |- |
| + | | 33 || [2.0.0+] ListApplicationApplyDeltaTask |
| + | |- |
| + | | 34 || [2.0.0+] RequestApplyDeltaTaskRun |
| + | |- |
| + | | 35 || [2.0.0+] GetApplyDeltaTaskInfo |
| + | |- |
| + | | 36 || [2.0.0+] ListApplyDeltaTask |
| + | |- |
| + | | 37 || [2.0.0+] CommitApplyDeltaTask |
| + | |- |
| + | | 38 || [2.0.0+] CalculateApplyDeltaTaskRequiredSize |
| + | |- |
| + | | 39 || [2.0.0+] PrepareShutdown |
| + | |- |
| + | | 40 || [2.0.0+] ListApplyDeltaTask2 |
| + | |- |
| + | | 41 || [2.0.0+] ClearNotEnoughSpaceStateOfApplyDeltaTask |
| + | |- |
| + | | 42 || [3.0.0+] |
| + | |- |
| + | | 43 || [3.0.0+] |
| + | |- |
| + | | 44 || [3.0.0+] |
| + | |- |
| + | | 45 || [3.0.0+] |
| + | |- |
| + | | 46 || [3.0.0+] |
| + | |- |
| + | | 47 || [4.0.0+] |
| + | |- |
| + | | 48 || [4.0.0+] |
| + | |- |
| + | | 49 || [4.0.0+] |
| + | |- |
| + | | 50 || [4.0.0+] |
| + | |- |
| + | | 51 || [4.0.0+] |
| + | |- |
| + | | 52 || [4.0.0+] |
| + | |- |
| + | | 53 || [4.0.0+] |
| + | |- |
| + | | 54 || [4.0.0+] |
| + | |- |
| + | | 55 || [4.0.0+] |
| + | |- |
| + | | 56 || [4.0.0+] |
| + | |- |
| + | | 57 || [4.0.0+] |
| + | |- |
| + | | 58 || [4.0.0+] |
| + | |- |
| + | | 59 || [4.0.0+] |
| + | |- |
| + | | 60 || [4.0.0+] |
| + | |- |
| + | | 61 || [4.0.0+] |
| + | |- |
| + | | 62 || [4.0.0+] |
| + | |- |
| + | | 63 || [4.0.0+] |
| + | |- |
| + | | 64 || [4.0.0+] |
| + | |- |
| + | | 65 || [4.0.0+] |
| + | |- |
| + | | 66 || [4.0.0+] |
| + | |- |
| + | | 67 || [4.0.0+] |
| + | |- |
| + | | 68 || [4.0.0+] |
| + | |- |
| + | | 69 || [4.0.0+] |
| + | |- |
| + | | 70 || [4.0.0+] |
| + | |- |
| + | | 71 || [4.0.0+] |
| + | |- |
| + | | 72 || [4.0.0+] |
| + | |- |
| + | | 73 || [4.0.0+] |
| + | |- |
| + | | 74 || [4.0.0+] |
| + | |- |
| + | | 75 || [4.0.0+] |
| + | |- |
| + | | 76 || [4.0.0+] |
| + | |- |
| + | | 77 || [4.0.0+] |
| + | |- |
| + | | 78 || [4.0.0+] |
| + | |- |
| + | | 79 || [4.0.0+] |
| + | |- |
| + | | 80 || [4.0.0+] |
| + | |- |
| + | | 81 || [4.0.0+] |
| + | |- |
| + | | 82 || [4.0.0+] |
| + | |- |
| + | | 83 || [4.0.0+] |
| + | |- |
| + | | 84 || [5.0.0+] |
| + | |- |
| + | | 85 || [5.0.0+] |
| + | |- |
| + | | 86 || [5.0.0+] |
| + | |- |
| + | | 87 || [6.0.0+] |
| + | |- |
| + | | 88 || [6.0.0+] |
| + | |- |
| + | | 89 || [6.0.0+] |
| + | |- |
| + | | 90 || [6.0.0+] |
| + | |- |
| + | | 91 || [6.0.0+] |
| + | |- |
| + | | 92 || [6.0.0+] |
| + | |- |
| + | | 93 || [6.0.0+] |
| + | |- |
| + | | 94 || [6.0.0+] |
| + | |- |
| + | | 95 || [6.0.0+] |
| + | |- |
| + | | 96 || [6.0.0+] |
| + | |- |
| + | | 97 || [6.0.0+] |
| + | |- |
| + | | 98 || [6.0.0+] |
| + | |- |
| + | | 99 || [7.0.0+] |
| + | |} |
| | | |
− | =ntc=
| + | [3.0.0+] GetSystemUpdateTaskInfo now returns an additional 0x10-bytes of output. GetNetworkInstallTaskInfo now returns an additional 0x18-bytes of output. GetApplyDeltaTaskInfo now returns an additional 0x10-bytes of output. |
| | | |
− | Presumably Network Time Sync?
| + | [5.0.0+] GetSystemUpdateTaskInfo now returns an additional 8-bytes of output. RequestGameCardRegistrationStatus/RequestRegisterGameCard removed 8-bytes of input, and now takes an additional type-0x5 input buffer. |
| | | |
− | =Network=
| + | [8.0.0+] Cmd76 now takes an additional 0x8-bytes of input. |
− | * <nowiki>https://sun.hac.%%.d4c.nintendo.net/v1/system_update_meta?device_id=%016llx</nowiki>
| |
− | * <nowiki>https://aqua.hac.%%.d4c.nintendo.net/required_system_update_meta?device_id=%016llx</nowiki>
| |
− | * <nowiki>https://%s.hac.%%.d4c.nintendo.net/t/%c/%016llx/%u?device_id=%016llx</nowiki> Returns content like the below URL. This is the content for [[NCA]]-type0. See below for %c. %016llx is titleID, %u is title-version.
| |
− | * <nowiki>https://%s.hac.%%.d4c.nintendo.net/c/%c/%s</nowiki> Used for downloading content. First %s is atumn or atum. %c is one of: 'c', 'a', or 's'. %s is just the hex-string NcaId. The server also returns two HTTP headers: "X-Nintendo-Content-Hash: {entire lowercase hex-string of the content SHA256 hash}" and "X-Nintendo-Content-ID: {lowercase hex-string for NcaId}"
| |
− | * <nowiki>https://superfly.hac.%%.d4c.nintendo.net/v1/t/%016llx/dv</nowiki> %016llx is titleID, only for eShop titles it appears. Returns .json title-info.
| |
− | * <nowiki>https://superfly.hac.%%.d4c.nintendo.net/v1/a/%016llx/dv</nowiki> %016llx is titleID, only for eShop titles it appears. Output is similar to above URL.
| |
− | * <nowiki>https://aauth-%.ndas.srv.nintendo.net/v1/time</nowiki>
| |
− | * ...
| |
− | * <nowiki>"https://dauth-%.ndas.srv.nintendo.net/v1/device_auth_token"</nowiki> CURLOPT_POSTFIELDS is set to the output from: snprintf(..., "system_version=%08x&client_id=%s", <output parsed from a func>, "<hard-coded hex string>");
| |
| | | |
− | These are not accessible without the required TLS client cert+privk, minus the time URL which can be accessed without any client cert+privk at all.
| + | == DestroySystemUpdateTask == |
| + | Takes an input [[#SystemUpdateTask]], no output. |
| | | |
− | The returned content data from CDN, for both system-titles and eShop-titles, is identical to the data readable by [[Content_Manager_services#ReadEntryRaw]].
| + | == ListSystemUpdateTask == |
| + | Takes a type-0x6 output buffer, for an array of [[#SystemUpdateTask]]. Returns an u32 for total output entries. |
| | | |
− | While atumn seems to be for system-titles, and atum for eShop titles, the latter titles are accessible fine with atumn(with "/t/" for NCA-type0 at least).
| + | == GetSystemUpdateTaskInfo == |
| + | Takes an input [[#SystemUpdateTask]], returns an output [[#SystemUpdateTaskInfo]]. |
| | | |
− | 'a' is used when an input u8 is not 0x3, otherwise 's' is used. This is [[Content_Manager_services#Title_Types|title-type]]? A seperate function using the ".../c/" URL is hard-coded to use 'c'. This appears to match 's' usage attempts: the only URL that returned actual data with 's' was with titleID 0100000000000816.
| + | == CommitSystemUpdateTask == |
| + | Takes an input [[#SystemUpdateTask]], no output. |
| | | |
− | As of June 30, 2017, accessing old content via the atumn "/c/" and "/t/" URLs works fine.
| + | == GetDownloadedSystemDataPath == |
| + | Takes an input u64 titleID, a [[#SystemUpdateTask]], and an type-0x16 output buffer containing the [[Filesystem_services|ContentPath]]. |
| | | |
− | Going by strings in NIM, it appears SOAP isn't used anymore. ecs appears to use REST API?
| + | Gets the FS ContentPath for the specified task and title. |
| | | |
− | == User-Agent == | + | == IsExFatDriverIncluded == |
− | NIM generates two User-Agent strings:
| + | Takes an input [[#SystemUpdateTask]], returns an output u8 bool flag. |
− | snprintf(..., "User-Agent: NintendoSDK Firmware/%s-%u (platform:%s; did:%016llx; eid:%s)", <string at [[System_Version_Title|sysver]]+0x68>, {u32 from [[System_Version_Title|sysver]]+4}, "NX", DeviceId, {[[NSD_services|NSD]] cmd11 output});
| |
− | snprintf(..., "User-Agent: NintendoSDK Firmware/%s-%u (platform:%s; eid:%s)", <string at [[System_Version_Title|sysver]]+0x68>, {u32 from [[System_Version_Title|sysver]]+4}, "NX", DeviceId, {[[NSD_services|NSD]] cmd11 output});
| |
| | | |
− | Where the 64bit DeviceId is parsed from the 0x10-bytes at outbuf+0xC6 from [[Settings_services|set:cal]] GetDeviceCert(DeviceCert_certname+2, aka where the hex string for the DeviceId is).
| + | == SystemUpdateTask == |
| + | This is a 0x10-byte struct. |
| | | |
− | == sun == | + | == SystemUpdateTaskInfo == |
− | NIM sends a HTTP GET with the sun URL listed above to get the title-listing of the latest system-titles, as .json. The deviceid in the URL is the same one in the above User-Agent section. HTTP header "Accept:application/json" is sent in the request.
| + | This is a 0x28-byte struct. |
| | | |
− | The response is json with a "system_update_metas" block, containing "title_id" and "title_version" entries. The actual server response only contains 1 title.
| + | = nim:shp = |
| + | This is "nn::nim::detail::IShopServiceManager". |
| | | |
− | Example, from 2.0 system:
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || RequestDeviceAuthenticationToken |
| + | |- |
| + | | 1 || [3.0.0+] RequestCachedDeviceAuthenticationToken |
| + | |- |
| + | | 100 || RequestRegisterDeviceAccount |
| + | |- |
| + | | 101 || RequestUnregisterDeviceAccount |
| + | |- |
| + | | 102 || RequestDeviceAccountStatus |
| + | |- |
| + | | 103 || GetDeviceAccountInfo |
| + | |- |
| + | | 104 || RequestDeviceRegistrationInfo |
| + | |- |
| + | | 105 || RequestTransferDeviceAccount |
| + | |- |
| + | | 106 || [3.0.0+] RequestSyncRegistration |
| + | |- |
| + | | 107 || [3.0.0+] IsOwnDeviceId |
| + | |- |
| + | | 200 || RequestRegisterNotificationToken |
| + | |- |
| + | | 300 || RequestUnlinkDevice |
| + | |- |
| + | | 301 || RequestUnlinkDeviceIntegrated |
| + | |- |
| + | | 302 || RequestLinkDevice |
| + | |- |
| + | | 303 || HasDeviceLink |
| + | |- |
| + | | 304 || [4.0.0+] RequestUnlinkDeviceAll |
| + | |- |
| + | | 305 || [4.0.0+] RequestCreateVirtualAccount |
| + | |- |
| + | | 306 || [4.0.0+] RequestDeviceLinkStatus |
| + | |- |
| + | | 400 || GetAccountByVirtualAccount |
| + | |- |
| + | | 401 || [6.0.0+] |
| + | |- |
| + | | 500 || RequestSyncTicket |
| + | |- |
| + | | 501 || RequestDownloadTicket |
| + | |- |
| + | | 502 || [4.0.0+] RequestDownloadTicketForPrepurchasedContents. [6.0.0+]: Now takes an additional 4-bytes of input. |
| + | |} |
| | | |
− | <code>{"timestamp":REDACTED-TIMESTSAMP,"system_update_metas":[{"title_id":"0100000000000816","title_version":201327002}]}</code>
| + | = nim:eca = |
| + | This is "nn::nim::detail::IShopServiceAccessServerInterface". |
| | | |
− | == aqua ==
| + | This was added with [5.0.0+]. |
− | The following response is json from accessing the above aqua URL:
| |
| | | |
− | <code>{ | + | {| class="wikitable" border="1" |
− | "contents_delivery_required_title_id": "0100000000000816", | + | |- |
− | "contents_delivery_required_title_version": 0 | + | ! Cmd || Name |
− | }</code> | + | |- |
| + | | 0 || CreateServerInterface |
| + | |- |
| + | | 1 || [6.0.0+] RefreshDebugAvailability |
| + | |- |
| + | | 2 || [6.0.0+] ClearDebugResponse |
| + | |- |
| + | | 3 || [6.0.0+] RegisterDebugResponse |
| + | |} |
| + | |
| + | == IShopServiceAccessServer == |
| + | This is "nn::nim::detail::IShopServiceAccessServer". |
| + | |
| + | This was added with [5.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || CreateAccessorInterface |
| + | |} |
| + | |
| + | === IShopServiceAccessor === |
| + | This is "nn::nim::detail::IShopServiceAccessor". |
| + | |
| + | This was added with [5.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || CreateAsyncInterface |
| + | |} |
| + | |
| + | ==== IShopServiceAsync ==== |
| + | This is "nn::nim::detail::IShopServiceAsync". |
| + | |
| + | This was added with [5.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || Cancel |
| + | |- |
| + | | 1 || GetSize |
| + | |- |
| + | | 2 || Read |
| + | |- |
| + | | 3 || GetErrorCode |
| + | |- |
| + | | 4 || Request |
| + | |- |
| + | | 5 || Prepare |
| + | |} |
| + | |
| + | = nim:ecas = |
| + | This is "nn::nim::detail::IShopServiceAccessSystemInterface". |
| + | |
| + | This was added with [7.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || RegisterSpecialClient |
| + | |- |
| + | | 1 || UnregisterSpecialClient |
| + | |} |
| + | |
| + | = ntc = |
| + | This is "nn::ntc::detail::service::IStaticService". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || OpenEnsureNetworkClockAvailabilityService |
| + | |- |
| + | | 100 || [3.0.0+] SuspendAutonomicTimeCorrection |
| + | |- |
| + | | 101 || [3.0.0+] ResumeAutonomicTimeCorrection |
| + | |} |
| + | |
| + | Network-time-sync uses the "<...>/time" HTTPS URL listed in the below Network section. This just returns an UTC Unix time string. |
| + | |
| + | == IEnsureNetworkClockAvailabilityService == |
| + | This is "nn::ntc::detail::service::IEnsureNetworkClockAvailabilityService". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || StartTask |
| + | |- |
| + | | 1 || GetFinishNotificationEvent |
| + | |- |
| + | | 2 || GetResult |
| + | |- |
| + | | 3 || Cancel |
| + | |- |
| + | | 4 || IsProcessing |
| + | |- |
| + | | 5 || [3.0.0+] GetServerTime |
| + | |} |
| + | |
| + | = IAsyncValue = |
| + | This is "nn::nim::detail::IAsyncValue". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || |
| + | |- |
| + | | 1 || |
| + | |- |
| + | | 2 || |
| + | |- |
| + | | 3 || [4.0.0+] |
| + | |} |
| + | |
| + | = IAsyncResult = |
| + | This is "nn::nim::detail::IAsyncResult". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || |
| + | |- |
| + | | 1 || |
| + | |- |
| + | | 2 || [4.0.0+] |
| + | |} |
| + | |
| + | = IAsyncProgressResult = |
| + | This is "nn::nim::detail::IAsyncProgressResult". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || |
| + | |- |
| + | | 1 || |
| + | |- |
| + | | 2 || |
| + | |- |
| + | | 3 || [4.0.0+] |
| + | |} |
| + | |
| + | = IAsyncData = |
| + | This is "nn::nim::detail::IAsyncData". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || |
| + | |- |
| + | | 1 || |
| + | |- |
| + | | 2 || |
| + | |- |
| + | | 3 || |
| + | |- |
| + | | 4 || |
| + | |- |
| + | | 5 || [4.0.0+] |
| + | |} |
| + | |
| + | [[Category:Services]] |