Syntax highlight!

This commit is contained in:
Bottersnike 2021-12-28 22:29:33 +00:00
parent fb99158425
commit 61fd25fa51
29 changed files with 1304 additions and 1220 deletions

116
docs.py
View File

@ -1,32 +1,73 @@
from flask import Flask, send_from_directory, render_template
from livereload import Server
import xml_lexer
import re
import os
app = Flask(__name__)
app.jinja_options.setdefault('extensions', []).append('jinja2_highlight.HighlightExtension')
TEMPLATES = "templates"
PAGES_BASE = "pages"
STATIC = ["images"]
ROOT = os.environ.get("EA_ROOT", "")
def generate_xrpc_list():
output = "<ul>"
proto = TEMPLATES + "/" + PAGES_BASE + "/proto"
for base, _, files in os.walk(proto):
prefix = base[len(proto):].replace("\\", "/").strip("/")
if prefix:
prefix = prefix.replace("/", ".") + "."
for i in files:
delim = "_" if prefix else "."
href = f"{ROOT}/proto{base[len(proto):]}/{i}"
output += f"<li><code><a href=\"{href}\">"
output += prefix + i.replace(".html", delim + "%s")
output += "</code></a></li>"
with open(os.path.join(base, i)) as f:
headers = re.findall('<h2 id="([^"]*?)">', f.read())
output += "<ul>"
for j in headers:
output += f"<li><code><a href=\"{href}#{j}\">"
output += prefix + i.replace(".html", delim + j)
output += "</code></a></li>"
output += "</ul>"
return output + "</ul>"
@app.route("/styles.css")
def styles():
return send_from_directory(".", "styles.css")
@app.route("/tango.css")
def tango():
return send_from_directory(".", "tango.css")
for base, folders, files in os.walk("images"):
for name in files:
def handler(base, name):
def handler():
return send_from_directory(base, name)
return handler
local_base = base.replace("\\", "/").strip(".").strip("/")
route = local_base + "/" + name
if not route.startswith("/"):
route = "/" + route
for i in STATIC:
for base, _, files in os.walk(i):
for name in files:
def handler(base, name):
def handler():
return send_from_directory(base, name)
return handler
local_base = base.replace("\\", "/").strip(".").strip("/")
route = local_base + "/" + name
if not route.startswith("/"):
route = "/" + route
handler = handler(base, name)
handler.__name__ == route
app.add_url_rule(route, route, handler)
handler = handler(base, name)
handler.__name__ == route
app.add_url_rule(route, route, handler)
TEMPLATES = "templates"
PAGES_BASE = "pages"
for base, folders, files in os.walk(TEMPLATES + "/" + PAGES_BASE):
for base, _, files in os.walk(TEMPLATES + "/" + PAGES_BASE):
if ".git" in base:
continue
if base.startswith(TEMPLATES):
@ -36,7 +77,11 @@ for base, folders, files in os.walk(TEMPLATES + "/" + PAGES_BASE):
if name.endswith(".html"):
def handler(base, name):
def handler():
return render_template(os.path.join(base, name).strip("/").replace("\\", "/"), ROOT=os.environ.get("EA_ROOT"))
return render_template(
os.path.join(base, name).strip("/").replace("\\", "/"),
ROOT=ROOT,
generate_xrpc_list=generate_xrpc_list
)
return handler
local_base = base.replace("\\", "/").strip(".").strip("/")
@ -54,26 +99,27 @@ for base, folders, files in os.walk(TEMPLATES + "/" + PAGES_BASE):
app.add_url_rule(route, route, handler)
from flask import url_for
def has_no_empty_params(rule):
defaults = rule.defaults if rule.defaults is not None else ()
arguments = rule.arguments if rule.arguments is not None else ()
return len(defaults) >= len(arguments)
@app.route("/site-map")
def site_map():
links = []
for rule in app.url_map.iter_rules():
# Filter out rules we can't navigate to in a browser
# and rules that require parameters
if "GET" in rule.methods and has_no_empty_params(rule):
url = url_for(rule.endpoint, **(rule.defaults or {}))
links.append((url, rule.endpoint))
return str(links)
# from flask import url_for
# def has_no_empty_params(rule):
# defaults = rule.defaults if rule.defaults is not None else ()
# arguments = rule.arguments if rule.arguments is not None else ()
# return len(defaults) >= len(arguments)
# @app.route("/site-map")
# def site_map():
# links = []
# for rule in app.url_map.iter_rules():
# if "GET" in rule.methods and has_no_empty_params(rule):
# url = url_for(rule.endpoint, **(rule.defaults or {}))
# links.append((url, rule.endpoint))
# return str(links)
if __name__ == '__main__':
app.config['TEMPLATES_AUTO_RELOAD'] = True
app.config['DEBUG'] = True
server = Server(app.wsgi_app)
server.watch("templates")
server.serve(port=3000)
app.run(debug=True, port=3000, host="0.0.0.0")
# server = Server(app.wsgi_app)
# server.watch(".")
# server.serve(port=3000)

View File

