This commit is contained in:
Bottersnike 2023-03-27 23:38:37 +01:00
parent e24490ec7e
commit ccc70a3df1
No known key found for this signature in database
5 changed files with 297 additions and 197 deletions

3
requirements.txt Normal file
View File

@ -0,0 +1,3 @@
flask
Frozen-Flask
jinja_markdown

View File

@ -2,7 +2,6 @@
{% block title %}Card IDs{% endblock %}
{% block body %}
<h1>Card ID generation</h1>
test2
<details>
<summary>I'm just here for code.</summary>
<p>Fair. My intent with these pages is to describe things in enough detail that they should be simple to

View File

@ -1,197 +1,3 @@
{% extends "sega.html" %}
{% block title %}ALL.Net{% endblock %}
{% block body %}
<h1>ALL.Net</h1>
<p>A simple service that exposes two URLs. The hostname must be <code>http://naominet.jp</code>.</p>
<p>Requests should be made with a number of standard HTTP headers, and must be either HTTP version 1.0 or 1.1</p>
<table>
<tr>
<td><code>Connection</code></td>
<td><code>Close</code></td>
</tr>
<tr>
<td><code>Pragma</code></td>
<td><code>DFI</code></td>
</tr>
<tr>
<td><code>User-Agent</code></td>
<td><code>ALL.Net_PC_Win2/ver1.0</code></td>
</tr>
<tr>
<td><code>Content-Type</code></td>
<td><code>application/x-www-form-urlencoded</code></td>
</tr>
<tr>
<td><code>Content-Length</code></td>
<td><i>variable</i></td>
</tr>
</table>
<p>Note that the <code>Pragma</code> header is optional, and the <code>Content-Type</code> header is a lie.</p>
<p>Requests and responses should be <code>POST</code>s, and their body should be base64 encoded, zlib compressed,
<code>x-www-form-urlencoded</code> data. For example, <code>{key: "value", other: "another"}</code> should encode to
<code>eJwdxcEJACAMA8Bt3CLD5BEQFIXSFtw+4OuWHpq7NG5OBXi+BmwzCRo=</code>.
</p>
<p>Responses are expected to contain <code>stat</code> indicating status:</p>
<table>
<tr>
<td><code>1</code></td>
<td>Success</td>
</tr>
<tr>
<td><code>0</code></td>
<td>Failure</td>
</tr>
<tr>
<td><code>-1</code></td>
<td>Failure</td>
</tr>
<tr>
<td><code>-2</code></td>
<td>Failure</td>
</tr>
<tr>
<td><code>-3</code></td>
<td>Failure</td>
</tr>
</table>
<p>This service provides two endpoints, documented below:</p>
<h3><code>/sys/servlet/PowerOn</code></h3>
<h4>Request:</h4>
<!--
"game_id=%s&ver=%s&serial=%s&ip=%s&firm_ver=%01d%02d%02d&boot_ver=%02X%02X&encode=%s&format_ver=%s&hops=%d\r\n"
"game_id=%s&ver=%s&serial=%s&ip=%s&firm_ver=%01d%02d%02d&boot_ver=%02X%02X&format_ver=%s&hops=%d\r\n"
"game_id=%s&ver=%s&serial=%s\r\n"
"game_id=%s&ver=%s&serial=%s&encode=%s\r\n"
"keychipid=%s&functype=%u&gameid=%s&gamever=%s&boardid=%s&tenpoip=%s&libalibver=%s&datamax=%s&billingtype=%d&protocolver=%s&operatingfix=%d"
(libalibver = 1.110, protocolver = 1.000)
SDBT: Chunithm
SBXL: Maimai -->
<table>
<tr>
<td><code>game_id</code></td>
<td>4-character game ID</td>
</tr>
<tr>
<td><code>ver</code></td>
<td></td>
</tr>
<tr>
<td><code>serial</code></td>
<td></td>
</tr>
<tr>
<td><code>ip</code></td>
<td></td>
</tr>
<tr>
<td><code>firm_ver</code></td>
<td><code>%01d%02d%02d</code></td>
</tr>
<tr>
<td><code>boot_ver</code></td>
<td><code>%02X%02X</code></td>
</tr>
<tr>
<td><code>format_ver</code></td>
<td></td>
</tr>
<tr>
<td><code>hops</code></td>
<td></td>
</tr>
<tr>
<td><code>encode</code></td>
<td></td>
</tr>
</table>
<h4>Response:</h4>
<table>
<tr>
<td><code>stat</code></td>
<td>See above</td>
</tr>
<tr>
<td><code>uri</code></td>
<td></td>
</tr>
<tr>
<td><code>host</code></td>
<td></td>
</tr>
<tr>
<td><code>region0</code></td>
<td></td>
</tr>
<tr>
<td><code>region_name0</code></td>
<td></td>
</tr>
<tr>
<td><code>region_name1</code></td>
<td></td>
</tr>
<tr>
<td><code>region_name2</code></td>
<td></td>
</tr>
<tr>
<td><code>region_name3</code></td>
<td></td>
</tr>
<tr>
<td><code>year</code></td>
<td></td>
</tr>
<tr>
<td><code>month</code></td>
<td></td>
</tr>
<tr>
<td><code>day</code></td>
<td></td>
</tr>
<tr>
<td><code>hour</code></td>
<td></td>
</tr>
<tr>
<td><code>minute</code></td>
<td></td>
</tr>
<tr>
<td><code>second</code></td>
<td></td>
</tr>
<tr>
<td><code>place_id</code></td>
<td></td>
</tr>
<tr>
<td><code>setting</code></td>
<td></td>
</tr>
<tr>
<td><code>country</code></td>
<td></td>
</tr>
<tr>
<td><code>timezone</code></td>
<td></td>
</tr>
<tr>
<td><code>res_class</code></td>
<td></td>
</tr>
</table>
<h3><code>/sys/servlet/DownloadOrder</code></h3>
{% extends "sega.html" %} {% block title %}ALL.Net{% endblock %} {% block body %}
{% markdown %}{% include relative("~allnet.md") %}{% endmarkdown %}
{% endblock %}

