Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions src/client/ClientTelnet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "ClientTelnet.h"

#include "../configuration/configuration.h"
#include "../global/Version.h"
#include "../global/io.h"
#include "../global/utils.h"
#include "../proxy/TextCodec.h"
Expand Down Expand Up @@ -118,3 +119,47 @@ void ClientTelnet::virt_receiveEchoMode(const bool mode)
{
m_output.echoModeChanged(mode);
}

void ClientTelnet::virt_receiveNewEnvironSend(const QList<RawBytes> &vars,
const QList<RawBytes> &userVars)
{
const bool sendAll = vars.isEmpty() && userVars.isEmpty();

QMap<RawBytes, RawBytes> myVars;
QMap<RawBytes, RawBytes> myUserVars;

bool clientNameRequested = sendAll;
bool clientVersionRequested = sendAll;
bool charsetRequested = sendAll;
bool mttsRequested = sendAll;

for (const auto &v : vars) {
if (v == RawBytes("CLIENT_NAME")) {
clientNameRequested = true;
} else if (v == RawBytes("CLIENT_VERSION")) {
clientVersionRequested = true;
} else if (v == RawBytes("CHARSET")) {
charsetRequested = true;
} else if (v == RawBytes("MTTS")) {
mttsRequested = true;
}
}

if (clientNameRequested) {
myVars[RawBytes("CLIENT_NAME")] = RawBytes("MMapper");
}
if (clientVersionRequested) {
myVars[RawBytes("CLIENT_VERSION")] = RawBytes(getMMapperVersion());
}
if (charsetRequested) {
myVars[RawBytes("CHARSET")] = RawBytes("UTF-8");
}
if (mttsRequested) {
// bitvector = ANSI(1) | UTF-8(4) | 256 COLORS(8) | MNES(512) = 525
myVars[RawBytes("MTTS")] = RawBytes("525");
}

if (!myVars.isEmpty() || !myUserVars.isEmpty()) {
sendNewEnvironIs(myVars, myUserVars);
}
}
2 changes: 2 additions & 0 deletions src/client/ClientTelnet.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ class NODISCARD ClientTelnet final : AbstractTelnet
private:
void virt_sendToMapper(const RawBytes &, bool goAhead) final;
void virt_receiveEchoMode(bool) final;
void virt_receiveNewEnvironSend(const QList<RawBytes> &vars,
const QList<RawBytes> &userVars) final;
void virt_sendRawData(const TelnetIacBytes &data) final;

public:
Expand Down
2 changes: 2 additions & 0 deletions src/proxy/AbstractSocket.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,13 @@ class NODISCARD_QOBJECT AbstractSocket : public QIODevice
void flush() { virt_flush(); }
void disconnectFromHost() { virt_disconnectFromHost(); }
NODISCARD bool isConnected() const { return virt_isConnected(); }
NODISCARD QString peerAddress() const { return virt_peerAddress(); }

private:
virtual void virt_flush() = 0;
virtual void virt_disconnectFromHost() = 0;
NODISCARD virtual bool virt_isConnected() const = 0;
NODISCARD virtual QString virt_peerAddress() const = 0;

signals:
void sig_connected();
Expand Down
Loading
Loading