@ -14,6 +14,7 @@ table {
overflow-x: auto;
display: block;
}
table.code {
font-family: monospace;
}
@ -28,9 +29,11 @@ td {
padding: 2px;
min-width: 32px;
}
table:not(.code) td {
padding: 2px 6px;
}
table.code td {
text-align: center;
}
@ -54,13 +57,16 @@ code {
border-radius: 4px;
word-break: break-word;
}
td > code {
td>code {
word-break: normal;
}
code > a {
code>a {
color: inherit;
}
pre > code {
pre>code, .highlight {
display: block;
word-break: normal;
border-radius: 4px;
@ -72,6 +78,14 @@ pre > code {
line-height: 1.4;
width: min-content;
}
pre>.highlight {
margin-bottom: -16px;
}
.highlight>pre {
margin: 0;
}
pre {
max-width: 100%;
overflow-x: auto;
@ -90,4 +104,4 @@ details {
margin: 4px 0;
overflow-x: auto;
max-width: 100%;
}
}

77
tango.css Normal file
View File

@ -0,0 +1,77 @@
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #8f5902; font-style: italic } /* Comment */
.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
.highlight .g { color: #000000 } /* Generic */
.highlight .k { color: #204a87; font-weight: bold } /* Keyword */
.highlight .l { color: #000000 } /* Literal */
.highlight .n { color: #000000 } /* Name */
.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */
.highlight .x { color: #000000 } /* Other */
.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */
.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
.highlight .gd { color: #a40000 } /* Generic.Deleted */
.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
.highlight .gr { color: #ef2929 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #000000; font-style: italic } /* Generic.Output */
.highlight .gp { color: #8f5902 } /* Generic.Prompt */
.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */
.highlight .ld { color: #000000 } /* Literal.Date */
.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */
.highlight .s { color: #4e9a06 } /* Literal.String */
.highlight .na { color: #c4a000 } /* Name.Attribute */
.highlight .nb { color: #204a87 } /* Name.Builtin */
.highlight .nc { color: #000000 } /* Name.Class */
.highlight .no { color: #000000 } /* Name.Constant */
.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */
.highlight .ni { color: #ce5c00 } /* Name.Entity */
.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #000000 } /* Name.Function */
.highlight .nl { color: #f57900 } /* Name.Label */
.highlight .nn { color: #000000 } /* Name.Namespace */
.highlight .nx { color: #000000 } /* Name.Other */
.highlight .py { color: #000000 } /* Name.Property */
.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #000000 } /* Name.Variable */
.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */
.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #000000 } /* Name.Function.Magic */
.highlight .vc { color: #000000 } /* Name.Variable.Class */
.highlight .vg { color: #000000 } /* Name.Variable.Global */
.highlight .vi { color: #000000 } /* Name.Variable.Instance */
.highlight .vm { color: #000000 } /* Name.Variable.Magic */
.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */

View File

@ -8,6 +8,7 @@
<title>{% block title %}{% endblock %}{% if self.title() %} | {% endif %}e-Amusement API</title>
<link rel="stylesheet" href="{{ROOT}}/styles.css">
<link rel="stylesheet" href="{{ROOT}}/tango.css">
</head>
<body>

View File

@ -8,24 +8,25 @@
for. My local implementation is in python, so that's all you're getting :). As a free bonus, have some test
cases too. It's not great code by any stretch, and it liberally uses assertions rather than proper
exceptions, but it should be a good enough starting point for your own version.</p>
<pre><code>import binascii
<pre></pre>{% highlight 'python' %}
import binascii
from Crypto.Cipher import DES3
KEY = b"" # Check the <a href="#des">DES section</a> for this
KEY = b"" # Check the DES section for this
_KEY = bytes(i * 2 for i in KEY) # Preprocess the key
ALPHABET = "0123456789ABCDEFGHJKLMNPRSTUWXYZ"
def enc_des(uid):
cipher = DES3.new(_KEY, DES3.MODE_CBC, iv=b'\0' * 8)
return cipher.encrypt(uid)
cipher = DES3.new(_KEY, DES3.MODE_CBC, iv=b'\0' * 8)
return cipher.encrypt(uid)
def dec_des(uid):
cipher = DES3.new(_KEY, DES3.MODE_CBC, iv=b'\0' * 8)
return cipher.decrypt(uid)
cipher = DES3.new(_KEY, DES3.MODE_CBC, iv=b'\0' * 8)
return cipher.decrypt(uid)
def checksum(data):
@ -38,79 +39,79 @@ return chk
def pack_5(data):
data = "".join(f"{i:05b}" for i in data)
if len(data) % 8 != 0:
data += "0" * (8 - (len(data) % 8))
return bytes(int(data[i:i+8], 2) for i in range(0, len(data), 8))
data = "".join(f"{i:05b}" for i in data)
if len(data) % 8 != 0:
data += "0" * (8 - (len(data) % 8))
return bytes(int(data[i:i+8], 2) for i in range(0, len(data), 8))
def unpack_5(data):
data = "".join(f"{i:08b}" for i in data)
if len(data) % 5 != 0:
data += "0" * (5 - (len(data) % 5))
return bytes(int(data[i:i+5], 2) for i in range(0, len(data), 5))
data = "".join(f"{i:08b}" for i in data)
if len(data) % 5 != 0:
data += "0" * (5 - (len(data) % 5))
return bytes(int(data[i:i+5], 2) for i in range(0, len(data), 5))
def to_konami_id(uid):
assert len(uid) == 16, "UID must be 16 bytes"
assert len(uid) == 16, "UID must be 16 bytes"
if uid.upper().startswith("E004"):
card_type = 1
elif uid.upper().startswith("0"):
card_type = 2
else:
raise ValueError("Invalid UID prefix")
if uid.upper().startswith("E004"):
card_type = 1
elif uid.upper().startswith("0"):
card_type = 2
else:
raise ValueError("Invalid UID prefix")
kid = binascii.unhexlify(uid)
assert len(kid) == 8, "ID must be 8 bytes"
kid = binascii.unhexlify(uid)
assert len(kid) == 8, "ID must be 8 bytes"
out = bytearray(unpack_5(enc_des(kid[::-1]))[:13]) + b'\0\0\0'
out = bytearray(unpack_5(enc_des(kid[::-1]))[:13]) + b'\0\0\0'
out[0] ^= card_type
out[13] = 1
for i in range(1, 14):
out[i] ^= out[i - 1]
out[14] = card_type
out[15] = checksum(out)
out[0] ^= card_type
out[13] = 1
for i in range(1, 14):
out[i] ^= out[i - 1]
out[14] = card_type
out[15] = checksum(out)
return "".join(ALPHABET[i] for i in out)
return "".join(ALPHABET[i] for i in out)
def to_uid(konami_id):
if konami_id[14] == "1":
card_type = 1
elif konami_id[14] == "2":
card_type = 2
else:
raise ValueError("Invalid ID")
if konami_id[14] == "1":
card_type = 1
elif konami_id[14] == "2":
card_type = 2
else:
raise ValueError("Invalid ID")
assert len(konami_id) == 16, f"ID must be 16 characters"
assert all(i in ALPHABET for i in konami_id), "ID contains invalid characters"
card = [ALPHABET.index(i) for i in konami_id]
assert card[11] % 2 == card[12] % 2, "Parity check failed"
assert card[13] == card[12] ^ 1, "Card invalid"
assert card[15] == checksum(card), "Checksum failed"
assert len(konami_id) == 16, f"ID must be 16 characters"
assert all(i in ALPHABET for i in konami_id), "ID contains invalid characters"
card = [ALPHABET.index(i) for i in konami_id]
assert card[11] % 2 == card[12] % 2, "Parity check failed"
assert card[13] == card[12] ^ 1, "Card invalid"
assert card[15] == checksum(card), "Checksum failed"
for i in range(13, 0, -1):
card[i] ^= card[i - 1]
for i in range(13, 0, -1):
card[i] ^= card[i - 1]
card[0] ^= card_type
card[0] ^= card_type
card_id = dec_des(pack_5(card[:13])[:8])[::-1]
card_id = binascii.hexlify(card_id).decode().upper()
card_id = dec_des(pack_5(card[:13])[:8])[::-1]
card_id = binascii.hexlify(card_id).decode().upper()
if card_type == 1:
assert card_id[:4] == "E004", "Invalid card type"
elif card_type == 2:
assert card_id[0] == "0", "Invalid card type"
return card_id
if card_type == 1:
assert card_id[:4] == "E004", "Invalid card type"
elif card_type == 2:
assert card_id[0] == "0", "Invalid card type"
return card_id
if __name__ == "__main__":
assert to_konami_id("0000000000000000") == "007TUT8XJNSSPN2P", "To KID failed"
assert to_uid("007TUT8XJNSSPN2P") == "0000000000000000", "From KID failed"
assert to_uid(to_konami_id("000000100200F000")) == "000000100200F000", "Roundtrip failed"
</code></pre>
assert to_konami_id("0000000000000000") == "007TUT8XJNSSPN2P", "To KID failed"
assert to_uid("007TUT8XJNSSPN2P") == "0000000000000000", "From KID failed"
assert to_uid(to_konami_id("000000100200F000")) == "000000100200F000", "Roundtrip failed"
{% endhighlight %}</pre>
</details>
<p>e-Amusement cards use 16 digit IDs. KONAMI IDs are also 16 digits. Are they related? Yes! In fact, KONAMI IDs are
derived from the ID stored on the e-Amusement card.</p>
@ -195,7 +196,7 @@ card[0] ^= card_type</code></pre>
<summary>In <i>most</i> languages?</summary>
<p>Haha well you see we can actually cheat and use string manipulation. Wasteful? Incredibly. Efficient? Not
at all. Quick and easy? Yup!</p>
<pre><code>def pack_5(data):
<pre>{% highlight "python" %}def pack_5(data):
data = "".join(f"{i:05b}" for i in data)
if len(data) % 8 != 0:
data += "0" * (8 - (len(data) % 8))
@ -205,7 +206,7 @@ def unpack_5(data):
data = "".join(f"{i:08b}" for i in data)
if len(data) % 5 != 0:
data += "0" * (5 - (len(data) % 5))
return bytes(int(data[i:i+5], 2) for i in range(0, len(data), 5))</code></pre>
return bytes(int(data[i:i+5], 2) for i in range(0, len(data), 5)){% endhighlight %}</pre>
<p>If your language of choice allows this, and you don't care for efficiency, this can be a great time-saver
towards get something working. Truth be told my local implementation originally used the Bemani method
(it was a line-for-line port, after all), switched to the second method, then I opted for this hacky
@ -272,7 +273,7 @@ card[15] = <a href="#checksum">checksum(card)</a></code></pre>
Either way, my python port didn't do any cleaning up, because we can just use a DES library.</p>
<details>
<summary>Show me that!</summary>
<pre><code>DES_KEYMAP = [
<pre>{% highlight "python" %}DES_KEYMAP = [
[0x02080008, 0x02082000, 0x00002008, 0x00000000, 0x02002000, 0x00080008, 0x02080000, 0x02082008, 0x00000008, 0x02000000, 0x00082000, 0x00002008, 0x00082008, 0x02002008, 0x02000008, 0x02080000, 0x00002000, 0x00082008, 0x00080008, 0x02002000, 0x02082008, 0x02000008, 0x00000000, 0x00082000, 0x02000000, 0x00080000, 0x02002008, 0x02080008, 0x00080000, 0x00002000, 0x02082000, 0x00000008, 0x00080000, 0x00002000, 0x02000008, 0x02082008, 0x00002008, 0x02000000, 0x00000000, 0x00082000, 0x02080008, 0x02002008, 0x02002000, 0x00080008, 0x02082000, 0x00000008, 0x00080008, 0x02002000, 0x02082008, 0x00080000, 0x02080000, 0x02000008, 0x00082000, 0x00002008, 0x02002008, 0x02080000, 0x00000008, 0x02082000, 0x00082008, 0x00000000, 0x02000000, 0x02080008, 0x00002000, 0x00082008],
[0x08000004, 0x00020004, 0x00000000, 0x08020200, 0x00020004, 0x00000200, 0x08000204, 0x00020000, 0x00000204, 0x08020204, 0x00020200, 0x08000000, 0x08000200, 0x08000004, 0x08020000, 0x00020204, 0x00020000, 0x08000204, 0x08020004, 0x00000000, 0x00000200, 0x00000004, 0x08020200, 0x08020004, 0x08020204, 0x08020000, 0x08000000, 0x00000204, 0x00000004, 0x00020200, 0x00020204, 0x08000200, 0x00000204, 0x08000000, 0x08000200, 0x00020204, 0x08020200, 0x00020004, 0x00000000, 0x08000200, 0x08000000, 0x00000200, 0x08020004, 0x00020000, 0x00020004, 0x08020204, 0x00020200, 0x00000004, 0x08020204, 0x00020200, 0x00020000, 0x08000204, 0x08000004, 0x08020000, 0x00020204, 0x00000000, 0x00000200, 0x08000004, 0x08000204, 0x08020200, 0x08020000, 0x00000204, 0x00000004, 0x08020004],
[0x80040100, 0x01000100, 0x80000000, 0x81040100, 0x00000000, 0x01040000, 0x81000100, 0x80040000, 0x01040100, 0x81000000, 0x01000000, 0x80000100, 0x81000000, 0x80040100, 0x00040000, 0x01000000, 0x81040000, 0x00040100, 0x00000100, 0x80000000, 0x00040100, 0x81000100, 0x01040000, 0x00000100, 0x80000100, 0x00000000, 0x80040000, 0x01040100, 0x01000100, 0x81040000, 0x81040100, 0x00040000, 0x81040000, 0x80000100, 0x00040000, 0x81000000, 0x00040100, 0x01000100, 0x80000000, 0x01040000, 0x81000100, 0x00000000, 0x00000100, 0x80040000, 0x00000000, 0x81040000, 0x01040100, 0x00000100, 0x01000000, 0x81040100, 0x80040100, 0x00040000, 0x81040100, 0x80000000, 0x01000100, 0x80040100, 0x80040000, 0x00040100, 0x01040000, 0x81000100, 0x80000100, 0x01000000, 0x81000000, 0x01040100],
@ -461,7 +462,7 @@ def load_key(key):
key_data = bytearray(24)
for i in range(24):
key_data[i] = 2 * key[i % len(key)]
des3_setkey(KEY_DATA, key_data)</code></pre>
des3_setkey(KEY_DATA, key_data){% endhighlight %}</pre>
</details>
</details>
{% endblock %}

View File

@ -78,7 +78,4 @@
</p>
<a href="./transport.html">Next page</a>
<p><small>This site intentionally looks not-great. I don't feel like changing that, and honestly quite like the
aesthetic.</small></p>
{% endblock %}

View File

@ -2,8 +2,8 @@
{% block body %}
<h1>Packet format</h1>
<p>eAmuse uses XML for its application layer payloads*. This XML is either verbatim, or in a custom packed binary
format.<br /><small>*Newer games use JSON, but this page is about XML.</small></p>
<p>e-Amusement uses XML for its application layer payloads. This XML is either verbatim, or in a custom packed binary
format.</p>
<h2 id="xml">The XML format</h2>
@ -12,28 +12,32 @@
have a <code>__count</code> attribute indicating how many items are in the array. Binary blobs additionally have
a <code>__size</code> attribute indicating their length (this is notably not present on strings, however).</p>
<p>It is perhaps simpler to illustrate with an example, so:</p>
<pre><code>&lt;?xml version='1.0' encoding='UTF-8'?&gt;
&lt;call model="KFC:J:A:A:2019020600" srcid="1000" tag="b0312077"&gt;
&lt;eventlog method="write"&gt;
&lt;retrycnt __type="u32" /&gt;
&lt;data&gt;
&lt;eventid __type="str"&gt;G_CARDED&lt;/eventid&gt;
&lt;eventorder __type="s32"&gt;5&lt;/eventorder&gt;
&lt;pcbtime __type="u64"&gt;1639669516779&lt;/pcbtime&gt;
&lt;gamesession __type="s64"&gt;1&lt;/gamesession&gt;
&lt;strdata1 __type="str" /&gt;
&lt;strdata2 __type="str" /&gt;
&lt;numdata1 __type="s64"&gt;1&lt;/numdata1&gt;
&lt;numdata2 __type="s64" /&gt;
&lt;locationid __type="str"&gt;ea&lt;/locationid&gt;
&lt;/data&gt;
&lt;/eventlog&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight 'xml' %}
<?xml version='1.0' encoding='UTF-8'?>
<call model="KFC:J:A:A:2019020600" srcid="1000" tag="b0312077">
<eventlog method="write">
<retrycnt __type="u32" />
<data>
<eventid __type="str">G_CARDED</eventid>
<eventorder __type="s32">5</eventorder>
<pcbtime __type="u64">1639669516779</pcbtime>
<gamesession __type="s64">1</gamesession>
<strdata1 __type="str" />
<strdata2 __type="str" />
<numdata1 __type="s64">1</numdata1>
<numdata2 __type="s64" />
<locationid __type="str">ea</locationid>
</data>
</eventlog>
</call>
{% endhighlight %}</pre>
<p>Arrays are encoded by concatenating every value together, with spaces between them. Data types that have multiple
values, are serialized similarly.</p>
<p>Therefore, an element storing an array of <code>3u8</code> (<code>[(1, 2, 3), (4, 5, 6)]</code>) would look like
this</p>
<pre><code>&lt;demo __type="3u8" __count="2"&gt;1 2 3 4 5 6&lt;/demo&gt;</code></pre>
<pre>{% highlight 'xml' %}
<demo __type="3u8" __count="2">1 2 3 4 5 6</demo>
{% endhighlight %}</pre>
<p>Besides this, this is otherwise a rather standard XML.</p>
<h2 id="binary">Packed binary overview</h2>
@ -182,9 +186,9 @@
</figure>
<p>This is indexed using the following function, which maps the above encoding IDs to 1, 2, 3, 4 and 5
respectively.</p>
<pre><code>char* xml_get_encoding_name(uint encoding_id) {
<pre>{% highlight "c" %}char* xml_get_encoding_name(uint encoding_id) {
return ENCODING_NAME_TABLE[((encoding_id & 0xe0) >> 5) * 4];
}</code></pre>
}{% endhighlight %}</pre>
</details>
<p>While validating <code>~E</code> isn't technically required, it acts as a useful assertion that the packet being
parsed is valid.</p>
@ -839,7 +843,7 @@
<p>While the intuitive way to understand the packing algorithm is via chunks and buckets, a far more efficient
implementation can be made that uses three pointers. Rather than try to explain in words, hopefully this python
implementation should suffice as explanation:
<pre><code>class Packer:
<pre>{% highlight "python" %}class Packer:
def __init__(self, offset=0):
self._word_cursor = offset
self._short_cursor = offset
@ -873,7 +877,7 @@
def notify_skipped(self, no_bytes):
for _ in range(math.ceil(no_bytes / 4)):
self.request_allocation(4)</code></pre>
self.request_allocation(4){% endhighlight %}</pre>
</p>
</details>

View File

@ -3,11 +3,11 @@
<h1><code>apsmanager</code></h1>
<h2 id="getstat"><code>apsmanager.getstat</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;apsmanager method="getstat" model*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<apsmanager method="getstat" model*="" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;apsmanager status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<apsmanager status="??status" />
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -46,9 +46,9 @@
<p>Request information about a card that has been inserted or touched against a reader.</p>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="inquire" cardid="" cardtype="" update="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<cardmng method="inquire" cardid="" cardtype="" update="" model*="" />
</call>{% endhighlight %}</pre>
<table>
<tr>
<td><code>update</code></td>
@ -56,9 +56,9 @@
</tr>
</table>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<cardmng status="??status" refid="" dataid="" pcode="" newflag="" binded="" expired="" ecflag="" useridflag="" extidflag="" lastupdate="" />
</response>{% endhighlight %}</pre>
<p>To handle this request, we first must lookup if this <code>cardid</code> has ever been seen by our servers
before. If not, we abort with a <code>112</code> status. Otherwise, we proceeed to check if this card has been
seen for this specific game. If we have never seen this card used on this game, it is possible this card was
@ -92,9 +92,9 @@
<h2 id="getrefid"><code>cardmng.getrefid</code></h2>
<p>Register a new card to this server.</p>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="getrefid" cardtype="" cardid=" newflag="" passwd="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<cardmng method="getrefid" cardtype="" cardid=" newflag="" passwd="" model*="" />
</call>{% endhighlight %}</pre>
<table>
<tr>
<td><code>newflag</code></td>
@ -107,9 +107,9 @@
</tr>
</table>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" refid="" dataid="" pcode="" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<cardmng status="??status" refid="" dataid="" pcode="" />
</response>{% endhighlight %}</pre>
<table>
<tr>
<td><code>refid</code></td>
@ -128,32 +128,32 @@
<h2 id="bindmodel"><code>cardmng.bindmodel</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="bindmodel" refid="" newflag="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<cardmng method="bindmodel" refid="" newflag="" model*="" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" dataid="" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<cardmng status="??status" dataid="" />
</response>{% endhighlight %}</pre>
<h2 id="bindcard"><code>cardmng.bindcard</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="bindcard" cardtype="" newid="" refid="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<cardmng method="bindcard" cardtype="" newid="" refid="" model*="" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<cardmng status="??status" />
</response>{% endhighlight %}</pre>
<h2 id="authpass"><code>cardmng.authpass</code></h2>
<p>Test a pin for a card. This request notably uses the <code>refid</code>, so required a
<code>cardmng.inquire</code> call to be made first.
</p>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="authpass" refid="" pass="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<cardmng method="authpass" refid="" pass="" model*="" />
</call>{% endhighlight %}</pre>
<table>
<tr>
<td><code>refid</code></td>
@ -166,47 +166,47 @@
</tr>
</table>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<cardmng status="??status" />
</response>{% endhighlight %}</pre>
<p>If the pin is valid, status should be <code>0</code>. Otherwise, <code>116</code>.</p>
<h2 id="getkeepspan"><code>cardmng.getkeepspan</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="getkeepspan" model*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<cardmng method="getkeepspan" model*="" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" keepspan="" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<cardmng status="??status" keepspan="" />
</response>{% endhighlight %}</pre>
<h2 id="getkeepremain"><code>cardmng.getkeepremain</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="getkeepremain" refid="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<cardmng method="getkeepremain" refid="" model*="" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;cardmng status="<i>status</i>" keepremain="" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<cardmng status="??status" keepremain="" />
</response>{% endhighlight %}</pre>
<h2 id="getdatalist"><code>cardmng.getdatalist</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;cardmng method="getdatalist" refid="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<cardmng method="getdatalist" refid="" model*="" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<cardmng status="??status">
<item[]>
<mcode __type="str" />
<dataid __type="str" />
<regtime __type="str" />
<lasttime __type="str" />
<exptime __type="str" />
<expflag __type="u8" />
</item[]>
</cardmng>
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,32 +3,32 @@
<h1><code>dlstatus</code></h1>
<h2 id="done"><code>dlstatus.done</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<dlstatus method="done">
<url>
<param __type="str" />
</url>
<name __type="str" />
<size __type="s32" />
</dlstatus>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<dlstatus status="??status">
<progress __type="s32" />
</dlstatus>
</response>{% endhighlight %}</pre>
<h2 id="progress"><code>dlstatus.progress</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<dlstatus method="progress" />
<progress __type="s32" />
</dlstatus>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;dlstatus status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<dlstatus status="??status" />
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,178 +3,178 @@
<h1><code>eacoin</code></h1>
<h2 id="checkin"><code>eacoin.checkin</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<eacoin method="checkin">
<cardtype __type="str" />
<cardid __type="str" />
<passwd __type="str" />
<ectype __type="str" />
</eacoin>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<eacoin status="??status">
<sequence __type="s16" />
<acstatus __type="u8" />
<acid __type="str" />
<acname __type="str" />
<balance __type="s32" />
<sessid __type="str" />
</eacoin>
</response>{% endhighlight %}</pre>
<h2 id="checkout"><code>eacoin.checkout</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<eacoin method="checkout">
<sessid __type="str" />
</eacoin>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<eacoin status="??status" />
</response>{% endhighlight %}</pre>
<h2 id="consume"><code>eacoin.consume</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<eacoin method="consume" esid="">
<sessid __type="str" />
<sequence __type="s16" />
<payment __type="s32" />
<service __type="s16" />
<itemtype __type="str" />
<detail __type="str" />
</eacoin>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<eacoin status="??status">
<acstatus __type="u8" />
<autocharge __type="u8" />
<balance __type="s32" />
</eacoin>
</response>{% endhighlight %}</pre>
<h2 id="getbalance"><code>eacoin.getbalance</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<eacoin method="getbalance">
<sessid __type="str" />
</eacoin>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<eacoin status="??status">
<acstatus __type="u8" />
<balance __type="s32" />
</eacoin>
</response>{% endhighlight %}</pre>
<h2 id="getecstatus"><code>eacoin.getecstatus</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;eacoin method="getecstatus" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<eacoin method="getecstatus" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<eacoin status="??status">
<ectype __type="str" />
<ecstatus __type="u8" />
</eacoin>
</response>{% endhighlight %}</pre>
<h2 id="touch"><code>eacoin.touch</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<eacoin method="touch">
<sessid __type="str" />
</eacoin>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<eacoin status="??status" />
</response>{% endhighlight %}</pre>
<h2 id="opchpass"><code>eacoin.opchpass</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<eacoin method="opchpass">
<passwd __type="str" />
<newpasswd __type="str" />
</eacoin>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<eacoin status="??status" />
</response>{% endhighlight %}</pre>
<h2 id="opcheckin"><code>eacoin.opcheckin</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<eacoin method="opcheckin">
<passwd __type="str" />
</eacoin>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<eacoin status="??status">
<sessid __type="str" />
</eacoin>
</response>{% endhighlight %}</pre>
<h2 id="opcheckout"><code>eacoin.opcheckout</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<eacoin method="opcheckout">
<sessid __type="str" />
</eacoin>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;eacoin status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<eacoin status="??status" />
</response>{% endhighlight %}</pre>
<h2 id="getlog"><code>eacoin.getlog</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<eacoin method="getlog">
<sessid __type="str" />
<logtype __type="str" />
<ectype __type="str" />
<target __type="str" />
<perpage __type="s16" />
<page __type="s16" />
<sesstype __type="str" />
</eacoin>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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;
<pre>{% highlight "cxml" %}<response>
<eacoin status="??status">
<processing __type="u8" />
<topic>
<sumdate __type="str" />
<sumfrom __type="str" />
<sumto __type="str" />
&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>
<today __type="s32" />
<average __type="s32" />
<total __type="s32" />
</topic>
<summary>
<items __type="s32" />
</summary>
<history>
<item[]>
<date __type="str" />
<consume __type="s32" />
<service __type="s32" />
<cardtype __type="str" />
<cardno __type="str" />
<title __type="str" />
<systemid __type="str" />
</item[]>
</history>
</eacoin>
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,15 +3,15 @@
<h1><code>esign</code></h1>
<h2 id="request"><code>esign.request</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;esign method="request"&gt;
<pre>{% highlight "cxml" %}<call ...>
<esign method="request">
<i>placeholder</i>
&lt;/esign&gt;
&lt;/call&gt;</code></pre>
</esign>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;esign status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<esign status="??status">
<i>placeholder</i>
&lt;/esign&gt;
&lt;/response&gt;</code></pre>
</esign>
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,28 +3,28 @@
<h1><code>esoc</code></h1>
<h2 id="read"><code>esoc.read</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;esoc method="read"&gt;
&lt;senddata /&gt;
&lt;/esoc&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<esoc method="read">
<senddata />
</esoc>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;esoc status="<i>status</i>"&gt;
&lt;recvdata /&gt;
&lt;/esoc&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<esoc status="??status">
<recvdata />
</esoc>
</response>{% endhighlight %}</pre>
<p>Go figure.</p>
<h2 id="write"><code>esoc.write</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;esoc method="write"&gt;
&lt;senddata /&gt;
&lt;/esoc&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<esoc method="write">
<senddata />
</esoc>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;esoc status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<esoc status="??status" />
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,22 +3,22 @@
<h1><code>eventlog</code></h1>
<h2 id="write"><code>eventlog.write</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<eventlog method="write">
<retrycnt __type="u32" />
<data>
<eventid __type="str" />
<eventorder __type="s32" />
<pcbtime __type="u64" />
<gamesession __type="s64" />
<strdata1 __type="str" />
<strdata2 __type="str" />
<numdata1 __type="s64" />
<numdata2 __type="s64" />
<locationid __type="str" />
</data>
</eventlog>
</call>{% endhighlight %}</pre>
<p>Event ID list:</p>
<ul>
<li><code>G_GAMED</code></li>
@ -27,12 +27,12 @@
<li><code>T_OTDEMO</code></li>
</ul>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<eventlog status="??status">
<gamesession __type="s64" />
<logsendflg __type="s32" />
<logerrlevel __type="s32" />
<evtidnosendflg __type="s32" />
</eventlog>
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,66 +3,66 @@
<h1><code>facility</code></h1>
<h2 id="get"><code>facility.get</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;facility method="get" privateip*="" encoding*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<facility method="get" privateip*="" encoding*="" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<facility expire="" status="??status">
<calendar*>
<year __type="s16" />
<holiday __type="s16" />
</calendar>
<location>
<id __type="str" />
<country __type="str" />
<region __type="str" />
<name __type="str" />
<type __type="u8" />
<countryname __type="str" />
<countryjname __type="str" />
<regionname __type="str" />
<regionjname __type="str" />
<customercode __type="str" />
<companycode __type="str" />
<latitude __type="s32" />
<longitude __type="s32" />
<accuracy __type="u8" />
</location>
<line>
<id __type="str" />
<class __type="u8" />
</line>
<portfw>
<globalip __type="ip4" />
<globalport __type="s16" />
<privateport __type="s16" />
</portfw>
<public>
<flag __type="u8" />1</ flag>
<name __type="str" />
<latitude __type="str">0<latitude>
<longitude __type="str">0<longitude>
</public>
<share>
<eapass*>
<valid __type="?" />
</eapass>
<eacoin>
<notchamount __type="s32" />
<notchcount __type="s32" />
<supplylimit __type="s32">100000<supplylimit>
</eacoin>
<url>
<eapass __type="str">www.ea-pass.konami.net<eapass>
<arcadefan __type="str">www.konami.jp/am<arcadefan>
<konaminetdx __type="str">http://am.573.jp<konaminetdx>
<konamiid __type="str">http://id.konami.jp<konamiid>
<eagate __type="str">http://eagate.573.jp<eagate>
</url>
</share>
</facility>
</response>{% endhighlight %}</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>

View File

@ -3,365 +3,365 @@
<h1 id="game"><code>game</code></h1>
<h2 id="sample"><code>game.sv4_sample</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_sample"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_sample">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="new"><code>game.sv4_new</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_new"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_new">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="load"><code>game.sv4_load</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_load"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_load">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="load_m"><code>game.sv4_load_m</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_load_m"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_load_m">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="save"><code>game.sv4_save</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_save">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="save_m"><code>game.sv4_save_m</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save_m"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_save_m">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="common"><code>game.sv4_common</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_common"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_common">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="shop"><code>game.sv4_shop</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_shop"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_shop">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="hiscore"><code>game.sv4_hiscore</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_hiscore"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_hiscore">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="buy"><code>game.sv4_buy</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_buy"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_buy">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="exception"><code>game.sv4_exception</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_exception"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_exception">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="entry_s"><code>game.sv4_entry_s</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_entry_s"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_entry_s">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="entry_e"><code>game.sv4_entry_e</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_entry_e"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_entry_e">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="frozen"><code>game.sv4_frozen</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_frozen"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_frozen">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="lounge"><code>game.sv4_lounge</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_lounge"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_lounge">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="save_e"><code>game.sv4_save_e</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save_e"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_save_e">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="save_pb"><code>game.sv4_save_pb</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save_pb"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_save_pb">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="save_c"><code>game.sv4_save_c</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save_c"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_save_c">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="play_s"><code>game.sv4_play_s</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_play_s"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_play_s">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="play_e"><code>game.sv4_play_e</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_play_e"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_play_e">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="serial"><code>game.sv4_serial</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_serial"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_serial">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="save_fi"><code>game.sv4_save_fi</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save_fi"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_save_fi">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="print"><code>game.sv4_print</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_print"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_print">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="print_h"><code>game.sv4_print_h</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_print_h"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_print_h">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="load_r"><code>game.sv4_load_r</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_load_r"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_load_r">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
<h2 id="save_campaign"><code>game.sv4_save_campaign</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;game method="sv4_save_campaign"&gt;
<pre>{% highlight "cxml" %}<call ...>
<game method="sv4_save_campaign">
<i>placeholder</i>
&lt;/game&gt;
&lt;/call&gt;</code></pre>
</game>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;game status="<i>status</i>"&gt;
<pre>{% highlight "cxml" %}<response>
<game status="??status">
<i>placeholder</i>
&lt;/game&gt;
&lt;/response&gt;</code></pre>
</game>
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,81 +3,81 @@
<h1><code>matching</code></h1>
<h2 id="request"><code>matching.request</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<matching method="request">
<info>
<version __type="s32" />
</info>
<data>
<matchtyp __type="s32" />
<matchgrp __type="s32" />
<matchflg __type="s32" />
<waituser __type="s32" />
<waittime __type="s32" />
<joinip __type="str" />
<localip __type="str" />
<localport __type="s32" />
<dataid __type="str" />
<gamekind __type="str" />
<locationid __type="str" />
<lineid __type="str" />
<locationcountry __type="str" />
<locationregion __type="str" />
</data>
</matching>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<matching status="??status">
<hostid __type="s64" />
<result __type="s32" />
<hostip_g __type="str" />
<hostip_l __type="str" />
<hostport_l __type="s32" />
<hostport_g __type="s32" />
</matching>
</response>{% endhighlight %}</pre>
<h2 id="wait"><code>matching.wait</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<matching method="wait">
<info>
<version __type="s32" />
</info>
<data>
<hostid __type="s64" />
<locationid __type="str" />
<lineid __type="str" />
</data>
</matching>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<matching status="??status">
<result __type="s32" />
<prwtime __type="s32" />
</matching>
</response>{% endhighlight %}</pre>
<h2 id="finish"><code>matching.finish</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<matching method="finish">
<info>
<version __type="s32" />
</info>
<data>
<hostid __type="s64" />
<locationid __type="str" />
<lineid __type="str" />
</data>
</matching>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<matching status="??status">
<result __type="s32" />
</matching>
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,13 +3,13 @@
<h1><code>message</code></h1>
<h2 id="get"><code>message.get</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;message method="get" model*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<message method="get" model*="" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<message expire="" status="??status">
<item[] name="" start="" end="" data="" />
</message>
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,25 +3,25 @@
<h1><code>package</code></h1>
<h2 id="list"><code>package.list</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;package method="list" pkgtype="<i>pkgtype</i>" model*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<package method="list" pkgtype="??pkgtype" model*="" />
</call>{% endhighlight %}</pre>
<p><code>all</code> is the only currently observed value for <code>pkgtype</code></p>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;package status="<i>status</i>"&gt;
&lt;item[] url="" /&gt;
&lt;/package&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<package status="??status">
<item[] url="" />
</package>
</response>{% endhighlight %}</pre>
<p>A list of all packages available for download.</p>
<h2 id="intend"><code>package.intend</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;package method="intend" url="" model*="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<package method="intend" url="" model*="" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;package status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<package status="??status" />
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,19 +3,19 @@
<h1><code>pcbevent</code></h1>
<h2 id="put"><code>pcbevent.put</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<pcbevent method="put">
<time __type="time" />
<seq __type="u32" />
<item[]>
<name __type="str" />
<value __type="s32" />
<time __type="time" />
</item[]>
</pcbevent>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;pcbevent status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<pcbevent status="??status" />
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,17 +3,17 @@
<h1><code>pcbtracker</code></h1>
<h2 id="alive"><code>pcbtracker.alive</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;pcbtracker method="alive" model*="" hardid="" softid="" accountid="" agree="" ecflag="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<pcbtracker method="alive" model*="" hardid="" softid="" accountid="" agree="" ecflag="" />
</call>{% endhighlight %}</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>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;pcbtracker status="" time="" limit="" ecenable="" eclimit="" &gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<pcbtracker status="" time="" limit="" ecenable="" eclimit="" >
</response>{% endhighlight %}</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>
{% endblock %}

View File

@ -3,134 +3,134 @@
<h1><code>playerdata</code></h1>
<h2 id="usergamedata_send"><code>playerdata.usergamedata_send</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<playerdata method="usergamedata_send">
<retrycnt __type="u32" />
<info>
<version __type="u32" />
</info>
<data>
<refid __type="str" />
<dataid __type="str" />
<gamekind __type="str" />
<datanum __type="u32" />
<record>
<d[] __type="str" />
</record>
</data>
</playerdata>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<playerdata status="??status">
<result __type="s32" />
</playerdata>
</response>{% endhighlight %}</pre>
<h2 id="usergamedata_recv"><code>playerdata.usergamedata_recv</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<playerdata method="usergamedata_recv">
<info>
<version __type="u32" />
</info>
<data>
<refid __type="str">
<dataid __type="str">
<gamekind __type="str">
<recv_num __type="u32">
</data>
</playerdata>
</call>{% endhighlight %}</pre>
<pre>{% highlight "cxml" %}<call ...>
<playerdata method="usergamedata_recv">
<data>
<refid __type="str">
<dataid __type="str">
<gamekind __type="str">
<recv_csv __type="str">
</data>
</playerdata>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<playerdata status="??status">
<player>
<result>
<record_num __type="u32" />
</result>
<record>
<d[]>
<bin1 __type="str" />
</d[]>
</record>
</player>
</playerdata>
</response>{% endhighlight %}</pre>
<h2 id="usergamedata_inheritance"><code>playerdata.usergamedata_inheritance</code></h2>
<p>See: <code>playerdata.usergamedata_recv</code></p>
<h2 id="usergamedata_condrecv"><code>playerdata.usergamedata_condrecv</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<playerdata method="usergamedata_condrecv">
<info>
<version __type="s32" />
</info>
<data>
<dataid __type="str" />
<gamekind __type="str" />
<vkey __type="str" />
<conditionkey __type="str" />
<columns_bit __type="u64" />
<conditions_num __type="u32" />
<where __type="str" />
<order_num __type="u32" />
<order __type="str" />
<recv_num __type="u32" />
</info>
</playerdata>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<playerdata status="??status">
<player>
<result __type="s32" />
<record_num __type="s32" />
<record>
<d[]>
<bin1 __type="str" />
</d[]>
<record/>
</player>
</playerdata>
</response>{% endhighlight %}</pre>
<h2 id="usergamedata_scorerank"><code>playerdata.usergamedata_scorerank</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<playerdata method="usergamedata_scorerank">
<info>
<version __type="s32" />
</info>
<data>
<dataid __type="str" />
<gamekind __type="str" />
<ckey __type="str" />
<conditionkey __type="str" />
<score __type="str" />
</data>
</playerdata>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<playerdata status="??status">
<rank>
<result __type="s32" />
<rank __type="s32" />
<updatetime __type="u64" />
</rank>
</playerdata>
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,19 +3,19 @@
<h1><code>services</code></h1>
<h2 id="get"><code>services.get</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<services method="get" model*="" >
<info>
<AVS2 __type="str"><i>AVS2 version</i></AVS2>
</info>
</services>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<services expire="" method="get" mode="" status="??status">
<item[] name="??service" url="??url" />
</services>
</response>{% endhighlight %}</pre>
<p>Known services are:</p>
<ul>
<li><code>ntp</code></li>

View File

@ -3,72 +3,72 @@
<h1><code>sidmgr</code></h1>
<h2 id="create"><code>sidmgr.create</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<sidmgr method="create">
<cardtype __type="str" />
<cardid __type="str" />
<cardgid __type="str" />
<steal __type="u8" />
</sidmgr>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<sidmgr status="??status">
<state __type="u32" />
<e_count __type="u8" />
<last __type="time" />
<locked __type="time" />
<sid __type="str" />
<cardid_status __type="u8" />
<refid __type="str" />
</sidmgr>
</response>{% endhighlight %}</pre>
<h2 id="open"><code>sidmgr.open</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<sidmgr method="open" sid="" >
<pass __type="str" />
</sidmgr>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<sidmgr status="??status">
<state __type="u32" />
<refid __type="str" />
<locked __type="time" />
</sidmgr>
</response>{% endhighlight %}</pre>
<h2 id="touch"><code>sidmgr.touch</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;sidmgr method="touch" sid="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<sidmgr method="touch" sid="" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;sidmgr status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<sidmgr status="??status" />
</response>{% endhighlight %}</pre>
<h2 id="branch"><code>sidmgr.branch</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;sidmgr method="branch" sid="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<sidmgr method="branch" sid="" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;sidmgr status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<sidmgr status="??status" />
</response>{% endhighlight %}</pre>
<h2 id="close"><code>sidmgr.close</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<sidmgr method="close" sid="" />
<cause __type="u32" />
</sidmgr>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;sidmgr status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<sidmgr status="??status" />
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,104 +3,104 @@
<h1><code>system</code></h1>
<h2 id="getmaster"><code>system.getmaster</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<system method="getmaster">
<data>
<gamekind __type="str" />
<datatype __type="str" />
<datakey __type="str" />
</data>
</system>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<system status="??status">
<result __type="s32" />
<strdata1 __type="str" />
<strdata2 __type="str" />
<updatedate __type="u64" />
</system>
</response>{% endhighlight %}</pre>
<h2 id="getlocationiplist"><code>system.getlocationiplist</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<system method="getlocationiplist">
<data>
<locationid __type="str" />
<lineid __type="str" />
</data>
</system>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<system status="??status">
<result __type="s32" />
<iplist>
<record_num __type="s32" />
<record[]>
<localconn __type="str" />
</record[]>
</iplist>
</system>
</response>{% endhighlight %}</pre>
<h2 id="xrpcproxy"><code>system.xrpcproxy</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<system method="xrpcproxy">
<info>
<version __type="s32" />
</info>
<data>
<hostid __type="s64" />
<locationid __type="str" />
<lineid __type="str" />
</data>
</system>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<system status="??status">
<result __type="s32" />
<pwrtime __type="s32" />
<matchlist>
<record_num __type="u32" />
<record[]>
<pcbid __type="str" />
<statusflg __type="str" />
<matchgrp __type="s32" />
<hostid __type="s64" />
<jointime __type="u64" />
<connip_g __type="str" />
<connport_g __type="s32" />
<connip_l __type="str" />
<connport_l __type="s32" />
</record[]>
</matchlist>
</system>
</response>{% endhighlight %}</pre>
<h2 id="convcardnumber"><code>system.convcardnumber</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<system method="convcardnumber">
<info>
<version __type="s32" />
</info>
<data>
<card_id __type="str" />
<card_type __type="s32" />
</data>
</system>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<system status="??status">
<result __type="s32" />
<data>
<card_number __type="str" />
</data>
</system>
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,18 +3,18 @@
<h1><code>traceroute</code></h1>
<h2 id="send"><code>traceroute.send</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<traceroute proto="" method="send">
<hop[]>
<valid __type="bool">
<addr __type="ip4">
<usec __type="u64">
</hop[]>
</traceroute>
</call>{% endhighlight %}</pre>
<p><code>hop</code> repeats for every hop (unsurprisingly)</p>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;traceroute status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<traceroute status="??status" />
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -3,26 +3,26 @@
<h1><code>userdata</code></h1>
<h2 id="read"><code>userdata.read</code></h2>
<h3>Request:</h3>
<pre><code>&lt;call <i>...</i>&gt;
&lt;userdata method="read" card*="" model*="" label="" /&gt;
&lt;/call&gt;</code></pre>
<pre>{% highlight "cxml" %}<call ...>
<userdata method="read" card*="" model*="" label="" />
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<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>
<pre>{% highlight "cxml" %}<response>
<userdata status="??status" time="">
<b[] __type="" />
</userdata>
</response>{% endhighlight %}</pre>
<p><code>__type</code> here can be either <code>bin</code> or <code>str</code></p>
<h2 id="write"><code>userdata.write</code></h2>
<h3>Request:</h3>
<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>
<pre>{% highlight "cxml" %}<call ...>
<userdata method="write" card="" time="" model*="" label*="" >
<b[] __type="str" />
</userdata>
</call>{% endhighlight %}</pre>
<h3>Response:</h3>
<pre><code>&lt;response&gt;
&lt;userdata status="<i>status</i>" /&gt;
&lt;/response&gt;</code></pre>
<pre>{% highlight "cxml" %}<response>
<userdata status="??status" />
</response>{% endhighlight %}</pre>
{% endblock %}

View File

@ -23,17 +23,17 @@
</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>
<pre>{% highlight "cxml" %}<call model="??model" srcid="??srcid" tag="??tag">
<??module method="??method" ...attributes>
...children
</??module>
</call>{% endhighlight %}</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>
<pre>{% highlight "cxml" %}<response>
<??module status="??status" ...attributes>
...children
</??module>
</response>{% endhighlight %}</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
@ -103,149 +103,7 @@
<h2>Possible XRPC requests</h2>
<ul>
<li><code><a href="proto/eventlog.html">eventlog.%s</a></code></li>
<ul>
<li><code><a href="proto/eventlog.html#eventlog.write">eventlog.write</a></code></li>
</ul>
<li><code><a href="proto/playerdata.html">playerdata.%s</a></code></li>
<ul>
<li><code><a href="proto/playerdata.html#usergamedata_send">playerdata.usergamedata_send</a></code></li>
<li><code><a href="proto/playerdata.html#usergamedata_recv">playerdata.usergamedata_recv</a></code></li>
<li><code><a href="proto/playerdata.html#usergamedata_inheritance">playerdata.usergamedata_inheritance</a></code>
</li>
<li><code><a href="proto/playerdata.html#usergamedata_condrecv">playerdata.usergamedata_condrecv</a></code>
</li>
<li><code><a href="proto/playerdata.html#usergamedata_scorerank">playerdata.usergamedata_scorerank</a></code>
</li>
</ul>
<li><code><a href="proto/matching.html">matching.%s</a></code></li>
<ul>
<li><code><a href="proto/matching.html#request">matching.request</a></code></li>
<li><code><a href="proto/matching.html#wait">matching.wait</a></code></li>
<li><code><a href="proto/matching.html#finish">matching.finish</a></code></li>
</ul>
<li><code><a href="proto/system.html">system.%s</a></code></li>
<ul>
<li><code><a href="proto/system.html#getmaster">system.getmaster</a></code></li>
<li><code><a href="proto/system.html#getlocationiplist">system.getlocationiplist</a></code></li>
<li><code><a href="proto/system.html#xrpcproxy">system.xrpcproxy</a></code></li>
<li><code><a href="proto/system.html#convcardnumber">system.convcardnumber</a></code></li>
</ul>
<li><code><a href="proto/esoc.html">esoc.%s</a></code></li>
<ul>
<li><code><a href="proto/esoc.html#read">esoc.read</a></code></li>
<li><code><a href="proto/esoc.html#write">esoc.write</a></code></li>
</ul>
<li><code><a href="proto/cardmng.html">cardmng.%s</a></code></li>
<ul>
<li><code><a href="proto/cardmng.html#inquire">cardmng.inquire</a></code></li>
<li><code><a href="proto/cardmng.html#getrefid">cardmng.getrefid</a></code></li>
<li><code><a href="proto/cardmng.html#bindmodel">cardmng.bindmodel</a></code></li>
<li><code><a href="proto/cardmng.html#bindcard">cardmng.bindcard</a></code></li>
<li><code><a href="proto/cardmng.html#authpass">cardmng.authpass</a></code></li>
<li><code><a href="proto/cardmng.html#getkeepspan">cardmng.getkeepspan</a></code></li>
<li><code><a href="proto/cardmng.html#getkeepremain">cardmng.getkeepremain</a></code></li>
<li><code><a href="proto/cardmng.html#getdatalist">cardmng.getdatalist</a></code></li>
</ul>
<li><code><a href="proto/esign.html">esign.%s</a></code></li>
<ul>
<li><code><a href="proto/esign.html#request">esign.request</a></code></li>
</ul>
<li><code><a href="proto/package.html">package.%s</a></code></li>
<ul>
<li><code><a href="proto/package.html#list">package.list</a></code></li>
<li><code><a href="proto/package.html#intend">package.intend</a></code></li>
</ul>
<li><code><a href="proto/userdata.html">userdata.%s</a></code></li>
<ul>
<li><code><a href="proto/userdata.html#read">userdata.read</a></code></li>
<li><code><a href="proto/userdata.html#write">userdata.write</a></code></li>
</ul>
<li><code><a href="proto/services.html">services.%s</a></code></li>
<ul>
<li><code><a href="proto/services.html#get">services.get</a></code></li>
</ul>
<li><code><a href="proto/pcbtracker.html">pcbtracker.%s</a></code></li>
<ul>
<li><code><a href="proto/pcbtracker.html#alive">pcbtracker.alive</a></code></li>
</ul>
<li><code><a href="proto/pcbevent.html">pcbevent.%s</a></code></li>
<ul>
<li><code><a href="proto/pcbevent.html#put">pcbevent.put</a></code></li>
</ul>
<li><code><a href="proto/message.html">message.%s</a></code></li>
<ul>
<li><code><a href="proto/message.html#get">message.get</a></code></li>
</ul>
<li><code><a href="proto/facility.html">facility.%s</a></code></li>
<ul>
<li><code><a href="proto/facility.html#get">facility.get</a></code></li>
</ul>
<li><code><a href="proto/apsmanager.html">apsmanager.%s</a></code></li>
<ul>
<li><code><a href="proto/apsmanager.html#getstat">apsmanager.getstat</a></code></li>
</ul>
<li><code><a href="proto/sidmgr.html">sidmgr.%s</a></code></li>
<ul>
<li><code><a href="proto/sidmgr.html#create">sidmgr.create</a></code></li>
<li><code><a href="proto/sidmgr.html#open">sidmgr.open</a></code></li>
<li><code><a href="proto/sidmgr.html#touch">sidmgr.touch</a></code></li>
<li><code><a href="proto/sidmgr.html#branch">sidmgr.branch</a></code></li>
<li><code><a href="proto/sidmgr.html#close">sidmgr.close</a></code></li>
</ul>
<li><code><a href="proto/dlstatus.html">dlstatus.%s</a></code></li>
<ul>
<li><code><a href="proto/dlstatus.html#done">dlstatus.done</a></code></li>
<li><code><a href="proto/dlstatus.html#progress">dlstatus.progress</a></code></li>
</ul>
<li><code><a href="proto/eacoin.html">eacoin.%s</a></code></li>
<ul>
<li><code><a href="proto/eacoin.html#checkin">eacoin.checkin</a></code></li>
<li><code><a href="proto/eacoin.html#checkout">eacoin.checkout</a></code></li>
<li><code><a href="proto/eacoin.html#consume">eacoin.consume</a></code></li>
<li><code><a href="proto/eacoin.html#getbalance">eacoin.getbalance</a></code></li>
<li><code><a href="proto/eacoin.html#getecstatus">eacoin.getecstatus</a></code></li>
<li><code><a href="proto/eacoin.html#touch">eacoin.touch</a></code></li>
<li><code><a href="proto/eacoin.html#opchpass">eacoin.opchpass</a></code></li>
<li><code><a href="proto/eacoin.html#opcheckin">eacoin.opcheckin</a></code></li>
<li><code><a href="proto/eacoin.html#opcheckout">eacoin.opcheckout</a></code></li>
<li><code><a href="proto/eacoin.html#getlog">eacoin.getlog</a></code></li>
</ul>
<li><code><a href="proto/traceroute.html">traceroute.%s</a></code></li>
<ul>
<li><code><a href="proto/traceroute.html#send">traceroute.send</a></code></li>
</ul>
<li><code><a href="proto/game/sv4.html">game.%s</a></code></li>
<ul>
<li><code><a href="proto/game/sv4.html#sample">game.sv4_sample</a></code></li>
<li><code><a href="proto/game/sv4.html#new">game.sv4_new</a></code></li>
<li><code><a href="proto/game/sv4.html#load">game.sv4_load</a></code></li>
<li><code><a href="proto/game/sv4.html#load_m">game.sv4_load_m</a></code></li>
<li><code><a href="proto/game/sv4.html#save">game.sv4_save</a></code></li>
<li><code><a href="proto/game/sv4.html#save_m">game.sv4_save_m</a></code></li>
<li><code><a href="proto/game/sv4.html#common">game.sv4_common</a></code></li>
<li><code><a href="proto/game/sv4.html#shop">game.sv4_shop</a></code></li>
<li><code><a href="proto/game/sv4.html#hiscore">game.sv4_hiscore</a></code></li>
<li><code><a href="proto/game/sv4.html#buy">game.sv4_buy</a></code></li>
<li><code><a href="proto/game/sv4.html#exception">game.sv4_exception</a></code></li>
<li><code><a href="proto/game/sv4.html#entry_s">game.sv4_entry_s</a></code></li>
<li><code><a href="proto/game/sv4.html#entry_e">game.sv4_entry_e</a></code></li>
<li><code><a href="proto/game/sv4.html#frozen">game.sv4_frozen</a></code></li>
<li><code><a href="proto/game/sv4.html#lounge">game.sv4_lounge</a></code></li>
<li><code><a href="proto/game/sv4.html#save_e">game.sv4_save_e</a></code></li>
<li><code><a href="proto/game/sv4.html#save_pb">game.sv4_save_pb</a></code></li>
<li><code><a href="proto/game/sv4.html#save_c">game.sv4_save_c</a></code></li>
<li><code><a href="proto/game/sv4.html#play_s">game.sv4_play_s</a></code></li>
<li><code><a href="proto/game/sv4.html#play_e">game.sv4_play_e</a></code></li>
<li><code><a href="proto/game/sv4.html#serial">game.sv4_serial</a></code></li>
<li><code><a href="proto/game/sv4.html#save_fi">game.sv4_save_fi</a></code></li>
<li><code><a href="proto/game/sv4.html#print">game.sv4_print</a></code></li>
<li><code><a href="proto/game/sv4.html#print_h">game.sv4_print_h</a></code></li>
<li><code><a href="proto/game/sv4.html#load_r">game.sv4_load_r</a></code></li>
<li><code><a href="proto/game/sv4.html#save_campaign">game.sv4_save_campaign</a></code></li>
</ul>
</ul>
{{ generate_xrpc_list()|safe }}
<b>Totally undocumented services (based on <code>services.get</code>):</b>
<ul>

86
xml_lexer.py Normal file
View File

@ -0,0 +1,86 @@
from pygments.lexer import RegexLexer
from pygments.token import Text, Comment, Operator, Name, String
from pygments.lexers import _lexer_cache
from pygments.lexers._mapping import LEXERS
def italic_attr(lexer, m):
yield m.start(), String, '"'
yield m.start() + 2, Comment, m.group()[3:-1]
yield m.end() - 1, String, '"'
def italic_generic(lexer, m):
yield m.start(), Comment, m.group()
def italic_tag(lexer, m):
yield m.start(), Name.Tag, "<"
name = m.group()[3:]
if name.endswith(">"):
yield m.start() + 1, Comment, name[:-1]
yield m.end() - 1, Name.Tag, ">"
else:
yield m.start() + 1, Comment, name
def italic_tag_close(lexer, m):
yield m.start(), Name.Tag, "</"
yield m.start() + 4, Comment, m.group()[4:-1]
yield m.end() - 1, Name.Tag, ">"
def repeat_tag_close(lexer, m):
before, _, after = m.group().partition("[]")
yield m.start(), Name.Tag, before
yield m.start() + len(before), Operator, "[]"
yield m.start() + len(before) + 2, Name.Tag, after
def italic_attr_name(lexer, m):
name, _, after = m.group().partition("*")
yield m.start(), Name.Attribute, name
yield m.start() + len(name), Operator, "*"
yield m.start() + len(name) + 1, Name.Attribute, after
class CustomXMLLexer(RegexLexer):
name = "customxml"
aliases = ["cxml"]
tokens = {
'root': [
(r'\s*\.\.\.\w*', Comment),
('[^<&]+', Text),
(r'&\S*?;', Name.Entity),
(r'\<\!\[CDATA\[.*?\]\]\>', Comment.Preproc),
(r'<!--(.|\n)*?-->', Comment.Multiline),
(r'<\?.*?\?>', Comment.Preproc),
('<![^>]*>', Comment.Preproc),
(r'<\s*[\w:.-]+', Name.Tag, 'tag'),
(r'<\s*/\s*[\w:.-]+\s*>', Name.Tag),
(r'<\s*\?\?[\w:.-]+', italic_tag, 'tag'),
(r'<\s*/\s*\?\?[\w:.-]+\s*>', italic_tag_close),
(r'<\s*/\s*[\w:.-]+\[\]\s*>', repeat_tag_close),
],
'tag': [
(r'\*', Operator),
(r'\[\]', Operator),
(r'\s+', Text),
(r'\.\.\.\w*', italic_generic),
(r'[\w.:-]+\s*=', Name.Attribute, 'attr'),
(r'[\w.:-]+\*\s*=', italic_attr_name, 'attr'),
(r'/?\s*>', Name.Tag, '#pop'),
],
'attr': [
(r'\s+', Text),
(r'"\?\?[^"]*?"', italic_attr, "#pop"),
('".*?"', String, '#pop'),
("'.*?'", String, '#pop'),
(r'[^\s>]+', String, '#pop'),
],
}
def analyse_text(text):
print("hi?")
_lexer_cache[CustomXMLLexer.__name__] = CustomXMLLexer
LEXERS["CustomXMLLexer"] = ("xml_lexer", "CustomXMLLexer", ("cxml", ), (), ())
__all__ = ("CustomXMLLexer", )