Network: Difference between revisions

 
(19 intermediate revisions by 5 users not shown)
Line 6: Line 6:
== CDN ==
== CDN ==
The URLs for content delivery network servers on the Switch usually follow this format:
The URLs for content delivery network servers on the Switch usually follow this format:
  {server_name}.hac.{environment}.{serverset}.nintendo.net
  {server_name}.hac.{environment}.{serverset}.{host}


Where:
Where:
Line 12: Line 12:
  {environment}: "dp1", "lp1", "sp1", "dd1", "jd1", "sd1", "td1" or "xd1".
  {environment}: "dp1", "lp1", "sp1", "dd1", "jd1", "sd1", "td1" or "xd1".
  {serverset}: "eshop" (online shop), "d4c" (content delivery) or "dragons" (online membership).
  {serverset}: "eshop" (online shop), "d4c" (content delivery) or "dragons" (online membership).
{host}: "nintendo.net" (global cdn), "n.nintendoswitch.cn" (chinese cdn).


=== Servers ===
=== Servers ===
Line 27: Line 28:
* [6.0.0+] "dragons.hac.%.dragons.nintendo.net"
* [6.0.0+] "dragons.hac.%.dragons.nintendo.net"
* [6.0.0+] "dragonst.hac.%.dragons.nintendo.net"
* [6.0.0+] "dragonst.hac.%.dragons.nintendo.net"
* [6.0.0+] "tigers.hac.%.dragons.nintendo.net"
* [6.0.0+] "[[#tigers|tigers.hac.%.dragons.nintendo.net]]"
* [14.0.0+] "[[#veer|veer.hac.%%.d4c.nintendo.net]]"


==== sun ====
==== sun ====
Line 59: Line 61:
CDN for system-titles.
CDN for system-titles.


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).
"atumn" is for system-titles and "atum" is for eShop titles.


'a' is used when an input u8 is not 0x3, otherwise 's' is used. 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.
'a' is used when an input u8 is not 0x3, otherwise 's' is used. 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.
Line 97: Line 99:
  [5.0.0+] "<nowiki>https://pearljam.hac.%.eshop.nintendo.net/sugar</nowiki>"
  [5.0.0+] "<nowiki>https://pearljam.hac.%.eshop.nintendo.net/sugar</nowiki>"
  [5.0.0+] "<nowiki>https://pearljam.hac.%.eshop.nintendo.net/civil</nowiki>"
  [5.0.0+] "<nowiki>https://pearljam.hac.%.eshop.nintendo.net/civil</nowiki>"
==== tigers ====
Used for fetching common tickets for title updates.
==== veer ====
URLs:
"<nowiki>https://veer.hac.%%.d4c.nintendo.net/v3/policy.json?context=%s</nowiki>"


== Shop API ==
== Shop API ==
Line 106: Line 115:


==== ecs ====
==== ecs ====
These URL strings were removed from nim with [15.0.0+].
URLs:
URLs:
  "<nowiki>https://ecs-%.hac.shop.nintendo.net/ecs/services/rest/AccountGetETickets</nowiki>"
  "<nowiki>https://ecs-%.hac.shop.nintendo.net/ecs/services/rest/AccountGetETickets</nowiki>"
Line 111: Line 122:


==== ias ====
==== ias ====
These URL strings were removed from nim with [15.0.0+].
URLs:
URLs:
  "<nowiki>https://ias-%.hac.shop.nintendo.net/ias/services/rest/Register</nowiki>"
  "<nowiki>https://ias-%.hac.shop.nintendo.net/ias/services/rest/Register</nowiki>"
