owpengram-server/docs/tdesktop-patch-notes.md
2026-06-04 01:37:39 +08:00

3 KiB

Telegram Desktop Patch Notes

These notes describe the minimal Telegram Desktop patch required to connect a self-built client to telesrv.

Target

Item Value
Telegram Desktop commit 9caf32dffc90ddd9bb08ad5777b865f729fa167b
Describe v6.8.4-15-g9caf32dffc
TL layer 225
Local DC id 2
Local endpoint 127.0.0.1:2398
IPv6 endpoint [::1]:2398

telesrv defaults match this patch:

TELESRV_LISTEN=0.0.0.0:2398
TELESRV_ADVERTISE_IP=127.0.0.1
TELESRV_DC=2

RSA Key

Telegram Desktop must contain the public key that matches the private key used by your local telesrv instance.

Start telesrv once so it creates data/server_rsa.pem, then export:

openssl rsa -in data/server_rsa.pem -RSAPublicKey_out -out data/server_rsa.pub

Copy the PEM contents of data/server_rsa.pub into both kPublicRSAKeys and kTestPublicRSAKeys in:

Telegram/SourceFiles/mtproto/mtproto_dc_options.cpp

DC List Patch

In the same file, replace the built-in DC arrays with:

const BuiltInDc kBuiltInDcs[] = {
    { 2, "127.0.0.1", 2398 },
};

const BuiltInDc kBuiltInDcsIPv6[] = {
    { 2, "::1", 2398 },
};

const BuiltInDc kBuiltInDcsTest[] = {
    { 2, "127.0.0.1", 2398 },
};

const BuiltInDc kBuiltInDcsIPv6Test[] = {
    { 2, "::1", 2398 },
};

In DcOptions::constructFromBuiltIn(), mark built-in endpoints TCP-only:

const auto flags = Flag::f_static | Flag::f_tcpo_only;
const auto flags = Flag::f_static | Flag::f_ipv6 | Flag::f_tcpo_only;

That is the whole client patch: local DC endpoints, matching RSA public key, and TCP-only flags.

Build

Follow Telegram Desktop's upstream build docs for your platform. For Windows x64 at the pinned baseline:

git clone --recursive https://github.com/telegramdesktop/tdesktop.git
cd tdesktop
git checkout 9caf32dffc90ddd9bb08ad5777b865f729fa167b
git submodule update --init --recursive

Telegram\build\prepare\win.bat
cd Telegram
configure.bat x64 -D TDESKTOP_API_ID=YOUR_API_ID -D TDESKTOP_API_HASH=YOUR_API_HASH

Open out\Telegram.slnx in Visual Studio and build the Telegram project.

Multi-Client Local Test

Run two clients with isolated working directories:

$tdesktop = "C:\path\to\tdesktop\out\Debug\Telegram.exe"
Start-Process $tdesktop -ArgumentList @("-workdir", "$PWD\.tdata-alice")
Start-Process $tdesktop -ArgumentList @("-workdir", "$PWD\.tdata-bob")

Use different phone numbers for Alice and Bob. The default development login code is 12345.

Verification Checklist

  • telesrv logs tl_layer=225 and listens on 2398.
  • Telegram Desktop connects without reconnect loops.
  • No new NOT_IMPLEMENTED, Unhandled RPC, bad_msg, panic, or internal error appears in server logs during startup and basic messaging.
  • A second client with a separate -workdir can sign in and exchange messages with the first client.

Keep every client-side workaround mapped to a server-side compatibility decision and keep protocol changes separate from UI experiments.