docs/protocol.html

1747 lines
61 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Packet format | eAmuse API</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<table>
<tr>
<td><a href=".">Contents</a></td>
<td><a href="./transport.html">Transport layer</a></td>
<td><a href="./packet.html">Packet format</a></td>
<td><a href="./protocol.html">Application Protocol</a></td>
</tr>
</table>
<h1>Application Protocol</h1>
<p>As the previous pages have eluded to (you <i>did</i> read them, didn't you?), eAmuse uses HTTP as its main way of
getting data around. This means we need an HTTP server running but, as we'll see, we don't need to think too
hard about that.</p>
<p>Every request made is a <code>POST</code> request, to <code>//&lt;model&gt;/&lt;module&gt;/&lt;method&gt;</code>,
with its body being encoded data as described in the previous sections. In addition to the
<code>X-Compress:</code> and <code>X-Eamuse-Info:</code> headers previously detailed, there is also a
<code>X-PCB-ID:</code> header. that can be set. Your machine's PCB ID uniquely defines the physical board. This
header is added in out-bound requests, and allows the server to identify you. Importantly, it's also the value
that the server uses to identify which machines are authorized to be on the network, and which are not.
</p>
<p>Every request is followed immediately by a response. Any response code other than <code>200</code> is considered
a failure.</p>
<details>
<summary>Source code details</summary>
<figure>
<img src="images/200_only.png">
<figcaption><code>libavs-win32-ea3.dll:0x1000f8e7</code></figcaption>
</figure>
</details>
<p>All requests follow a basic format:</p>
<pre><code>&lt;call model="<i>model</i>" srcid="<i>srcid</i>" tag="<i>tag</i>"&gt;
&lt;<i>module</i> method="<i>method</i>" <i>...attributes</i>&gt;
<i>children</i>
&lt;/<i>module</i>&gt;
&lt;/call&gt;</code></pre>
<p>The responses follow a similar format:</p>
<pre><code>&lt;response&gt;
&lt;<i>module</i> status="<i>status</i>" <i>...attributes</i>&gt;
<i>children</i>
&lt;/<i>module</i>&gt;
&lt;/response&gt;</code></pre>
<p>With <code>"0"</code> being a successful status. Convention is to identify a specific method as
<code><i>module</i>.<i>method</i></code>, and we'll be following this convention in this document too. There are
a <i>lot</i> of possible methods, so the majority of this document is a big reference for them all. There are a
number of generic methods, and a number of game specific ones. If you haven't clocked yet, I've been working on
an SDVX 4 build for most of these pages, and each game also comes with its own set of game-specific methods.
These are namespaces under the <code>game.%s</code> module and, in the case of SDVX 4, are all
<code>game.sv4_<i>method</i></code>. I may or may not document the SDVX 4 specific methods, but I've listed them
here anyway for completeness.
</p>
<p>Paths in the XML bodies are formatted using an XPath-like syntax. That is, <code>status@/response</code> gets the
<code>status</code> attribute from <code>response</code>, and <code>response/eacoin/sequence</code> would return
that node's value.
</p>
<p><b>NOTE:</b> I am using the non-standard notation of <code>&lt;node* ...</code> and
<code>&lt;node attr*="" ...</code> to indicate that an attribute or node is not always present! Additionally, I
am going to use the notation of <code>&lt;node[]&gt;</code> to indicate that a node repeats.
</p>
<table>
<thead>
<tr>
<td>Status</td>
<td>Meaning</td>
</tr>
</thead>
<tr>
<td><code>0</code></td>
<td>Success</td>
</tr>
<tr>
<td><code>109</code></td>
<td>No profile</td>
</tr>
<tr>
<td><code>110</code></td>
<td>Not allowed</td>
</tr>
<tr>
<td><code>112</code></td>
<td>Card not found (<code>cardmng.inquire</code>)</td>
</tr>
<tr>
<td><code>116</code></td>
<td>Card pin invalid (<code>cardmng.authpass</code>)</td>
</tr>
</table>
<details>
<summary>How to reverse engineer these calls</summary>
<p>Turns out bemani have been quite sensible in how they implemented their code for creating structures, so it's
rather readable. That said, if you've been using Ghidra (like me!), this is the time to switch to IDA. I'll
let the below screenshots below speak for themselves:
</p>
<details>
<summary>Ghidra</summary>
<img src="images/eventlog_ghidra.png">
<img src="images/matching_request_ghidra.png">
</details>
<details>
<summary>IDA Pro</summary>
<img src="images/eventlog_ida.png">
<img src="images/matching_request_ida.png">
</details>
<p>I know which of these I'd rather use for reverse engineering (sorry, Ghidra)!</p>
</details>
<h2>Possible XRPC requests</h2>
<ul>
<li><code><a href="#eventlog">eventlog.%s</a></code></li>
<ul>
<li><code><a href="#eventlog.write">eventlog.write</a></code></li>
</ul>
<li><code><a href="#playerdata">playerdata.%s</a></code></li>
<ul>
<li><code><a href="#playerdata.usergamedata_send">playerdata.usergamedata_send</a></code></li>
<li><code><a href="#playerdata.usergamedata_recv">playerdata.usergamedata_recv</a></code></li>
<li><code><a href="#playerdata.usergamedata_inheritance">playerdata.usergamedata_inheritance</a></code></li>
<li><code><a href="#playerdata.usergamedata_condrecv">playerdata.usergamedata_condrecv</a></code></li>
<li><code><a href="#playerdata.usergamedata_scorerank">playerdata.usergamedata_scorerank</a></code></li>
</ul>
<li><code><a href="#matching">matching.%s</a></code></li>
<ul>
<li><code><a href="#matching.request">matching.request</a></code></li>
<li><code><a href="#matching.wait">matching.wait</a></code></li>
<li><code><a href="#matching.finish">matching.finish</a></code></li>
</ul>
<li><code><a href="#system">system.%s</a></code></li>
<ul>
<li><code><a href="#system.getmaster">system.getmaster</a></code></li>
<li><code><a href="#system.getlocationiplist">system.getlocationiplist</a></code></li>
<li><code><a href="#system.xrpcproxy">system.xrpcproxy</a></code></li>
<li><code><a href="#system.convcardnumber">system.convcardnumber</a></code></li>
</ul>
<li><code><a href="#esoc">esoc.%s</a></code></li>
<ul>
<li><code><a href="#esoc.read">esoc.read</a></code></li>
<li><code><a href="#esoc.write">esoc.write</a></code></li>
</ul>
<li><code><a href="#cardmng">cardmng.%s</a></code></li>
<ul>
<li><code><a href="#cardmng.inquire">cardmng.inquire</a></code></li>
<li><code><a href="#cardmng.getrefid">cardmng.getrefid</a></code></li>
<li><code><a href="#cardmng.bindmodel">cardmng.bindmodel</a></code></li>
<li><code><a href="#cardmng.bindcard">cardmng.bindcard</a></code></li>
<li><code><a href="#cardmng.authpass">cardmng.authpass</a></code></li>
<li><code><a href="#cardmng.getkeepspan">cardmng.getkeepspan</a></code></li>
<li><code><a href="#cardmng.getkeepremain">cardmng.getkeepremain</a></code></li>
<li><code><a href="#cardmng.getdatalist">cardmng.getdatalist</a></code></li>
</ul>
<li><code><a href="#esign">esign.%s</a></code></li>
<ul>
<li><code><a href="#esign.request">esign.request</a></code></li>
</ul>
<li><code><a href="#package">package.%s</a></code></li>
<ul>
<li><code><a href="#package.list">package.list</a></code></li>
<li><code><a href="#package.intend">package.intend</a></code></li>
</ul>
<li><code><a href="#userdata">userdata.%s</a></code></li>
<ul>
<li><code><a href="#userdata.read">userdata.read</a></code></li>
<li><code><a href="#userdata.write">userdata.write</a></code></li>
</ul>
<li><code><a href="#services">services.%s</a></code></li>
<ul>
<li><code><a href="#services.get">services.get</a></code></li>
</ul>
<li><code><a href="#pcbtracker">pcbtracker.%s</a></code></li>
<ul>
<li><code><a href="#pcbtracker.alive">pcbtracker.alive</a></code></li>
</ul>
<li><code><a href="#pcbevent">pcbevent.%s</a></code></li>
<ul>
<li><code><a href="#pcbevent.put">pcbevent.put</a></code></li>
</ul>
<li><code><a href="#message">message.%s</a></code></li>
<ul>
<li><code><a href="#message.get">message.get</a></code></li>
</ul>
<li><code><a href="#facility">facility.%s</a></code></li>
<ul>
<li><code><a href="#facility.get">facility.get</a></code></li>
</ul>
<li><code><a href="#apsmanager">apsmanager.%s</a></code></li>
<ul>
<li><code><a href="#apsmanager.getstat">apsmanager.getstat</a></code></li>
</ul>
<li><code><a href="#sidmgr">sidmgr.%s</a></code></li>
<ul>
<li><code><a href="#sidmgr.create">sidmgr.create</a></code></li>
<li><code><a href="#sidmgr.open">sidmgr.open</a></code></li>
<li><code><a href="#sidmgr.touch">sidmgr.touch</a></code></li>
<li><code><a href="#sidmgr.branch">sidmgr.branch</a></code></li>
<li><code><a href="#sidmgr.close">sidmgr.close</a></code></li>
</ul>
<li><code><a href="#dlstatus">dlstatus.%s</a></code></li>
<ul>
<li><code><a href="#dlstatus.done">dlstatus.done</a></code></li>
<li><code><a href="#dlstatus.progress">dlstatus.progress</a></code></li>
</ul>
<li><code><a href="#eacoin">eacoin.%s</a></code></li>
<ul>
<li><code><a href="#eacoin.checkin">eacoin.checkin</a></code></li>
<li><code><a href="#eacoin.checkout">eacoin.checkout</a></code></li>
<li><code><a href="#eacoin.consume">eacoin.consume</a></code></li>
<li><code><a href="#eacoin.getbalance">eacoin.getbalance</a></code></li>
<li><code><a href="#eacoin.getecstatus">eacoin.getecstatus</a></code></li>
<li><code><a href="#eacoin.touch">eacoin.touch</a></code></li>
<li><code><a href="#eacoin.opchpass">eacoin.opchpass</a></code></li>
<li><code><a href="#eacoin.opcheckin">eacoin.opcheckin</a></code></li>
<li><code><a href="#eacoin.opcheckout">eacoin.opcheckout</a></code></li>
<li><code><a href="#eacoin.getlog">eacoin.getlog</a></code></li>
</ul>
<li><code><a href="#traceroute">traceroute.%s</a></code></li>
<ul>
<li><code><a href="#traceroute.send">traceroute.send</a></code></li>
</ul>
<li><code><a href="#game">game.%s</a></code></li>
<ul>
<li><code><a href="#game.sv4_sample">game.sv4_sample</a></code></li>
<li><code><a href="#game.sv4_new">game.sv4_new</a></code></li>
<li><code><a href="#game.sv4_load">game.sv4_load</a></code></li>
<li><code><a href="#game.sv4_load_m">game.sv4_load_m</a></code></li>
<li><code><a href="#game.sv4_save">game.sv4_save</a></code></li>
<li><code><a href="#game.sv4_save_m">game.sv4_save_m</a></code></li>
<li><code><a href="#game.sv4_common">game.sv4_common</a></code></li>
<li><code><a href="#game.sv4_shop">game.sv4_shop</a></code></li>
<li><code><a href="#game.sv4_hiscore">game.sv4_hiscore</a></code></li>
<li><code><a href="#game.sv4_buy">game.sv4_buy</a></code></li>
<li><code><a href="#game.sv4_exception">game.sv4_exception</a></code></li>
<li><code><a href="#game.sv4_entry_s">game.sv4_entry_s</a></code></li>
<li><code><a href="#game.sv4_entry_e">game.sv4_entry_e</a></code></li>
<li><code><a href="#game.sv4_frozen">game.sv4_frozen</a></code></li>
<li><code><a href="#game.sv4_lounce">game.sv4_lounce</a></code></li>
<li><code><a href="#game.sv4_save_e">game.sv4_save_e</a></code></li>
<li><code><a href="#game.sv4_save_pb">game.sv4_save_pb</a></code></li>
<li><code><a href="#game.sv4_save_c">game.sv4_save_c</a></code></li>
<li><code><a href="#game.sv4_play_s">game.sv4_play_s</a></code></li>
<li><code><a href="#game.sv4_play_e">game.sv4_play_e</a></code></li>
<li><code><a href="#game.sv4_serial">game.sv4_serial</a></code></li>
<li><code><a href="#game.sv4_save_fi">game.sv4_save_fi</a></code></li>
<li><code><a href="#game.sv4_print">game.sv4_print</a></code></li>
<li><code><a href="#game.sv4_print_h">game.sv4_print_h</a></code></li>
<li><code><a href="#game.sv4_load_r">game.sv4_load_r</a></code></li>
<li><code><a href="#game.sv4_save_campaign">game.sv4_save_campaign</a></code></li>
</ul>
</ul>
<h2 id="eventlog"><code>eventlog</code></h2>
<h3 id="eventlog.write"><code>eventlog.write</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;eventlog method="write"&gt;
&lt;retrycnt __type="u32" /&gt;
&lt;data&gt;
&lt;eventid __type="str" /&gt;
&lt;eventorder __type="s32" /&gt;
&lt;pcbtime __type="u64" /&gt;
&lt;gamesession __type="s64" /&gt;
&lt;strdata1 __type="str" /&gt;
&lt;strdata2 __type="str" /&gt;
&lt;numdata1 __type="s64" /&gt;
&lt;numdata2 __type="s64" /&gt;
&lt;locationid __type="str" /&gt;
&lt;/data&gt;
&lt;/eventlog&gt;
&lt;/call&gt;</code></pre>
<p>Event ID list:</p>
<ul>
<li><code>G_GAMED</code></li>
<li><code>S_ERROR</code></li>
<li><code>S_PWRON</code> <b>TODO: find more!</b></li>
<li><code>T_OTDEMO</code></li>
</ul>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;eventlog status="<i>status</i>"&gt;
&lt;gamesession __type="s64" /&gt;
&lt;logsendflg __type="s32" /&gt;
&lt;logerrlevel __type="s32" /&gt;
&lt;evtidnosendflg __type="s32" /&gt;
&lt;/eventlog&gt;
&lt;/response&gt;</code></pre>
<h2 id="playerdata"><code>playerdata</code></h2>
<h3 id="playerdata.usergamedata_send"><code>playerdata.usergamedata_send</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;playerdata method="usergamedata_send"&gt;
&lt;retrycnt __type="u32" /&gt;
&lt;info&gt;
&lt;version __type="u32" /&gt;
&lt;/info&gt;
&lt;data&gt;
&lt;refid __type="str" /&gt;
&lt;dataid __type="str" /&gt;
&lt;gamekind __type="str" /&gt;
&lt;datanum __type="u32" /&gt;
&lt;record&gt;
&lt;d[] __type="str" /&gt;
&lt;/record&gt;
&lt;/data&gt;
&lt;/playerdata&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;playerdata status="<i>status</i>"&gt;
&lt;result __type="s32" /&gt;
&lt;/playerdata&gt;
&lt;/response&gt;</code></pre>
<h3 id="playerdata.usergamedata_recv"><code>playerdata.usergamedata_recv</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;playerdata method="usergamedata_recv"&gt;
&lt;info&gt;
&lt;version __type="u32" /&gt;
&lt;/info&gt;
&lt;data&gt;
&lt;refid __type="str"&gt;
&lt;dataid __type="str"&gt;
&lt;gamekind __type="str"&gt;
&lt;recv_num __type="u32"&gt;
&lt;/data&gt;
&lt;/playerdata&gt;
&lt;/call&gt;</code></pre>
<pre><code>&lt;call <i>...</i>&gt;
&lt;playerdata method="usergamedata_recv"&gt;
&lt;data&gt;
&lt;refid __type="str"&gt;
&lt;dataid __type="str"&gt;
&lt;gamekind __type="str"&gt;
&lt;recv_csv __type="str"&gt;
&lt;/data&gt;
&lt;/playerdata&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;playerdata status="<i>status</i>"&gt;
&lt;player&gt;
&lt;result&gt;
&lt;record_num __type="u32" /&gt;
&lt;/result&gt;
&lt;record&gt;
&lt;d[]&gt;
&lt;bin1 __type="str" /&gt;
&lt;/d[]&gt;
&lt;/record&gt;
&lt;/player&gt;
&lt;/playerdata&gt;
&lt;/response&gt;</code></pre>
<h3 id="playerdata.usergamedata_inheritance"><code>playerdata.usergamedata_inheritance</code></h3>
<p>See: <code>playerdata.usergamedata_recv</code></p>
<h3 id="playerdata.usergamedata_condrecv"><code>playerdata.usergamedata_condrecv</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;playerdata method="usergamedata_condrecv"&gt;
&lt;info&gt;
&lt;version __type="s32" /&gt;
&lt;/info&gt;
&lt;data&gt;
&lt;dataid __type="str" /&gt;
&lt;gamekind __type="str" /&gt;
&lt;vkey __type="str" /&gt;
&lt;conditionkey __type="str" /&gt;
&lt;columns_bit __type="u64" /&gt;
&lt;conditions_num __type="u32" /&gt;
&lt;where __type="str" /&gt;
&lt;order_num __type="u32" /&gt;
&lt;order __type="str" /&gt;
&lt;recv_num __type="u32" /&gt;
&lt;/info&gt;
&lt;/playerdata&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;playerdata status="<i>status</i>"&gt;
&lt;player&gt;
&lt;result __type="s32" /&gt;
&lt;record_num __type="s32" /&gt;
&lt;record&gt;
&lt;d[]&gt;
&lt;bin1 __type="str" /&gt;
&lt;/d[]&gt;
&lt;record/&gt;
&lt;/player&gt;
&lt;/playerdata&gt;
&lt;/response&gt;</code></pre>
<h3 id="playerdata.usergamedata_scorerank"><code>playerdata.usergamedata_scorerank</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;playerdata method="usergamedata_scorerank"&gt;
&lt;info&gt;
&lt;version __type="s32" /&gt;
&lt;/info&gt;
&lt;data&gt;
&lt;dataid __type="str" /&gt;
&lt;gamekind __type="str" /&gt;
&lt;ckey __type="str" /&gt;
&lt;conditionkey __type="str" /&gt;
&lt;score __type="str" /&gt;
&lt;/data&gt;
&lt;/playerdata&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;playerdata status="<i>status</i>"&gt;
&lt;rank&gt;
&lt;result __type="s32" /&gt;
&lt;rank __type="s32" /&gt;
&lt;updatetime __type="u64" /&gt;
&lt;/rank&gt;
&lt;/playerdata&gt;
&lt;/response&gt;</code></pre>
<h2 id="matching"><code>matching</code></h2>
<h3 id="matching.request"><code>matching.request</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;matching method="request"&gt;
&lt;info&gt;
&lt;version __type="s32" /&gt;
&lt;/info&gt;
&lt;data&gt;
&lt;matchtyp __type="s32" /&gt;
&lt;matchgrp __type="s32" /&gt;
&lt;matchflg __type="s32" /&gt;
&lt;waituser __type="s32" /&gt;
&lt;waittime __type="s32" /&gt;
&lt;joinip __type="str" /&gt;
&lt;localip __type="str" /&gt;
&lt;localport __type="s32" /&gt;
&lt;dataid __type="str" /&gt;
&lt;gamekind __type="str" /&gt;
&lt;locationid __type="str" /&gt;
&lt;lineid __type="str" /&gt;
&lt;locationcountry __type="str" /&gt;
&lt;locationregion __type="str" /&gt;
&lt;/data&gt;
&lt;/matching&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;matching status="<i>status</i>"&gt;
&lt;hostid __type="s64" /&gt;
&lt;result __type="s32" /&gt;
&lt;hostip_g __type="str" /&gt;
&lt;hostip_l __type="str" /&gt;
&lt;hostport_l __type="s32" /&gt;
&lt;hostport_g __type="s32" /&gt;
&lt;/matching&gt;
&lt;/response&gt;</code></pre>
<h3 id="matching.wait"><code>matching.wait</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;matching method="wait"&gt;
&lt;info&gt;
&lt;version __type="s32" /&gt;
&lt;/info&gt;
&lt;data&gt;
&lt;hostid __type="s64" /&gt;
&lt;locationid __type="str" /&gt;
&lt;lineid __type="str" /&gt;
&lt;/data&gt;
&lt;/matching&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;matching status="<i>status</i>"&gt;
&lt;result __type="s32" /&gt;
&lt;prwtime __type="s32" /&gt;
&lt;/matching&gt;
&lt;/response&gt;</code></pre>
<h3 id="matching.finish"><code>matching.finish</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;matching method="finish"&gt;
&lt;info&gt;
&lt;version __type="s32" /&gt;
&lt;/info&gt;
&lt;data&gt;
&lt;hostid __type="s64" /&gt;
&lt;locationid __type="str" /&gt;
&lt;lineid __type="str" /&gt;
&lt;/data&gt;
&lt;/matching&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;matching status="<i>status</i>"&gt;
&lt;result __type="s32" /&gt;
&lt;/matching&gt;
&lt;/response&gt;</code></pre>
<h2 id="system"><code>system</code></h2>
<h3 id="system.getmaster"><code>system.getmaster</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;system method="getmaster"&gt;
&lt;data&gt;
&lt;gamekind __type="str" /&gt;
&lt;datatype __type="str" /&gt;
&lt;datakey __type="str" /&gt;
&lt;/data&gt;
&lt;/system&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;system status="<i>status</i>"&gt;
&lt;result __type="s32" /&gt;
&lt;strdata1 __type="str" /&gt;
&lt;strdata2 __type="str" /&gt;
&lt;updatedate __type="u64" /&gt;
&lt;/system&gt;
&lt;/response&gt;</code></pre>
<h3 id="system.getlocationiplist"><code>system.getlocationiplist</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;system method="getlocationiplist"&gt;
&lt;data&gt;
&lt;locationid __type="str" /&gt;
&lt;lineid __type="str" /&gt;
&lt;/data&gt;
&lt;/system&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;system status="<i>status</i>"&gt;
&lt;result __type="s32" /&gt;
&lt;iplist&gt;
&lt;record_num __type="s32" /&gt;
&lt;record[]&gt;
&lt;localconn __type="str" /&gt;
&lt;/record[]&gt;
&lt;/iplist&gt;
&lt;/system&gt;
&lt;/response&gt;</code></pre>
<h3 id="system.xrpcproxy"><code>system.xrpcproxy</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;system method="xrpcproxy"&gt;
&lt;info&gt;
&lt;version __type="s32" /&gt;
&lt;/info&gt;
&lt;data&gt;
&lt;hostid __type="s64" /&gt;
&lt;locationid __type="str" /&gt;
&lt;lineid __type="str" /&gt;
&lt;/data&gt;
&lt;/system&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;system status="<i>status</i>"&gt;
&lt;result __type="s32" /&gt;
&lt;pwrtime __type="s32" /&gt;
&lt;matchlist&gt;
&lt;record_num __type="u32" /&gt;
&lt;record[]&gt;
&lt;pcbid __type="str" /&gt;
&lt;statusflg __type="str" /&gt;
&lt;matchgrp __type="s32" /&gt;
&lt;hostid __type="s64" /&gt;
&lt;jointime __type="u64" /&gt;
&lt;connip_g __type="str" /&gt;
&lt;connport_g __type="s32" /&gt;
&lt;connip_l __type="str" /&gt;
&lt;connport_l __type="s32" /&gt;
&lt;/record[]&gt;
&lt;/matchlist&gt;
&lt;/system&gt;
&lt;/response&gt;</code></pre>
<h3 id="system.convcardnumber"><code>system.convcardnumber</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;system method="convcardnumber"&gt;
&lt;info&gt;
&lt;version __type="s32" /&gt;
&lt;/info&gt;
&lt;data&gt;
&lt;card_id __type="str" /&gt;
&lt;card_type __type="s32" /&gt;
&lt;/data&gt;
&lt;/system&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;system status="<i>status</i>"&gt;
&lt;result __type="s32" /&gt;
&lt;data&gt;
&lt;card_number __type="str" /&gt;
&lt;/data&gt;
&lt;/system&gt;
&lt;/response&gt;</code></pre>
<h2 id="esoc"><code>esoc</code></h2>
<h3 id="esoc.read"><code>esoc.read</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;esoc method="read"&gt;
&lt;senddata /&gt;
&lt;/esoc&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;esoc status="<i>status</i>"&gt;
&lt;recvdata /&gt;
&lt;/esoc&gt;
&lt;/response&gt;</code></pre>
<p>Go figure.</p>
<h3 id="esoc.write"><code>esoc.write</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;esoc method="write"&gt;
&lt;senddata /&gt;
&lt;/esoc&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;esoc status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h2 id="cardmng"><code>cardmng</code></h2>
<h3 id="cardmng.inquire"><code>cardmng.inquire</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="inquire" cardid="" cardtype="" update="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" refid="" dataid="" pcode="" newflag="" binded="" expired=" ecflag="" useridflag="" extidflag="" lastupdate="" /&gt;
&lt;/response&gt;</code></pre>
<p>If the <code>cardid</code> cannot be found, <code>status</code> should be set to <code>112</code> with no other
information return. Otherwise, we return information about the found card.</p>
<table class="nocode">
<tr>
<td><code>refid</code></td>
<td>A reference to this card to be used in other requests</td>
</tr>
<tr>
<td><code>dataid</code></td>
<td>Appears to be set the same as <code>refid</code>; presumably to allow different keys for game state vs
login details.</td>
</tr>
<tr>
<td><code>newflag</code></td>
<td><code>1</code> or <code>0</code></td>
</tr>
<tr>
<td><code>binded</code></td>
<td>Has a profile ever been created for this game (or an older version, requiring a migration)
(<code>1</code> or <code>0</code>)</td>
</tr>
<tr>
<td><code>expired</code></td>
<td>Did we find </td>
</tr>
</table>
<h3 id="cardmng.getrefid"><code>cardmng.getrefid</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="getrefid" cardtype="" cardid=" newflag="" passwd="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" refid="" dataid="" pcode="" /&gt;
&lt;/response&gt;</code></pre>
<h3 id="cardmng.bindmodel"><code>cardmng.bindmodel</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="bindmodel" refid="" newflag="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" dataid="" /&gt;
&lt;/response&gt;</code></pre>
<h3 id="cardmng.bindcard"><code>cardmng.bindcard</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="bindcard" cardtype="" newid="" refid="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h3 id="cardmng.authpass"><code>cardmng.authpass</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="authpass" refid="" pass="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h3 id="cardmng.getkeepspan"><code>cardmng.getkeepspan</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="getkeepspan" model*="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" keepspan="" /&gt;
&lt;/response&gt;</code></pre>
<h3 id="cardmng.getkeepremain"><code>cardmng.getkeepremain</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="getkeepremain" refid="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" keepremain="" /&gt;
&lt;/response&gt;</code></pre>
<h3 id="cardmng.getdatalist"><code>cardmng.getdatalist</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="getdatalist" refid="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>"&gt;
&lt;item[]&gt;
&lt;mcode __type="str" /&gt;
&lt;dataid __type="str" /&gt;
&lt;regtime __type="str" /&gt;
&lt;lasttime __type="str" /&gt;
&lt;exptime __type="str" /&gt;
&lt;expflag __type="u8" /&gt;
&lt;/item[]&gt;
&lt;/cardmng&gt;
&lt;/response&gt;</code></pre>
<h2 id="esign"><code>esign</code></h2>
<h3 id="esign.request"><code>esign.request</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;esign method="request"&gt;
<i>placeholder</i>
&lt;/esign&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;esign status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/esign&gt;
&lt;/response&gt;</code></pre>
<h2 id="package"><code>package</code></h2>
<h3 id="package.list"><code>package.list</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;package method="list" pkgtype="<i>pkgtype</i>" model*="" /&gt;
&lt;/call&gt;</code></pre>
<p><code>all</code> is the only currently observed value for <code>pkgtype</code></p>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;package status="<i>status</i>"&gt;
&lt;item[] url="" /&gt;
&lt;/package&gt;
&lt;/response&gt;</code></pre>
<p>A list of all packages available for download.</p>
<h3 id="package.intend"><code>package.intend</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;package method="intend" url="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;package status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h2 id="userdata"><code>userdata</code></h2>
<h3 id="userdata.read"><code>userdata.read</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;userdata method="read" card*="" model*="" label="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;userdata status="<i>status</i>" time=""&gt;
&lt;b[] __type="" /&gt;
&lt;/userdata&gt;
&lt;/response&gt;</code></pre>
<p><code>__type</code> here can be either <code>bin</code> or <code>str</code></p>
<h3 id="userdata.write"><code>userdata.write</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;userdata method="write" card="" time="" model*="" label*="" &gt;
&lt;b[] __type="str" /&gt;
&lt;/userdata&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;userdata status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h2 id="services"><code>services</code></h2>
<h3 id="services.get"><code>services.get</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;services method="get" model*="" &gt;
&lt;info&gt;
&lt;AVS2 __type="str"&gt;<i>AVS2 version</i>&lt;/AVS2&gt;
&lt;/info&gt;
&lt;/services&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;services expire="" method="get" mode="" status="<i>status</i>"&gt;
&lt;item[] name="<i>service</i>" url="<i>url</i>" /&gt;
&lt;/services&gt;
&lt;/response&gt;</code></pre>
<p>Known services are:</p>
<ul>
<li><code>ntp</code></li>
<li><code>keepalive</code></li>
<li><code>cardmng</code></li>
<li><code>facility</code></li>
<li><code>message</code></li>
<li><code>numbering</code></li>
<li><code>package</code></li>
<li><code>pcbevent</code></li>
<li><code>pcbtracker</code></li>
<li><code>pkglist</code></li>
<li><code>posevent</code></li>
<li><code>userdata</code></li>
<li><code>userid</code></li>
<li><code>eacoin</code></li>
<li><code>local</code></li>
<li><code>local2</code></li>
<li><code>lobby</code></li>
<li><code>lobby2</code></li>
<li><code>dlstatus</code></li>
<li><code>netlog</code></li>
<li><code>sidmgr</code></li>
<li><code>globby</code></li>
</ul>
<p>Most of these will usually just return the URL to the eAmuse server (or your fake one ;D). <code>ntp</code> is a
notable exception, unless you're planning on reimplementing NTP. <code>keepalive</code> will likely alsop be a
custom URL with query parameters pre-baked.</p>
<p><code>mode</code> is one of <code>operation</code>, <code>debug</code>, <code>test</code>, or
<code>factory</code>.
</p>
<h2 id="pcbtracker"><code>pcbtracker</code></h2>
<h3 id="pcbtracker.alive"><code>pcbtracker.alive</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;pcbtracker method="alive" model*="" hardid="" softid="" accountid="" agree="" ecflag="" /&gt;
&lt;/call&gt;</code></pre>
<p><code>ecflag</code> here is determining if the arcade operator allows the use of paseli on this machine.</p>
<p><code>agree@</code> and <code>ecflag@</code> appear to either be totally non present, or present with a value of
<code>"1"</code>, but then again I may be reading the code wrong, so take that with a pinch of salt.
</p>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;pcbtracker status="" time="" limit="" ecenable="" eclimit="" &gt;
&lt;/response&gt;</code></pre>
<p>As you might guess, <code>ecenable@</code> is therefore the flag to determine if paseli is enabled (i.e. the
arcade operator and the server both allow its use).</p>
<h2 id="pcbevent"><code>pcbevent</code></h2>
<h3 id="pcbevent.put"><code>pcbevent.put</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;pcbevent method="put"&gt;
&lt;time __type="time" /&gt;
&lt;seq __type="u32" /&gt;
&lt;item[]&gt;
&lt;name __type="str" /&gt;
&lt;value __type="s32" /&gt;
&lt;time __type="time" /&gt;
&lt;/item[]&gt;
&lt;/pcbevent&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;pcbevent status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h2 id="message"><code>message</code></h2>
<h3 id="message.get"><code>message.get</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;message method="get" model*="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;message expire="" status="<i>status</i>"&gt;
&lt;item[] name="" start="" end="" data="" /&gt;
&lt;/message&gt;
&lt;/response&gt;</code></pre>
<h2 id="facility"><code>facility</code></h2>
<h3 id="facility.get"><code>facility.get</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;facility method="get" privateip*="" encoding*="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;facility expire=""\ status="<i>status</i>"&gt;
&lt;calendar*&gt;
&lt;year __type="s16" /&gt;
&lt;holiday __type="s16" /&gt;
&lt;/calendar&gt;
&lt;location&gt;
&lt;id __type="str" /&gt;
&lt;country __type="str" /&gt;
&lt;region __type="str" /&gt;
&lt;name __type="str" /&gt;
&lt;type __type="u8" /&gt;
&lt;countryname __type="str" /&gt;
&lt;countryjname __type="str" /&gt;
&lt;regionname __type="str" /&gt;
&lt;regionjname __type="str" /&gt;
&lt;customercode __type="str" /&gt;
&lt;companycode __type="str" /&gt;
&lt;latitude __type="s32" /&gt;
&lt;longitude __type="s32" /&gt;
&lt;accuracy __type="u8" /&gt;
&lt;/location&gt;
&lt;line&gt;
&lt;id __type="str" /&gt;
&lt;class __type="u8" /&gt;
&lt;/line&gt;
&lt;portfw&gt;
&lt;globalip __type="ip4" /&gt;
&lt;globalport __type="s16" /&gt;
&lt;privateport __type="s16" /&gt;
&lt;/portfw&gt;
&lt;public&gt;
&lt;flag __type="u8" /&gt;1&lt;/ flag&gt;
&lt;name __type="str" /&gt;
&lt;latitude __type="str"&gt;0&lt;latitude&gt;
&lt;longitude __type="str"&gt;0&lt;longitude&gt;
&lt;/public&gt;
&lt;share&gt;
&lt;eapass*&gt;
&lt;valid __type="?" /&gt;
&lt;/eapass&gt;
&lt;eacoin&gt;
&lt;notchamount __type="s32" /&gt;
&lt;notchcount __type="s32" /&gt;
&lt;supplylimit __type="s32"&gt;100000&lt;supplylimit&gt;
&lt;/eacoin&gt;
&lt;url&gt;
&lt;eapass __type="str"&gt;www.ea-pass.konami.net&lt;eapass&gt;
&lt;arcadefan __type="str"&gt;www.konami.jp/am&lt;arcadefan&gt;
&lt;konaminetdx __type="str"&gt;http://am.573.jp&lt;konaminetdx&gt;
&lt;konamiid __type="str"&gt;http://id.konami.jp&lt;konamiid&gt;
&lt;eagate __type="str"&gt;http://eagate.573.jp&lt;eagate&gt;
&lt;/url&gt;
&lt;/share&gt;
&lt;/facility&gt;
&lt;/response&gt;</code></pre>
<p><i>I'm not totally sure what type <code>share/eapass/valid</code> is meant to be, but it's optional, so I'd
suggest just not bothering and leaving it out :).</i></p>
<table>
<thead>
<tr>
<td>Country</td>
<td>Code</td>
</tr>
</thead>
<tr>
<td>Hong Kong</td>
<td><code>HK</code></td>
</tr>
<tr>
<td>Taiwan</td>
<td><code>TW</code></td>
</tr>
<tr>
<td>Korea</td>
<td><code>KR</code></td>
</tr>
<tr>
<td>USA</td>
<td><code>US</code></td>
</tr>
<tr>
<td>Thailand</td>
<td><code>TH</code></td>
</tr>
<tr>
<td>Indonesia</td>
<td><code>ID</code></td>
</tr>
<tr>
<td>Singapore</td>
<td><code>SG</code></td>
</tr>
<tr>
<td>Phillipines</td>
<td><code>PH</code></td>
</tr>
<tr>
<td>Macao</td>
<td><code>MO</code></td>
</tr>
<tr>
<td>Japan</td>
<td><code>JP</code></td>
</tr>
</table>
<p><code>globalip</code> (and associated ports) shold be the IP:port of the cabinet.</p>
<p><code>region</code> is used for Japan, and has the value <code>JP-[prefecture]</code> where prefecture ranges
from 1 through 47.</p>
<p><b>TODO: Compile the list of regions</b></p>
<h2 id="apsmanager"><code>apsmanager</code></h2>
<h3 id="apsmanager.getstat"><code>apsmanager.getstat</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;apsmanager method="getstat" model*="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;apsmanager status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h2 id="sidmgr"><code>sidmgr</code></h2>
<h3 id="sidmgr.create"><code>sidmgr.create</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;sidmgr method="create"&gt;
&lt;cardtype __type="str" /&gt;
&lt;cardid __type="str" /&gt;
&lt;cardgid __type="str" /&gt;
&lt;steal __type="u8" /&gt;
&lt;/sidmgr&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;sidmgr status="<i>status</i>"&gt;
&lt;state __type="u32" /&gt;
&lt;e_count __type="u8" /&gt;
&lt;last __type="time" /&gt;
&lt;locked __type="time" /&gt;
&lt;sid __type="str" /&gt;
&lt;cardid_status __type="u8" /&gt;
&lt;refid __type="str" /&gt;
&lt;/sidmgr&gt;
&lt;/response&gt;</code></pre>
<h3 id="sidmgr.open"><code>sidmgr.open</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;sidmgr method="open" sid="" &gt;
&lt;pass __type="str" /&gt;
&lt;/sidmgr&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;sidmgr status="<i>status</i>"&gt;
&lt;state __type="u32" /&gt;
&lt;refid __type="str" /&gt;
&lt;locked __type="time" /&gt;
&lt;/sidmgr&gt;
&lt;/response&gt;</code></pre>
<h3 id="sidmgr.touch"><code>sidmgr.touch</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;sidmgr method="touch" sid="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;sidmgr status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h3 id="sidmgr.branch"><code>sidmgr.branch</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;sidmgr method="branch" sid="" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;sidmgr status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h3 id="sidmgr.close"><code>sidmgr.close</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;sidmgr method="close" sid="" /&gt;
&lt;cause __type="u32" /&gt;
&lt;/sidmgr&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;sidmgr status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h2 id="dlstatus"><code>dlstatus</code></h2>
<h3 id="dlstatus.done"><code>dlstatus.done</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;dlstatus method="done"&gt;
&lt;url&gt;
&lt;param __type="str" /&gt;
&lt;/url&gt;
&lt;name __type="str" /&gt;
&lt;size __type="s32" /&gt;
&lt;/dlstatus&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;dlstatus status="<i>status</i>"&gt;
&lt;progress __type="s32" /&gt;
&lt;/dlstatus&gt;
&lt;/response&gt;</code></pre>
<h3 id="dlstatus.progress"><code>dlstatus.progress</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;dlstatus method="progress" /&gt;
&lt;progress __type="s32" /&gt;
&lt;/dlstatus&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;dlstatus status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/dlstatus&gt;
&lt;/response&gt;</code></pre>
<h2 id="eacoin"><code>eacoin</code></h2>
<h3 id="eacoin.checkin"><code>eacoin.checkin</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;eacoin method="checkin"&gt;
&lt;cardtype __type="str" /&gt;
&lt;cardid __type="str" /&gt;
&lt;passwd __type="str" /&gt;
&lt;ectype __type="str" /&gt;
&lt;/eacoin&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>"&gt;
&lt;sequence __type="s16" /&gt;
&lt;acstatus __type="u8" /&gt;
&lt;acid __type="str" /&gt;
&lt;acname __type="str" /&gt;
&lt;balance __type="s32" /&gt;
&lt;sessid __type="str" /&gt;
&lt;/eacoin&gt;
&lt;/response&gt;</code></pre>
<h3 id="eacoin.checkout"><code>eacoin.checkout</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;eacoin method="checkout"&gt;
&lt;sessid __type="str" /&gt;
&lt;/eacoin&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h3 id="eacoin.consume"><code>eacoin.consume</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;eacoin method="consume" esid=""&gt;
&lt;sessid __type="str" /&gt;
&lt;sequence __type="s16" /&gt;
&lt;payment __type="s32" /&gt;
&lt;service __type="s16" /&gt;
&lt;itemtype __type="str" /&gt;
&lt;detail __type="str" /&gt;
&lt;/eacoin&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>"&gt;
&lt;acstatus __type="u8" /&gt;
&lt;autocharge __type="u8" /&gt;
&lt;balance __type="s32" /&gt;
&lt;/eacoin&gt;
&lt;/response&gt;</code></pre>
<h3 id="eacoin.getbalance"><code>eacoin.getbalance</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;eacoin method="getbalance"&gt;
&lt;sessid __type="str" /&gt;
&lt;/eacoin&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>"&gt;
&lt;acstatus __type="u8" /&gt;
&lt;balance __type="s32" /&gt;
&lt;/eacoin&gt;
&lt;/response&gt;</code></pre>
<h3 id="eacoin.getecstatus"><code>eacoin.getecstatus</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;eacoin method="getecstatus" /&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>"&gt;
&lt;ectype __type="str" /&gt;
&lt;ecstatus __type="u8" /&gt;
&lt;/eacoin&gt;
&lt;/response&gt;</code></pre>
<h3 id="eacoin.touch"><code>eacoin.touch</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;eacoin method="touch"&gt;
&lt;sessid __type="str" /&gt;
&lt;/eacoin&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h3 id="eacoin.opchpass"><code>eacoin.opchpass</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;eacoin method="opchpass"&gt;
&lt;passwd __type="str" /&gt;
&lt;newpasswd __type="str" /&gt;
&lt;/eacoin&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h3 id="eacoin.opcheckin"><code>eacoin.opcheckin</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;eacoin method="opcheckin"&gt;
&lt;passwd __type="str" /&gt;
&lt;/eacoin&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>"&gt;
&lt;sessid __type="str" /&gt;
&lt;/eacoin&gt;
&lt;/response&gt;</code></pre>
<h3 id="eacoin.opcheckout"><code>eacoin.opcheckout</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;eacoin method="opcheckout"&gt;
&lt;sessid __type="str" /&gt;
&lt;/eacoin&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<h3 id="eacoin.getlog"><code>eacoin.getlog</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;eacoin method="getlog"&gt;
&lt;sessid __type="str" /&gt;
&lt;logtype __type="str" /&gt;
&lt;ectype __type="str" /&gt;
&lt;target __type="str" /&gt;
&lt;perpage __type="s16" /&gt;
&lt;page __type="s16" /&gt;
&lt;sesstype __type="str" /&gt;
&lt;/eacoin&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>"&gt;
&lt;processing __type="u8" /&gt;
&lt;topic&gt;
&lt;sumdate __type="str" /&gt;
&lt;sumfrom __type="str" /&gt;
&lt;sumto __type="str" /&gt;
&lt;today __type="s32" /&gt;
&lt;average __type="s32" /&gt;
&lt;total __type="s32" /&gt;
&lt;/topic&gt;
&lt;summary&gt;
&lt;items __type="s32" /&gt;
&lt;/summary&gt;
&lt;history&gt;
&lt;item[]&gt;
&lt;date __type="str" /&gt;
&lt;consume __type="s32" /&gt;
&lt;service __type="s32" /&gt;
&lt;cardtype __type="str" /&gt;
&lt;cardno __type="str" /&gt;
&lt;title __type="str" /&gt;
&lt;systemid __type="str" /&gt;
&lt;/item[]&gt;
&lt;/history&gt;
&lt;/eacoin&gt;
&lt;/response&gt;</code></pre>
<h2 id="traceroute"><code>traceroute</code></h2>
<h3 id="traceroute.send"><code>traceroute.send</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;traceroute proto="" method="send"&gt;
&lt;hop[]&gt;
&lt;valid __type="bool"&gt;
&lt;addr __type="ip4"&gt;
&lt;usec __type="u64"&gt;
&lt;/hop[]&gt;
&lt;/traceroute&gt;
&lt;/call&gt;</code></pre>
<p><code>hop</code> repeats for every hop (unsurprisingly)</p>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;traceroute status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/traceroute&gt;
&lt;/response&gt;</code></pre>
<h2 id="game"><code>game</code></h2>
<h3 id="game.sv4_sample"><code>game.sv4_sample</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_sample"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_new"><code>game.sv4_new</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_new"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_load"><code>game.sv4_load</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_load"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_load_m"><code>game.sv4_load_m</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_load_m"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_save"><code>game.sv4_save</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_save_m"><code>game.sv4_save_m</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save_m"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_common"><code>game.sv4_common</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_common"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_shop"><code>game.sv4_shop</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_shop"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_hiscore"><code>game.sv4_hiscore</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_hiscore"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_buy"><code>game.sv4_buy</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_buy"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_exception"><code>game.sv4_exception</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_exception"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_entry_s"><code>game.sv4_entry_s</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_entry_s"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_entry_e"><code>game.sv4_entry_e</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_entry_e"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_frozen"><code>game.sv4_frozen</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_frozen"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_lounce"><code>game.sv4_lounce</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_lounce"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_save_e"><code>game.sv4_save_e</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save_e"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_save_pb"><code>game.sv4_save_pb</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save_pb"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_save_c"><code>game.sv4_save_c</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save_c"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_play_s"><code>game.sv4_play_s</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_play_s"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_play_e"><code>game.sv4_play_e</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_play_e"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_serial"><code>game.sv4_serial</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_serial"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_save_fi"><code>game.sv4_save_fi</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save_fi"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_print"><code>game.sv4_print</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_print"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_print_h"><code>game.sv4_print_h</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_print_h"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_load_r"><code>game.sv4_load_r</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_load_r"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
<h3 id="game.sv4_save_campaign"><code>game.sv4_save_campaign</code></h3>
<h4>Request:</h4>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save_campaign"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
<h4>Response:</h4>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</body>