Line 140: Line 153:
* "broker.%.npns.srv.nintendo.net"
* "broker.%.npns.srv.nintendo.net"
* "consumer.%.npns.srv.nintendo.net"
* "consumer.%.npns.srv.nintendo.net"
* "receive-%.dg.srv.nintendo.net"
* "[[BCAT_services#Data_reporting|receive-%.dg.srv.nintendo.net]]"
* "receive-%.er.srv.nintendo.net"
* "[[Error_Upload_services|receive-%.er.srv.nintendo.net]]"
* "nncs1-%.n.n.srv.nintendo.net"
* "nncs1-%.n.n.srv.nintendo.net"
* "nncs2-%.n.n.srv.nintendo.net"
* "nncs2-%.n.n.srv.nintendo.net"
Line 149: Line 162:
* [9.0.0+] "[[#storage|storage.%.sata.srv.nintendo.net]]"
* [9.0.0+] "[[#storage|storage.%.sata.srv.nintendo.net]]"
* [9.0.0+] "[[#permission|permission.%.sata.srv.nintendo.net]]"
* [9.0.0+] "[[#permission|permission.%.sata.srv.nintendo.net]]"
* [20.0.0+] "pegasus.hac.%.pegasus.srv.nintendo.net"
* [20.0.0+] "transfer.hac.%.banco.srv.nintendo.net"