View File

@ -0,0 +1,197 @@
{% extends "sega.html" %}
{% block title %}ALL.Net{% endblock %}
{% block body %}
<h1>ALL.Net</h1>
<p>A simple service that exposes two URLs. The hostname must be <code>http://naominet.jp</code>.</p>
<p>Requests should be made with a number of standard HTTP headers, and must be either HTTP version 1.0 or 1.1</p>
<table>
<tr>
<td><code>Connection</code></td>
<td><code>Close</code></td>
</tr>
<tr>
<td><code>Pragma</code></td>
<td><code>DFI</code></td>
</tr>
<tr>
<td><code>User-Agent</code></td>
<td><code>ALL.Net_PC_Win2/ver1.0</code></td>
</tr>
<tr>
<td><code>Content-Type</code></td>
<td><code>application/x-www-form-urlencoded</code></td>
</tr>
<tr>
<td><code>Content-Length</code></td>
<td><i>variable</i></td>
</tr>
</table>
<p>Note that the <code>Pragma</code> header is optional, and the <code>Content-Type</code> header is a lie.</p>
<p>Requests and responses should be <code>POST</code>s, and their body should be base64 encoded, zlib compressed,
<code>x-www-form-urlencoded</code> data. For example, <code>{key: "value", other: "another"}</code> should encode to
<code>eJwdxcEJACAMA8Bt3CLD5BEQFIXSFtw+4OuWHpq7NG5OBXi+BmwzCRo=</code>.
</p>
<p>Responses are expected to contain <code>stat</code> indicating status:</p>
<table>
<tr>
<td><code>1</code></td>
<td>Success</td>
</tr>
<tr>
<td><code>0</code></td>
<td>Failure</td>
</tr>
<tr>
<td><code>-1</code></td>
<td>Failure</td>
</tr>
<tr>
<td><code>-2</code></td>
<td>Failure</td>
</tr>
<tr>
<td><code>-3</code></td>
<td>Failure</td>
</tr>
</table>
<p>This service provides two endpoints, documented below:</p>
<h3><code>/sys/servlet/PowerOn</code></h3>
<h4>Request:</h4>
<!--
"game_id=%s&ver=%s&serial=%s&ip=%s&firm_ver=%01d%02d%02d&boot_ver=%02X%02X&encode=%s&format_ver=%s&hops=%d\r\n"
"game_id=%s&ver=%s&serial=%s&ip=%s&firm_ver=%01d%02d%02d&boot_ver=%02X%02X&format_ver=%s&hops=%d\r\n"
"game_id=%s&ver=%s&serial=%s\r\n"
"game_id=%s&ver=%s&serial=%s&encode=%s\r\n"
"keychipid=%s&functype=%u&gameid=%s&gamever=%s&boardid=%s&tenpoip=%s&libalibver=%s&datamax=%s&billingtype=%d&protocolver=%s&operatingfix=%d"
(libalibver = 1.110, protocolver = 1.000)
SDBT: Chunithm
SBXL: Maimai -->
<table>
<tr>
<td><code>game_id</code></td>
<td>4-character game ID</td>
</tr>
<tr>
<td><code>ver</code></td>
<td></td>
</tr>
<tr>
<td><code>serial</code></td>
<td></td>
</tr>
<tr>
<td><code>ip</code></td>
<td></td>
</tr>
<tr>
<td><code>firm_ver</code></td>
<td><code>%01d%02d%02d</code></td>
</tr>
<tr>
<td><code>boot_ver</code></td>
<td><code>%02X%02X</code></td>
</tr>
<tr>
<td><code>format_ver</code></td>
<td></td>
</tr>
<tr>
<td><code>hops</code></td>
<td></td>
</tr>
<tr>
<td><code>encode</code></td>
<td></td>
</tr>
</table>
<h4>Response:</h4>
<table>
<tr>
<td><code>stat</code></td>
<td>See above</td>
</tr>
<tr>
<td><code>uri</code></td>
<td></td>
</tr>
<tr>
<td><code>host</code></td>
<td></td>
</tr>
<tr>
<td><code>region0</code></td>
<td></td>
</tr>
<tr>
<td><code>region_name0</code></td>
<td></td>
</tr>
<tr>
<td><code>region_name1</code></td>
<td></td>
</tr>
<tr>
<td><code>region_name2</code></td>
<td></td>
</tr>
<tr>
<td><code>region_name3</code></td>
<td></td>
</tr>
<tr>
<td><code>year</code></td>
<td></td>
</tr>
<tr>
<td><code>month</code></td>
<td></td>
</tr>
<tr>
<td><code>day</code></td>
<td></td>
</tr>
<tr>
<td><code>hour</code></td>
<td></td>
</tr>
<tr>
<td><code>minute</code></td>
<td></td>
</tr>
<tr>
<td><code>second</code></td>
<td></td>
</tr>
<tr>
<td><code>place_id</code></td>
<td></td>
</tr>
<tr>
<td><code>setting</code></td>
<td></td>
</tr>
<tr>
<td><code>country</code></td>
<td></td>
</tr>
<tr>
<td><code>timezone</code></td>
<td></td>
</tr>
<tr>
<td><code>res_class</code></td>
<td></td>
</tr>
</table>
<h3><code>/sys/servlet/DownloadOrder</code></h3>
{% endblock %}

