Files
rudimentary-ids/parser.mjs
2026-02-13 00:30:12 +01:00

43 lines
1.0 KiB
JavaScript

export function parse_ipv4(value) {
const D = parseInt(value.slice(0, 2), 16);
const C = parseInt(value.slice(2, 4), 16);
const B = parseInt(value.slice(4, 6), 16);
const A = parseInt(value.slice(6, 8), 16);
return `${A}.${B}.${C}.${D}`;
}
export function parse_socket_state(socket_state) {
const ss_lines = socket_state.split('\n').map(line => line.trim());
const fields = ss_lines[0].split(/\s+/);
const result = [];
const field_parsers = {
'st': (value => parseInt(value, 16)),
'local_address': parse_ipv4,
'rem_address': parse_ipv4,
};
for (const line of ss_lines.slice(1)) {
const values = line.split(/\s+/);
const v_iter = values[Symbol.iterator]();
const pending = {};
for (const column of fields.slice(0, -1)) {
pending[column] = v_iter.next().value;
}
pending[fields.at(-1)] = [...v_iter].join(' ');
for (const [name, parser] of Object.entries(field_parsers)) {
const local_value = pending[name];
if (local_value) {
pending[name] = parser(local_value);
}
}
result.push(pending);
}
return result;
}