==== aauth ====
==== aauth ====
Line 186: Line 201:
==== migration ====
==== migration ====
[[Migration_services|Migration]] service storage.
[[Migration_services|Migration]] service storage.
[20.0.0+] The below save_data_migrations URLs were moved elsewhere under [[#transfer|transfer]].
URLs:
  <nowiki>https://migration.%.scsi.srv.nintendo.net/api/nx/v1/account_migrations/gen_key
  https://migration.%.scsi.srv.nintendo.net/api/nx/v1/account_migrations/get_key
  https://migration.%.scsi.srv.nintendo.net/api/nx/v1/save_data_migrations/gen_key
  https://migration.%.scsi.srv.nintendo.net/api/nx/v1/save_data_migrations/get_key</nowiki>


==== storage ====
==== storage ====
Line 192: Line 215:
==== permission ====
==== permission ====
[[OLSC_services|OLSC]] repair service survey request.
[[OLSC_services|OLSC]] repair service survey request.
  <nowiki>https://permission.%.sata.srv.nintendo.net/api/nx/v1/customer_operations</nowiki>
  <nowiki>https://permission.%.sata.srv.nintendo.net/api/nx/v1/customer_operations?survey_request_id=%llu</nowiki>
 
  Request headers:
  > User-Agent: libcurl (nnHttp; 789f928b-138e-4b2f-afeb-1acae821d897; SDK {x.x.x.x sdkver}; Add-on {x.x.x.x sdkver})
  > Accept: */*
  > X-Device-Token: {device-token from dauth for SATA}
  > Content-Type: application/json
 
  Response (without survey_request_id): {"survey_requests":[]}
==== transfer ====
Used by [[Migration_services|Migration]] starting with [20.0.0+].
The URL is "%s%s", where the first "%s" is <nowiki>"https://transfer.hac.%.banco.srv.nintendo.net/api/console/v1/transfer_events"</nowiki>, and the second "%s" is one of the following:
  /start
  /%lld/%s (where %s is one of the following as selected by an input param: "finish_transfer", "finish_upload", "finish_download", "abort_transfer", "abort_upload")
  /%lld
  /%lld/rollback
  /%lld/register_destination
  ?type=%d
  "/%lld/save_datas/%lld/generate_key_seed_package" / "/%lld/generate_key_seed_package", depending on an input param (the former is only used by [[Migration_services|IDownloader]] cmd400)
  /%lld/save_datas/start_upload
  /%lld/save_datas/%lld/finish_upload
  /%lld/save_datas/%lld
  /%lld/save_datas/%lld/component_files/start_upload
  /%lld/save_datas/%lld/component_files/%lld/finish_upload
  /%lld/save_datas/%lld/component_files
  /%lld/save_datas
  /%lld/save_datas/%lld/start_download
  /%lld/save_datas/%lld/finish_download
  /%lld/save_datas/%lld/component_files
  /%lld/album_data_archives/start_upload
  /%lld/album_data_archives/%lld/finish_upload
  /%lld/album_data_archives/%lld
  /%lld/album_data_archives/%lld/start_download
  /%lld/album_data_archives/%lld
  /%lld/album_data_archives/%lld/finish_download
  /%lld/album_data_archives
These use the following request headers:
  User-Agent: libcurl (nnHttp; {...})
  Accept: */*
  Content-Type: application/json
  Authorization: Bearer {token}
  {Content-Length as needed}
The above token is from using [[Account_services|IManagerForSystemService EnsureIdTokenCacheAsync]], with the output from [[Account_services|IManagerForSystemService LoadIdTokenCache]] being used as the token.
* "/start":
** The json POST data contains the following:
*** <code>{"type":<type>,"scope":<scope>,"src_device_appearance_main":"<str0>","src_device_appearance_controller":"<str1>"}</code>
*** <type> is 0 for local (nn::migration::device::IServer and nn::migration::savedata::IServer), 1 for Uploader (nn::migration::device::IUploader).
*** <scope> is 0 for device (nn::migration::device::IServer and nn::migration::device::IUploader), 1 for savedata (nn::migration::savedata::IServer).
*** <str0> is the output from [[NS_services|ns]] IApplicationManagerInterface cmd4063, <str1> is from cmd4064.
** The json response is parsed as the following (HTTP status must be 201):
*** <code>{"transfer_event":{"transfer_event_id":<unknown>,"status":<status_str>,"error":<str>,"src_device_serial":<str>,"src_device_appearance_main":<str>,"dst_device_serial":<str>,"src_device_type":<unknown>,"created_at":<timestamp>,"expires_at":<timestamp>}}</code>
*** The minimum required fields are status and created_at. <status_str> must match one of various strings, such as "started".


== Others ==
== Others ==
Line 203: Line 286:
* "c-%.accounts.nintendo.com"
* "c-%.accounts.nintendo.com"
* "capi.%.op2.nintendo.net"
* "capi.%.op2.nintendo.net"
[[NIM_services|nim]]:
* "bvc-hac-%.cdn.nintendo.net"


News, friends and game content:
News, friends and game content:
* "bcat-topics-%.cdn.nintendo.net"
* "bcat-topics-%.cdn.nintendo.net"
* "bcat-list-%.cdn.nintendo.net"
* "bcat-list-%.cdn.nintendo.net"
* "bcat-data-%.cdn.nintendo.net"
* "bcat-web-%.cdn.nintendo.net"
* "app.%.five.nintendo.net"
* "app.%.five.nintendo.net"
* [6.0.0+] "scsi-policy-%.cdn.nintendo.net"
* [6.0.0+] "scsi-policy-%.cdn.nintendo.net"
NSO webapplet [11.0.0+]:
* "%.nso.nintendo.net"
* "atum-img-%.cdn.nintendo.net"


Connection:
Connection:
Line 218: Line 310:
* "problems.dragons.nintendo.net"
* "problems.dragons.nintendo.net"
* "moon.nintendo.com"
* "moon.nintendo.com"
==== bvc ====
Used by nim [[NIM_services#RequestCheckSafeSystemVersion|RequestCheckSafeSystemVersion]].
URLs:
  <nowiki>"https://bvc-hac-%.cdn.nintendo.net/%d-%d-%d"</nowiki>
The data for each "%d" is the first 3-bytes from the [[System_Version_Title|SystemVersion]].
==== scsi-policy ====
Used by [[OLSC_services|OLSC]] and [[Migration_services|migration]].
[20.0.0+] This is no longer used by [[Migration_services|migration]].
Migration URL:
  <nowiki>"https://scsi-policy-%.cdn.nintendo.net/api/nx/v1/save_data_migration_policy/%016llx/%05u?dtoken="</nowiki>
* save_data_migration_policy: "%016llx" is the [[NCM_services#ApplicationId|ApplicationId]], "%05u" is version>>16 from [[NS_services#IApplicationVersionInterface|ns GetLaunchRequiredVersion]]. The value of dtoken is the dauth edge token for scsi. The request headers are: "User-Agent: libcurl (nnHttp;..." and "Accept: */*".
** The response json is <code>{"save_data_migration": <str>}</code>, where <code><str></code> is "OK" or "NG" (other values trigger error).


==== service-status ====
==== service-status ====