View File

@ -0,0 +1,95 @@
# ALL.Net
ALL.Net, short for Amusement Linkage Live Network, is SEGA's standadised arcade game networking service. It handles cabinet authentication, billing, network-based game delivery, user management, and handoff to the game-specific title server where applicable.
The ALL.Net model is compresed of four networked services:
1. ALL.Net itself. This is `naominet.jp`, and handles basic operations.
2. The billing service. This is `ib.naominet.jp`, and handles tracking and updating play counters.
3. AiMeDB. This is `aime.naominet.jp`, and handles user management.
4. The title server. The URL for this is provided by ALL.Net, as different games use different services for this.
ALL.Net also handles core networking infrastructure. This is in the form of of a number of routers, some of which are VPN-connected.
Stores are provided a store (tenpo, 店舗) router which they install. The specific router provided to the store depends on the nature of their internet connection. The models typically provisioned are:
| Line type | Model |
| --------- | -------------- |
| ISDN | YAMAHA RTA52i |
| | YAMAHA RTA54i |
| | YAMAHA RT57i |
| | YAMAHA RT58i |
| ^ | YAMAHA NVR500 |
| Mobile | R240B |
| ^ | YAMAHA RTX1200 |
| Broadband | YAMAHA RTX1000 |
| | YAMAHA RTX1100 |
| ^ | YAMAHA RTX1200 |
| ADSL | YAMAHA RTX1000 |
| | YAMAHA RTX1100 |
| ^ | YAMAHA RTX1200 |
| Misc | Cisco 851 K9 |
| ^ | Cisco 861 K9 |
This router will take the IP address `x.y.z.254`, which will be available at `tenporouter.loc` (handled by DNS spoofing on the router). Machines are assigned their IP addresses using DHCP, taking addresses from `x.y.z.10` through `x.y.z.200`, inclusive. Additionally, the router will be addressable at one additional hostname, dependenant on the line type:
| Line Type | Addtional Hostname |
| --------- | ------------------ |
| Mobile | `mobirouter.loc` |
| Broadband | `bbrouter.loc` |
| ADSL | `dslrouter.loc` |
There are also a number of additional utility hostnames, spoilered due to their quantity.
<details>
<summary>Additional hostnames</summary>
<table>
<thead>
<tr><td>Hostname</td><td>IP Address</td></tr>
</thead>
<tbody>
<tr><td><code>medalcom.loc</code></td><td><code>x.y.z.5</code></td></tr>
<tr><td><code>allnet201.loc</code></td><td><code>x.y.z.201</code></td></tr>
<tr><td><code>allnet202.loc</code></td><td><code>x.y.z.202</code></td></tr>
<tr><td><code>allnet203.loc</code></td><td><code>x.y.z.203</code></td></tr>
<tr><td><code>allnet204.loc</code></td><td><code>x.y.z.204</code></td></tr>
<tr><td><code>allnet205.loc</code></td><td><code>x.y.z.205</code></td></tr>
<tr><td><code>allnet206.loc</code></td><td><code>x.y.z.206</code></td></tr>
<tr><td><code>allnet207.loc</code></td><td><code>x.y.z.207</code></td></tr>
<tr><td><code>allnet208.loc</code></td><td><code>x.y.z.208</code></td></tr>
<tr><td><code>allnet209.loc</code></td><td><code>x.y.z.209</code></td></tr>
<tr><td><code>allnet210.loc</code></td><td><code>x.y.z.210</code></td></tr>
<tr><td><code>allnet211.loc</code></td><td><code>x.y.z.211</code></td></tr>
<tr><td><code>allnet212.loc</code></td><td><code>x.y.z.212</code></td></tr>
<tr><td><code>allnet213.loc</code></td><td><code>x.y.z.213</code></td></tr>
<tr><td><code>allnet214.loc</code></td><td><code>x.y.z.214</code></td></tr>
<tr><td><code>allnet215.loc</code></td><td><code>x.y.z.215</code></td></tr>
<tr><td><code>allnet216.loc</code></td><td><code>x.y.z.216</code></td></tr>
<tr><td><code>allnet217.loc</code></td><td><code>x.y.z.217</code></td></tr>
<tr><td><code>allnet218.loc</code></td><td><code>x.y.z.218</code></td></tr>
<tr><td><code>allnet219.loc</code></td><td><code>x.y.z.219</code></td></tr>
<tr><td><code>allnet220.loc</code></td><td><code>x.y.z.220</code></td></tr>
<tr><td><code>allnet221.loc</code></td><td><code>x.y.z.221</code></td></tr>
<tr><td><code>allnet222.loc</code></td><td><code>x.y.z.222</code></td></tr>
<tr><td><code>allnet223.loc</code></td><td><code>x.y.z.223</code></td></tr>
<tr><td><code>allnet224.loc</code></td><td><code>x.y.z.224</code></td></tr>
<tr><td><code>allnet225.loc</code></td><td><code>x.y.z.225</code></td></tr>
<tr><td><code>allnet226.loc</code></td><td><code>x.y.z.226</code></td></tr>
<tr><td><code>allnet227.loc</code></td><td><code>x.y.z.227</code></td></tr>
<tr><td><code>allnet228.loc</code></td><td><code>x.y.z.228</code></td></tr>
<tr><td><code>allnet229.loc</code></td><td><code>x.y.z.229</code></td></tr>
<tr><td><code>allnet230.loc</code></td><td><code>x.y.z.230</code></td></tr>
<tr><td><code>allnet231.loc</code></td><td><code>x.y.z.231</code></td></tr>
<tr><td><code>allnet232.loc</code></td><td><code>x.y.z.232</code></td></tr>
<tr><td><code>allnet233.loc</code></td><td><code>x.y.z.233</code></td></tr>
<tr><td><code>allnet234.loc</code></td><td><code>x.y.z.234</code></td></tr>
<tr><td><code>allnet235.loc</code></td><td><code>x.y.z.235</code></td></tr>
<tr><td><code>allnet236.loc</code></td><td><code>x.y.z.236</code></td></tr>
<tr><td><code>allnet237.loc</code></td><td><code>x.y.z.237</code></td></tr>
<tr><td><code>allnet238.loc</code></td><td><code>x.y.z.238</code></td></tr>
<tr><td><code>allnet239.loc</code></td><td><code>x.y.z.239</code></td></tr>
</tbody>
</table>
</details>
The provided router connects to ALL.Net services using an IPSEC tunnel connected to `vpn1jpn.sys-all.net` and `vpn2jpn.sys-all.net`. That's where the details on the SEGA VPN end for hopefully obvious reasons.