something

This commit is contained in:
2026-04-03 09:55:42 +02:00
parent 94710dbd9e
commit 28f5796ee5
17 changed files with 75 additions and 157 deletions
+4 -6
View File
@@ -19,11 +19,6 @@ function createChatServer(storage) {
const clientIp = helpers.getIpAddress(request);
const userCommandHistory = {};
if (serverConfig.webserver.banlist?.includes(clientIp)) {
ws.close(1008, 'Banned IP');
return;
}
// Send chat history safely
storage.chatHistory.forEach((message) => {
const historyMessage = { ...message, history: true };
@@ -77,7 +72,10 @@ function createChatServer(storage) {
const now = new Date();
messageData.time = String(now.getHours()).padStart(2, '0') + ":" + String(now.getMinutes()).padStart(2, '0');
if (serverConfig.webserver.banlist?.includes(clientIp)) return;
if (serverConfig.webserver.banlist?.includes(clientIp)) {
ws.close(1008, 'Banned IP');
return;
}
if (request.session?.isAdminAuthenticated === true) messageData.admin = true;
if (messageData.nickname?.length > 32) messageData.nickname = messageData.nickname.substring(0, 32);
+1 -1
View File
@@ -7,7 +7,7 @@ const path = require('path');
const https = require('https');
// File Imports
const { parseAudioDevice } = require('./stream/parser');
const parseAudioDevice = require('./stream/parser');
const { configName, serverConfig, configUpdate, configSave, configExists, configPath } = require('./server_config');
const helpers = require('./helpers');
const storage = require('./storage');
+21 -44
View File
@@ -42,7 +42,7 @@ const plugins = findServerFiles(serverConfig.plugins);
if (plugins.length > 0) {
setTimeout(() => {
startPluginsWithDelay(plugins, 3000); // Start plugins with 3 seconds interval
}, 3000); // Initial delay of 3 seconds for the first plugin
}, 4000); // Initial delay of 4 seconds for the first plugin
}
const terminalWidth = readline.createInterface({input: process.stdin, output: process.stdout}).output.columns;
@@ -52,8 +52,7 @@ console.log('\x1b[32m\x1b[2mby Noobish @ \x1b[4mFMDX.org + KubaPro010\x1b[0m');
console.log("v" + pjson.version)
console.log('\x1b[90m' + '─'.repeat(terminalWidth - 1) + '\x1b[0m');
const audioWss = require('./stream/ws.js');
storage.websocket_delegation.set("/audio", audioWss);
require('./stream/ws.js');
require('./stream/index');
require('./plugins');
@@ -97,16 +96,13 @@ setInterval(() => {
function connectToSerial() {
if (serverConfig.xdrd.wirelessConnection === true) return;
// Configure the SerialPort with DTR and RTS options
serialport = new SerialPort({
path: serverConfig.xdrd.comPort,
baudRate: 115200,
autoOpen: false, // Prevents automatic opening
dtr: false, // Disable DTR
rts: false // Disable RTS
autoOpen: false,
dtr: false, rts: false
});
// Open the port manually after configuring DTR and RTS
serialport.open((err) => {
if (err) {
logError('Error opening port: ' + err.message);
@@ -121,7 +117,7 @@ function connectToSerial() {
pluginsApi.setOutput(serialport);
setTimeout(() => {
serialport.write('x\n');
}, 3000);
}, 2500);
setTimeout(() => {
serialport.write('Q0\n');
@@ -141,13 +137,8 @@ function connectToSerial() {
serialport.write('F-1\n');
serialport.write('W0\n');
serverConfig.webserver.rdsMode ? serialport.write('D1\n') : serialport.write('D0\n');
// cEQ and iMS combinations
if (serverConfig.ceqStartup === "0" && serverConfig.imsStartup === "0") serialport.write("G00\n"); // Both Disabled
else if (serverConfig.ceqStartup === "1" && serverConfig.imsStartup === "0") serialport.write(`G10\n`);
else if (serverConfig.ceqStartup === "0" && serverConfig.imsStartup === "1") serialport.write(`G01\n`);
else if (serverConfig.ceqStartup === "1" && serverConfig.imsStartup === "1") serialport.write("G11\n"); // Both Enabled
// Handle stereo mode
if (serverConfig.stereoStartup === "1") serialport.write("B1\n"); // Mono
serialport.write(`G${serverConfig.ceqStartup}${serverConfig.imsStartup}\n`);
serialport.write(`B${serverConfig.stereoStartup}\n`); // Mono
serverConfig.audio.startupVolume
? serialport.write('Y' + (serverConfig.audio.startupVolume * 100).toFixed(0) + '\n')
: serialport.write('Y100\n');
@@ -223,11 +214,10 @@ client.on('data', (data) => {
authFlags.authMsg = true;
logInfo('Authentication with xdrd successful.');
} else if (line.startsWith('G')) {
const value = line.substring(1);
dataHandler.initialData.eq = value.charAt(0);
dataHandler.dataToSend.eq = value.charAt(0);
dataHandler.initialData.ims = value.charAt(1);
dataHandler.dataToSend.ims = value.charAt(1);
dataHandler.initialData.eq = line.charAt(1);
dataHandler.dataToSend.eq = line.charAt(1);
dataHandler.initialData.ims = line.charAt(2);
dataHandler.dataToSend.ims = line.charAt(2);
} else if (line.startsWith('Z')) {
let modifiedLine = line.slice(1);
dataHandler.initialData.ant = modifiedLine;
@@ -306,13 +296,6 @@ wss.on('connection', (ws, request) => {
const output = serverConfig.xdrd.wirelessConnection ? client : serialport;
let clientIp = helpers.getIpAddress(request);
const userCommandHistory = {};
if (clientIp && serverConfig.webserver.banlist?.includes(clientIp)) {
ws.close(1008, 'Banned IP');
return;
}
if (clientIp && clientIp.includes(',')) clientIp = clientIp.split(',')[0].trim();
// Per-IP limit connection open
if (clientIp) {
@@ -336,8 +319,8 @@ wss.on('connection', (ws, request) => {
}
}
if (clientIp !== '::ffff:127.0.0.1' ||
(request.socket && request.socket.remoteAddress && request.socket.remoteAddress !== '::ffff:127.0.0.1') ||
if (clientIp !== '::ffff:127.0.0.1' ||
(request.socket && request.socket.remoteAddress && request.socket.remoteAddress !== '::ffff:127.0.0.1') ||
(request.headers && request.headers['origin'] && request.headers['origin'].trim() !== '')) {
currentUsers++;
}
@@ -420,8 +403,8 @@ wss.on('connection', (ws, request) => {
}
}
if (clientIp !== '::ffff:127.0.0.1' ||
(request.socket && request.socket.remoteAddress && request.socket.remoteAddress !== '::ffff:127.0.0.1') ||
if (clientIp !== '::ffff:127.0.0.1' ||
(request.socket && request.socket.remoteAddress && request.socket.remoteAddress !== '::ffff:127.0.0.1') ||
(request.headers && request.headers['origin'] && request.headers['origin'].trim() !== '')) {
currentUsers--;
}
@@ -490,10 +473,6 @@ wss.on('connection', (ws, request) => {
pluginsWss.on('connection', (ws, request) => {
const clientIp = helpers.getIpAddress(request);
const userCommandHistory = {};
if (serverConfig.webserver.banlist?.includes(clientIp)) {
ws.close(1008, 'Banned IP');
return;
}
// Anti-spam tracking for each client
const userCommands = {};
let lastWarn = { time: 0 };
@@ -504,7 +483,7 @@ pluginsWss.on('connection', (ws, request) => {
try {
let messageData = JSON.parse(message); // Attempt to parse the JSON
if (messageData.type === "GPS" && messageData.value) {
const gpsData = messageData.value;
const { status, time, lat, lon, alt, mode } = gpsData;
@@ -515,7 +494,7 @@ pluginsWss.on('connection', (ws, request) => {
}
}
} catch (error) {}
// Broadcast the message to all other clients
pluginsWss.clients.forEach(client => {
if (client.readyState === WebSocket.OPEN) client.send(message); // Send the message to all clients
@@ -527,14 +506,13 @@ pluginsWss.on('connection', (ws, request) => {
});
});
httpServer.on('upgrade', (request, socket, head) => {
const clientIp = helpers.getIpAddress(request);
if (serverConfig.webserver.banlist?.includes(clientIp)) {
httpServer.on('upgrade', (request, socket, head) => {
if (serverConfig.webserver.banlist?.includes(helpers.getIpAddress(request))) {
socket.destroy();
return;
}
const upgradeWss = storage.websocket_delegation.get(request.url);
const upgradeWss = storage.websocket_delegation.get(request.url);
if(upgradeWss) {
sessionMiddleware(request, {}, () => {
upgradeWss.handleUpgrade(request, socket, head, (ws) => {
@@ -564,5 +542,4 @@ const startServer = (address) => {
startServer(ipv4Address);
tunnel.connect();
fmdxList.update();
module.exports = { wss, pluginsWss, httpServer, serverConfig };
fmdxList.update();
+7 -6
View File
@@ -3,6 +3,7 @@ const { serverConfig } = require('../server_config');
const { logDebug, logError, logInfo, logWarn, logFfmpeg } = require('../console');
const checkFFmpeg = require('./checkFFmpeg');
const { PassThrough } = require('stream');
const storage = require('../storage');
const consoleLogTitle = '[Audio Stream]';
@@ -41,14 +42,14 @@ checkFFmpeg().then((ffmpegPath) => {
else inputArgs = ["-f", "alsa", "-i", device];
return [
"-fflags", "+nobuffer",
"-fflags", "+nobuffer+flush_packets",
"-flags", "low_delay",
"-rtbufsize", "6144",
"-probesize", "256",
"-rtbufsize", "4096",
"-probesize", "128",
...inputArgs,
"-thread_queue_size", "2048",
"-thread_queue_size", "1024",
"-ar", String(sampleRate),
"-ac", String(channels),
@@ -62,7 +63,7 @@ checkFFmpeg().then((ffmpegPath) => {
"-id3v2_version", "0",
"-fflags", "+nobuffer",
// "-flush_packets", "1",
"-flush_packets", "1",
"pipe:1"
];
@@ -139,4 +140,4 @@ checkFFmpeg().then((ffmpegPath) => {
logError(`${consoleLogTitle} Error: ${err.message}`);
});
module.exports = audio_pipe;
storage.websocket_delegation.set("/audio", audioWss);
+1 -1
View File
@@ -107,4 +107,4 @@ function parseAudioDevice(options, callback) {
else return new Promise(execute);
}
module.exports = { parseAudioDevice };
module.exports = parseAudioDevice;
-9
View File
@@ -5,15 +5,6 @@ const { getIpAddress } = require("../helpers.js")
const audioWss = new WebSocket.Server({ noServer: true, skipUTF8Validation: true });
audioWss.on('connection', (ws, request) => {
const clientIp = getIpAddress(request);
if (serverConfig.webserver.banlist?.includes(clientIp)) {
ws.close(1008, 'Banned IP');
return;
}
});
audio_pipe.on('data', (chunk) => {
audioWss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) client.send(chunk, {binary: true, compress: false});
+1 -6
View File
@@ -4,7 +4,7 @@ const consoleCmd = require('./console');
let localDb = {};
let nextLocalDbUpdate = 0;
const localDbUpdateInterval = 7 * 24 * 60 * 60 * 1000; // 7-day database update interval
const localDbUpdateInterval = 3 * 24 * 60 * 60 * 1000; // 3-day database update interval
let awaitingTxInfo = true;
let lastFetchTime = 0;
let piFreqIndex = {}; // Indexing for speedier PI+Freq combinations
@@ -18,11 +18,6 @@ let usStatesGeoJson = null; // To cache the GeoJSON data for US states
let Latitude = serverConfig.identification.lat;
let Longitude = serverConfig.identification.lon;
// Create WebSocket URL for GPS lat/lon update.
const webserverPort = serverConfig.webserver.webserverPort || 8080; // Fallback to port 8080
const externalWsUrl = `ws://127.0.0.1:${webserverPort}/data_plugins`;
const WebSocket = require('ws');
// Get weighting values based on algorithm setting.
// Defaults = algorithm 1
let weightedErp = 10;