49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
import { error, info, success } from "../util/Console.js";
|
|
import { runRouterCmds } from "./sshExec.js";
|
|
|
|
const queue = [];
|
|
let running = false;
|
|
|
|
function enqueue(task) {
|
|
queue.push(task);
|
|
if (!running) processQueue();
|
|
}
|
|
|
|
async function processQueue() {
|
|
if (queue.length === 0) { running = false; return; }
|
|
running = true;
|
|
const t = queue.shift();
|
|
try { await t(); } catch (err) { error('Queue error: ' + String(err)); }
|
|
setImmediate(processQueue);
|
|
}
|
|
|
|
export function enqueueCmd(fn) {
|
|
enqueue(() => fn());
|
|
}
|
|
|
|
export function enqueueNatAdd(ip, port, proto='tcp') {
|
|
enqueue(async () => {
|
|
info(`NAT ADD ${proto} ${ip}:${port}`);
|
|
await runRouterCmds([
|
|
'conf t',
|
|
`ip nat inside source static tcp ${ip} ${port} interface ${process.env.ROUTER_WAN_IF || 'gi0'} ${port}`,
|
|
`ip nat inside source static udp ${ip} ${port} interface ${process.env.ROUTER_WAN_IF || 'gi0'} ${port}`,
|
|
'end',
|
|
'wr mem'
|
|
]);
|
|
success(`NAT ADDED ${proto} ${ip}:${port}`);
|
|
});
|
|
}
|
|
|
|
export function enqueueNatRemove(ip, port, proto='tcp') {
|
|
enqueue(async () => {
|
|
info(`NAT DEL ${proto} ${ip}:${port}`);
|
|
await runRouterCmds([
|
|
'conf t',
|
|
`no ip nat inside source static ${proto} ${ip} ${port} interface ${process.env.ROUTER_WAN_IF || 'gi0'} ${port}`,
|
|
'end',
|
|
'wr mem'
|
|
]);
|
|
success(`NAT DELETED ${proto} ${ip}:${port}`);
|
|
});
|
|
} |