From 6779e84782c76dfa3a551b1d284af4afd9f41bd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20L=C3=B3pez=20Guimaraes?= Date: Wed, 3 Jan 2024 23:54:51 +0000 Subject: [PATCH] services: Add CBVC endpoint This allows any version of the 3DS internet browser to connect using Pretendo. The `:unknown` section seems to represent an incrementing "version" number, but I wasn't able to relate this number with the version shown in the browser info. --- src/server.ts | 4 +++- src/services/cbvc/index.ts | 31 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/services/cbvc/index.ts diff --git a/src/server.ts b/src/server.ts index d8fdb63..0050b1a 100644 --- a/src/server.ts +++ b/src/server.ts @@ -15,6 +15,7 @@ import { fullUrl, getValueFromHeaders } from '@/util'; import { LOG_INFO, LOG_SUCCESS, LOG_WARN } from '@/logger'; import conntest from '@/services/conntest'; +import cbvc from '@/services/cbvc'; import nnid from '@/services/nnid'; import nasc from '@/services/nasc'; import datastore from '@/services/datastore'; @@ -39,6 +40,7 @@ app.use(xmlparser); // import the servers into one app.use(conntest); +app.use(cbvc); app.use(nnid); app.use(nasc); app.use(datastore); @@ -109,4 +111,4 @@ async function main(): Promise { }); } -main().catch(console.error); \ No newline at end of file +main().catch(console.error); diff --git a/src/services/cbvc/index.ts b/src/services/cbvc/index.ts new file mode 100644 index 0000000..c3e5472 --- /dev/null +++ b/src/services/cbvc/index.ts @@ -0,0 +1,31 @@ +// handles CBVC (CTR Browser Version Check?) endpoints + +import express from 'express'; +import subdomain from 'express-subdomain'; +import { LOG_INFO } from '@/logger'; + +// Router to handle the subdomain restriction +const cbvc: express.Router = express.Router(); + +// Setup route +LOG_INFO('[cbvc] Applying imported routes'); +cbvc.get('/:consoleType/:unknown/:region', (request: express.Request, response: express.Response): void => { + response.set('Content-Type', 'text/plain'); + + // * https://www.3dbrew.org/wiki/Internet_Browser#Forced_system-update + // * The returned value is a number which the Internet Browser then compares + // * with its own version number. If the version number isn't higher than the + // * returned value, it will show a console update message. + // * + // * Return 0 and allow any browser to connect. + response.send('0'); +}); + +// Main router for endpoints +const router: express.Router = express.Router(); + +// Create subdomains +LOG_INFO('[cbvc] Creating \'cbvc\' subdomain'); +router.use(subdomain('cbvc.cdn', cbvc)); + +export default router;