From 26f4b5e6ba348aebe8af3e555defd897a5084ad3 Mon Sep 17 00:00:00 2001 From: asynts Date: Sun, 20 Sep 2020 12:41:01 +0200 Subject: [PATCH] TelnetServer: Use OutputMemoryStream instead of BufferStream. I could not test these changes because I could not get my telnet client (on Linux) to connect to the telnet server running in Serenity. I tried the follwing: # Serenity su TelnetServer # Linux telnet localhost 8823 The server then immediatelly closes the connection: Connection closed by foreign host. In the debug logs the following message appears: [NetworkTask(5:5)]: handle_tcp: unexpected flags in FinWait2 state [NetworkTask(5:5)]: handle_tcp: unexpected flags in Closed state [NetworkTask(5:5)]: handle_tcp: unexpected flags in Closed state This seems to be an unrelated bug in the TCP implementation. --- Services/TelnetServer/Client.cpp | 8 +++++--- Services/TelnetServer/main.cpp | 1 - 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Services/TelnetServer/Client.cpp b/Services/TelnetServer/Client.cpp index e983025df6..dba7c8a052 100644 --- a/Services/TelnetServer/Client.cpp +++ b/Services/TelnetServer/Client.cpp @@ -25,8 +25,8 @@ */ #include "Client.h" -#include #include +#include #include #include #include @@ -171,10 +171,12 @@ void Client::send_command(Command command) void Client::send_commands(Vector commands) { auto buffer = ByteBuffer::create_uninitialized(commands.size() * 3); - BufferStream stream(buffer); + OutputMemoryStream stream { buffer }; + for (auto& command : commands) stream << (u8)IAC << command.command << command.subcommand; - stream.snip(); + + ASSERT(stream.is_end()); m_socket->write(buffer.data(), buffer.size()); } diff --git a/Services/TelnetServer/main.cpp b/Services/TelnetServer/main.cpp index 6acb900b61..3fd26aff42 100644 --- a/Services/TelnetServer/main.cpp +++ b/Services/TelnetServer/main.cpp @@ -25,7 +25,6 @@ */ #include "Client.h" -#include #include #include #include