mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-25 15:08:47 -07:00
975753deac
Patches the Quest build of Rec Room 2023.03.21 (20230317 / 2128210, the
same appVersion as the PC client) to connect to a DorkNet server, using
one native hook library loaded via DT_NEEDED on libmain.so.
- host rewrite onto <svc>.<ServerHost> or a {service}-dev.example.com template
- Photon app ids and region injection (PhotonRegion must match PC)
- TLS / pinning / image-signature bypass, integrity callbacks neutralised
- no-Meta-account build; the server treats platform id 0/1/blank as a
placeholder and keys those accounts by device id
- build.ps1 -Obb packages a DorkNet-<ver>.xapk with one-command
installers for Windows and macOS/Linux; app is named via AppName
- README, docs/quest.md and NOTICE updated; credits RecFlare and
And64InlineHook (MIT)
Tested on a Quest 2: all hooks arm, requests reach the dev server.
79 lines
3.0 KiB
Python
79 lines
3.0 KiB
Python
#!/usr/bin/env python3
|
|
"""Generate config_generated.h from dorknet-quest.cfg.
|
|
|
|
Bakes the operator's config into the library at compile time. Keys absent from
|
|
the cfg are simply not emitted, so the built-in defaults in config.h apply.
|
|
Secrets (Photon ids, Meta app id) live only in the git-ignored cfg, never in a
|
|
committed file.
|
|
|
|
Usage: gen_config_header.py <dorknet-quest.cfg> <package> <out/config_generated.h>
|
|
"""
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# cfg key -> (macro, kind) where kind is "str", "bool" or "int".
|
|
KEYS = {
|
|
"ServerHost": ("DN_SERVER_HOST", "str"),
|
|
"OculusAppId": ("DN_OCULUS_APPID", "str"),
|
|
"PhotonAppId": ("DN_PHOTON_REALTIME", "str"),
|
|
"PhotonVoiceAppId": ("DN_PHOTON_VOICE", "str"),
|
|
"PhotonChatAppId": ("DN_PHOTON_CHAT", "str"),
|
|
"PhotonNameServer": ("DN_PHOTON_SERVER", "str"),
|
|
"PhotonNameServerPort": ("DN_PHOTON_PORT", "int"),
|
|
"PhotonRegion": ("DN_PHOTON_REGION", "str"),
|
|
"EnableTlsTrustBypass": ("DN_TLS_TRUST_BYPASS", "bool"),
|
|
"AcceptUnsignedImages": ("DN_ACCEPT_UNSIGNED_IMAGES", "bool"),
|
|
"LogHttp": ("DN_LOG_HTTP", "bool"),
|
|
"Debug": ("DN_DEBUG_HTTP", "bool"),
|
|
"LogHttpBodyMax": ("DN_LOG_BODY_MAX", "int"),
|
|
}
|
|
TRUE = {"true", "1", "yes", "on"}
|
|
FALSE = {"false", "0", "no", "off"}
|
|
|
|
|
|
def c_string(v):
|
|
return '"' + v.replace("\\", "\\\\").replace('"', '\\"') + '"'
|
|
|
|
|
|
def main():
|
|
if len(sys.argv) != 4:
|
|
raise SystemExit("usage: gen_config_header.py <cfg> <package> <out.h>")
|
|
cfg, package, out = Path(sys.argv[1]), sys.argv[2], Path(sys.argv[3])
|
|
lines = ["// Generated by scripts/gen_config_header.py -- do not edit, do not commit.",
|
|
"#ifndef DORKNET_QUEST_CONFIG_GENERATED_H",
|
|
"#define DORKNET_QUEST_CONFIG_GENERATED_H",
|
|
f"#define DN_PACKAGE {c_string(package)}", ""]
|
|
|
|
if cfg.exists():
|
|
for raw in cfg.read_text(encoding="utf-8").splitlines():
|
|
line = raw.split("#", 1)[0].strip()
|
|
if not line or "=" not in line or line.startswith("["):
|
|
continue
|
|
key, _, val = line.partition("=")
|
|
key, val = key.strip(), val.strip()
|
|
if key not in KEYS or val == "":
|
|
continue
|
|
macro, kind = KEYS[key]
|
|
if kind == "str":
|
|
lines.append(f"#define {macro} {c_string(val)}")
|
|
elif kind == "int":
|
|
lines.append(f"#define {macro} {int(val)}")
|
|
elif kind == "bool":
|
|
low = val.lower()
|
|
if low in TRUE:
|
|
lines.append(f"#define {macro} true")
|
|
elif low in FALSE:
|
|
lines.append(f"#define {macro} false")
|
|
else:
|
|
raise SystemExit(f"{key}: not a boolean: {val}")
|
|
else:
|
|
print(f"note: {cfg} not found; baking package only, all values default", file=sys.stderr)
|
|
|
|
lines += ["", "#endif"]
|
|
out.write_text("\n".join(lines) + "\n", encoding="utf-8")
|
|
print(f"wrote {out}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|