Line 7:
Line 7:
== Description ==
== Description ==
−
The NZone browser interface is similar to the regular [[Internet Browser]], the browser engine used here is completely different however. The NZone beacon encryption is same as before, except some unknown fields in the cleartext was changed where 3DS will only "detect" NZone /w NZone icon blinking/enabled when the beacons' fields are set this way. DSi will not detect these beacons. 3DS can use DS(i) NZone, but only if the NZone title is already enabled. With DS(i) beacons, 3DS connects to Internet but the NZone icon will not blink. However the NZone title will still work once launched. Different URL params are sent to the to the server than DSi, sending the wrong params via curl results in old content being retrieved.
+
The NZone browser interface is similar to the regular [[Internet Browser]], the browser engine used here is completely different however. Unlike the regular [[Internet Browser]] which uses the socket/SSL services directly, the Nintendo Zone application uses the [[HTTP_Services|HTTP]] service instead.
+
3D stereoscopic videos are supported via html "<media>" tags, for 3D videos the "mediatype" attribute is set to "3D". For 2D videos videos the "mediatype" attribute is set to "2D". This uses Mobiclip with file extension .moflex, the magic number from the first word in the video file is 0xabaa324c(little-endian).
The 3DS NZone application immediately uses [[NIMS:CheckSysupdateAvailableSOAP]] once connected to the NZone AP, if an update is available and the user selects "Cancel" in the displayed dialog, the application will stop using the wifi AP.
The 3DS NZone application immediately uses [[NIMS:CheckSysupdateAvailableSOAP]] once connected to the NZone AP, if an update is available and the user selects "Cancel" in the displayed dialog, the application will stop using the wifi AP.
+
+
The user-agent used by the Nintendo Zone application is "NintendoZoneViewer/3.1". The URL parameters sent to the dsdl.* HTTPS server are the same as DSi(besides the value of the console-type parameter and the "ver" parameter value), except 3DS also sends additional headers in the request using the same data sent in the URL parameters. The zonebnr server requires three more request headers(extra URL parameters are not needed here), the first of these three headers is "ZoneUserID" where the unknown value is 16 hex-digits(8-bytes in binary). The last two headers of these additional three headers contain data which was originally sent with the dsdl server URL parameters.
+
+
The NZone beacon encryption is same as before, except some unknown fields in the cleartext was changed where 3DS will only "detect" NZone /w NZone icon blinking/enabled when the beacons' fields are set this way. DSi will not detect these beacons. 3DS can use DS(i) NZone, but only if the NZone title is already enabled. With DS(i) beacons, 3DS connects to Internet but the NZone icon will not blink. However the NZone title will still work once launched.
=== Beacon payload format ===
=== Beacon payload format ===
Line 22:
Line 27:
| 0x00
| 0x00
| 32
| 32
−
| AP SSID.
+
| AP SSID
|-
|-
| 0x20
| 0x20
| 10
| 10
−
| ApNum, required for connecting to the server. This is used by the server to determine which retailer NZone you're using. Apnum structure: RSSCCTTLLL. R is the decimal region, SS is the decimal ServiceID. CC is the two-letter country-code, TT is the 2-letter country state/province code, and LLL is the decimal locationID. Regions: 0) JPN 1) USA 2/3) EUR 4) KOR 5) CHN. LLL is always zero for non-JPN deployments, however in JPN this is unique per NZone hotspot location.(TT is only used in JPN, elsewhere it's always zero)
+
| ApNum, required for connecting to the server. This is used by the server to determine which retailer NZone you're using. Apnum structure: 10 digits or RSSCCTTLLL. R is the decimal region, SS is the decimal ServiceID. CC is the two-letter country-code, TT is the 2-letter country state/province code, and LLL is the decimal locationID. Regions: 0) JPN 1) USA 2/3) EUR 4) KOR 5) CHN. LLL is always zero for non-JPN deployments, however in JPN this is unique per NZone hotspot location.
|-
|-
| 0x2a
| 0x2a
Line 34:
Line 39:
| 0x2c
| 0x2c
| 24
| 24
−
| Some UTF-16 ServiceName. "BestBuy"
+
| Some ServiceName, either in UTF-16 or ASCII
|-
|-
| 0x44
| 0x44
| 32
| 32
−
| AP crypto key, if any.
+
| AP crypto key, if any
|-
|-
| 0x64
| 0x64
| 1
| 1
−
| Unknown, not used by the DS(i) client. For 3DS this is 0x1, for DS(i) this is 0x0.
+
| Unknown, not used by the DS(i) client. For 3DS this value varies, for DS(i) this is 0x0.
|-
|-
| 0x65
| 0x65
| 1
| 1
−
| AP crypto key type: 0) Open 1) WEP-64 2) WEP-128 3) WEP-152 7) WPA2-PSK(the encryption key field contains the AP passphrase)
+
| AP crypto key type: 0) Open 1) WEP-64 2) WEP-128 3) WEP-152 4) WPA-PSK (TKIP) 5) WPA2-PSK (TKIP) 6) WPA-PSK (AES) 7) WPA2-PSK (AES) (the encryption key field contains the AP passphrase)
|-
|-
| 0x66
| 0x66
| 1
| 1
−
| Unknown flags, for 3DS this is 0x1e, for DS(i) this is 0x3. Bits 0 and 1 don't seem to be used by the client. The DS(i) client uses bit2 unknown what for though.
+
| Bit 0: Enables Nintendo Zone content on DS(i)<br>Bit 1: Enables friend list and online gaming<br>Bit 4: Enables Nintendo Zone Viewer on 3DS<br>Bit 7: Blocks the Nintendo eShop<br>Bits 2, 3, 5, 6: Unknown
|-
|-
| 0x67
| 0x67
−
| 5
+
| 1
−
| Padding.
+
| Bit 0: Blocks the internet browser<br>Bits 1 to 7: Unknown
+
|-
+
| 0x68
+
| 4
+
| Padding
|-
|-
| 0x6c
| 0x6c
| 2
| 2
−
| Unknown, with 3DS this is zero but for DS(i) this was 0x428.
+
| Unknown, seems to be always 0x428
|-
|-
| 0x6e
| 0x6e
| 2
| 2
−
| CRC16 over the whole payload excluding CRC offset, initval is 0.
+
| CRC16 over the whole payload excluding CRC offset, initval is 0
|}
|}
Line 265:
Line 274:
| Bestbuy || WPA2-PSK || USA || Bestbuy || || After v1024
| Bestbuy || WPA2-PSK || USA || Bestbuy || || After v1024
|}
|}
+
+
See also [http://yls8.mtheall.com/ninupdates/3ds_nzonehotspots.php this].
==== NZone hotspots only accessible via NZone beacons ====
==== NZone hotspots only accessible via NZone beacons ====