diff options
| author | 2026-02-24 12:09:05 +0330 | |
|---|---|---|
| committer | 2026-02-24 12:09:05 +0330 | |
| commit | de384de60db6ff966f27359421d6c27dee70f95e (patch) | |
| tree | dd8e488046ff4293cb1075789aca883ed69e12f0 /layer | |
| parent | broadlayer impl (diff) | |
broadlayer logging+dns
Diffstat (limited to 'layer')
| -rw-r--r-- | layer/broadlayer.ts | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/layer/broadlayer.ts b/layer/broadlayer.ts index fa39dc2..03b434c 100644 --- a/layer/broadlayer.ts +++ b/layer/broadlayer.ts @@ -1,13 +1,13 @@ -import { randomUUIDv7 } from "bun" +import { dns, randomUUIDv7 } from "bun" if (process.argv.length < 4) { console.log(`more args.\n${process.argv[0]} <ip> <port>`) } -const ip = process.argv[2] ?? '0.0.0.0' -const port = Number(process.argv[3]) +const server_ip = process.argv[2] ?? '0.0.0.0' +const server_port = Number(process.argv[3]) -if (!Number.isInteger(port) || port < 1 || port > 65535) { +if (!Number.isInteger(server_port) || server_port < 1 || server_port > 65535) { console.log("bad port") process.exit(1) } @@ -130,8 +130,11 @@ async function establishTCP(ip: string, port: number, clientIp: string): Promise return id } -async function establishUDP(ip: string, port: number, clientIp: string): Promise<string> { +async function establishUDP(hostname: string, port: number, clientIp: string): Promise<string | false> { const id = randomUUIDv7() + const ip = (await dns.lookup(hostname, { family: 'IPv4' }))[0]?.address + if (!ip) return false + console.log(ip) const conn: connection = { port, @@ -153,8 +156,9 @@ async function establishUDP(ip: string, port: number, clientIp: string): Promise const tm = Number(str.substring(1, bnI)) if (!isNaN(tm)) { conn.heartbeat = setInterval(() => { + console.log('heartbeat') udp.send('N\n', conn.port, conn.ip) - }, tm * 1000) + }, Math.max(tm - 5, 1) * 1000) } const temp_len = bnI + 1 if (str.length > temp_len) { @@ -186,16 +190,19 @@ setInterval(() => { for (const key of Object.keys(sessions)) { const sess = sessions[key]! if (sess.lastSeen > Date.now() - eviction_timeout) continue + // skip if websocket + if (sess.ws) continue // evict if (sess.mode === 'tcp') sess.socket?.close() else sess.die() delete sessions[key] } + console.log('clients:' + Object.keys(sessions).length) }, eviction_timeout) Bun.serve({ - port, - hostname: ip, + port: server_port, + hostname: server_ip, routes: { '/': new Response('this is a broadlayer server.'), '/tcp/connect/:ip/:port': async req => { @@ -214,6 +221,7 @@ Bun.serve({ if (res === false) return new Response('err_timeout') connectionsPerIp.set(clientIp, count + 1) + console.log('clients:' + Object.keys(sessions).length) return new Response('ok_' + res) }, '/udp/connect/:ip/:port': async req => { @@ -227,9 +235,12 @@ Bun.serve({ if (count >= 4) { return new Response('err_toomany', { status: 429 }) } - connectionsPerIp.set(clientIp, count + 1) - return new Response('ok_' + await establishUDP(req.params.ip, port, clientIp)) + const res = await establishUDP(req.params.ip, port, clientIp) + if (!res) return new Response('err_badhost') + connectionsPerIp.set(clientIp, count + 1) + console.log('clients:' + Object.keys(sessions).length) + return new Response('ok_' + res) }, '/poll/:id': async req => { // read and consume queue const sess = sessions[req.params.id] @@ -255,6 +266,7 @@ Bun.serve({ delete sessions[req.params.id] } + console.log('clients:' + Object.keys(sessions).length) return new Response('ok') }, '/send/:id': { @@ -267,6 +279,7 @@ Bun.serve({ if (sess.mode === 'tcp') sess.socket?.write(buf) else udp.send(buf, sess.port, sess.ip) + console.log('sendto') return new Response('ok') } }, @@ -295,6 +308,7 @@ Bun.serve({ } }) + console.log('clients:' + Object.keys(sessions).length) return new Response('ok_' + res) }, '/udp/ws/:ip/:port': async (req, server) => { @@ -311,6 +325,7 @@ Bun.serve({ connectionsPerIp.set(clientIp, count + 1) const res = await establishUDP(req.params.ip, port, clientIp) + if (!res) return new Response('err_badhost') server.upgrade(req, { data: { sessionId: res }, @@ -319,6 +334,7 @@ Bun.serve({ } }) + console.log('clients:' + Object.keys(sessions).length) return new Response('ok_' + res) } }, @@ -367,6 +383,7 @@ Bun.serve({ const sess = sessions[sessionId] sess.ws = undefined sess.lastSeen = Date.now() + console.log('connclose') } } } |
