Skip to content

Commit 11c3701

Browse files
basic telnet service
1 parent 1ee9936 commit 11c3701

3 files changed

Lines changed: 62 additions & 6 deletions

File tree

src/programs/@ALL.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,13 @@ export { default as ps } from "./ps";
3939
export { default as kill } from "./kill";
4040
export { default as spark } from "./spark";
4141

42-
export { default as ipc_bg_test } from "./ipc_bg_test";
43-
export { default as ipc_fg_test } from "./ipc_fg_test";
42+
export { default as hello_http } from "./hello_http";
43+
export { default as telnetd } from "./telnetd";
4444

4545
// shhhhh!
46+
export { default as ipc_bg_test } from "./ipc_bg_test";
47+
export { default as ipc_fg_test } from "./ipc_fg_test";
4648
export { default as tb_test } from "./taskbar_test";
47-
export { default as hello_http } from "./hello_http";
4849

4950
export { default as trigger_create_trigger } from "./pkg/triggers/create_trigger";
5051
export { default as trigger_remove_trigger } from "./pkg/triggers/remove_trigger";

src/programs/hello_http.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,11 @@ export default {
5555
usage_suffix: "",
5656
arg_descriptions: {},
5757
compat: "2.0.0",
58-
hide_from_help: true,
5958
completion: async () => [],
6059
main: async (data) => {
6160
// extract from data to make code less verbose
6261
const { term, process, kernel } = data;
6362

64-
kernel.get_env_info()
65-
6663
if (!kernel.has_network_manager()) {
6764
term.writeln(`${term.ansi.PREFABS.error}No network manager found. This program requires a network manager to function.${term.ansi.STYLE.reset_all}`);
6865
return 1;

src/programs/telnetd.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import type { Program } from "../types";
2+
3+
export default {
4+
name: "telnetd",
5+
description: "Telnet service",
6+
usage_suffix: "",
7+
arg_descriptions: {},
8+
compat: "2.0.0",
9+
hide_from_help: true,
10+
completion: async () => [],
11+
main: async (data) => {
12+
// extract from data to make code less verbose
13+
const { term, process, kernel } = data;
14+
15+
if (!kernel.has_network_manager()) {
16+
term.writeln(`${term.ansi.PREFABS.error}No network manager found. This program requires a network manager to function.${term.ansi.STYLE.reset_all}`);
17+
return 1;
18+
}
19+
20+
const net_manager = kernel.get_network_manager();
21+
if (!await net_manager.is_up(true)) {
22+
term.writeln(`${term.ansi.PREFABS.error}Network is down!${term.ansi.STYLE.reset_all}`);
23+
return 1;
24+
}
25+
26+
const server = await process.network_listen(2323);
27+
server.add_event_listener("connection", (socket) => {
28+
socket.add_event_listener("data", (incoming_data) => {
29+
// filter out telnet commands (starting with 0xFF) for now
30+
const filtered_data = new Uint8Array(incoming_data.length);
31+
let j = 0;
32+
for (let i = 0; i < incoming_data.length; i++) {
33+
if (incoming_data[i] === 0xFF) {
34+
i += 2; // skip the command and its option
35+
} else {
36+
filtered_data[j++] = incoming_data[i];
37+
}
38+
}
39+
const final_data = filtered_data.slice(0, j);
40+
41+
const raw = new TextDecoder().decode(final_data);
42+
43+
// echo back
44+
socket.send(raw);
45+
46+
// for full lines just acknowledge it for now
47+
if (raw.includes("\r")) {
48+
socket.send("You sent: " + raw.trim() + "\r\n> ");
49+
}
50+
});
51+
52+
socket.send("\r\nWelcome to the OllieOS Telnet service!\r\n> ");
53+
});
54+
55+
process.detach();
56+
return 0;
57+
}
58+
} as Program;

0 commit comments

Comments
 (0)