ConnectionCreator: use tls init
GitOrigin-RevId: f58530975f30e5341e250478c3f83cabf8947b71
This commit is contained in:
parent
795bf65f8d
commit
9289b61b92
@ -15,7 +15,7 @@ namespace mtproto {
|
|||||||
unique_ptr<IStreamTransport> create_transport(TransportType type) {
|
unique_ptr<IStreamTransport> create_transport(TransportType type) {
|
||||||
switch (type.type) {
|
switch (type.type) {
|
||||||
case TransportType::ObfuscatedTcp:
|
case TransportType::ObfuscatedTcp:
|
||||||
return td::make_unique<tcp::ObfuscatedTransport>(type.dc_id, std::move(type.secret), type.emulate_tls);
|
return td::make_unique<tcp::ObfuscatedTransport>(type.dc_id, std::move(type.secret));
|
||||||
case TransportType::Tcp:
|
case TransportType::Tcp:
|
||||||
return td::make_unique<tcp::OldTransport>();
|
return td::make_unique<tcp::OldTransport>();
|
||||||
case TransportType::Http:
|
case TransportType::Http:
|
||||||
|
@ -123,8 +123,9 @@ class OldTransport : public IStreamTransport {
|
|||||||
|
|
||||||
class ObfuscatedTransport : public IStreamTransport {
|
class ObfuscatedTransport : public IStreamTransport {
|
||||||
public:
|
public:
|
||||||
ObfuscatedTransport(int16 dc_id, std::string secret, bool emulate_tls)
|
ObfuscatedTransport(int16 dc_id, std::string secret)
|
||||||
: dc_id_(dc_id), secret_(std::move(secret)), emulate_tls_(emulate_tls), impl_(secret_.size() >= 17) {
|
: dc_id_(dc_id), secret_(std::move(secret)), impl_(secret_.size() >= 17) {
|
||||||
|
emulate_tls_ = secret.size() >= 17 && secret[0] == '\0xee';
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack) override TD_WARN_UNUSED_RESULT;
|
Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack) override TD_WARN_UNUSED_RESULT;
|
||||||
|
@ -15,11 +15,13 @@ struct TransportType {
|
|||||||
enum Type { Tcp, ObfuscatedTcp, Http } type = Tcp;
|
enum Type { Tcp, ObfuscatedTcp, Http } type = Tcp;
|
||||||
int16 dc_id{0};
|
int16 dc_id{0};
|
||||||
string secret;
|
string secret;
|
||||||
bool emulate_tls{false};
|
|
||||||
|
|
||||||
TransportType() = default;
|
TransportType() = default;
|
||||||
TransportType(Type type, int16 dc_id, string secret, bool emulate_tls = false)
|
TransportType(Type type, int16 dc_id, string secret) : type(type), dc_id(dc_id), secret(std::move(secret)) {
|
||||||
: type(type), dc_id(dc_id), secret(std::move(secret)), emulate_tls(emulate_tls) {
|
}
|
||||||
|
|
||||||
|
bool emulate_tls() const {
|
||||||
|
return secret.size() >= 17 && secret[0] == '\0xee';
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include "td/mtproto/Ping.h"
|
#include "td/mtproto/Ping.h"
|
||||||
#include "td/mtproto/RawConnection.h"
|
#include "td/mtproto/RawConnection.h"
|
||||||
|
#include "td/mtproto/TlsInit.h"
|
||||||
|
|
||||||
#include "td/net/GetHostByNameActor.h"
|
#include "td/net/GetHostByNameActor.h"
|
||||||
#include "td/net/HttpProxy.h"
|
#include "td/net/HttpProxy.h"
|
||||||
@ -961,6 +962,8 @@ void ConnectionCreator::client_loop(ClientInfo &client) {
|
|||||||
client.checking_connections++;
|
client.checking_connections++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool emulate_tls = extra.transport_type.emulate_tls();
|
||||||
|
|
||||||
auto promise = PromiseCreator::lambda(
|
auto promise = PromiseCreator::lambda(
|
||||||
[actor_id = actor_id(this), check_mode, transport_type = extra.transport_type, hash = client.hash,
|
[actor_id = actor_id(this), check_mode, transport_type = extra.transport_type, hash = client.hash,
|
||||||
debug_str = extra.debug_str,
|
debug_str = extra.debug_str,
|
||||||
@ -973,7 +976,7 @@ void ConnectionCreator::client_loop(ClientInfo &client) {
|
|||||||
td::make_unique<detail::StatsCallback>(client.is_media ? media_net_stats_callback_ : common_net_stats_callback_,
|
td::make_unique<detail::StatsCallback>(client.is_media ? media_net_stats_callback_ : common_net_stats_callback_,
|
||||||
actor_id(this), client.hash, extra.stat);
|
actor_id(this), client.hash, extra.stat);
|
||||||
|
|
||||||
if (proxy.use_socks5_proxy() || proxy.use_http_tcp_proxy()) {
|
if (proxy.use_socks5_proxy() || proxy.use_http_tcp_proxy() || emulate_tls) {
|
||||||
VLOG(connections) << "In client_loop: create new transparent proxy connection " << extra.debug_str;
|
VLOG(connections) << "In client_loop: create new transparent proxy connection " << extra.debug_str;
|
||||||
class Callback : public TransparentProxy::Callback {
|
class Callback : public TransparentProxy::Callback {
|
||||||
public:
|
public:
|
||||||
@ -1013,10 +1016,14 @@ void ConnectionCreator::client_loop(ClientInfo &client) {
|
|||||||
children_[token] = {
|
children_[token] = {
|
||||||
true, create_actor<Socks5>("Socks5", std::move(socket_fd), extra.mtproto_ip, proxy.proxy().user().str(),
|
true, create_actor<Socks5>("Socks5", std::move(socket_fd), extra.mtproto_ip, proxy.proxy().user().str(),
|
||||||
proxy.proxy().password().str(), std::move(callback), create_reference(token))};
|
proxy.proxy().password().str(), std::move(callback), create_reference(token))};
|
||||||
} else {
|
} else if (proxy.use_http_tcp_proxy()) {
|
||||||
children_[token] = {true, create_actor<HttpProxy>("HttpProxy", std::move(socket_fd), extra.mtproto_ip,
|
children_[token] = {true, create_actor<HttpProxy>("HttpProxy", std::move(socket_fd), extra.mtproto_ip,
|
||||||
proxy.proxy().user().str(), proxy.proxy().password().str(),
|
proxy.proxy().user().str(), proxy.proxy().password().str(),
|
||||||
std::move(callback), create_reference(token))};
|
std::move(callback), create_reference(token))};
|
||||||
|
} else {
|
||||||
|
children_[token] = {true, create_actor<TlsInit>("HttpProxy", std::move(socket_fd), extra.mtproto_ip,
|
||||||
|
"www.google.com" /*todo use domain*/, "", std::move(callback),
|
||||||
|
create_reference(token))};
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
VLOG(connections) << "In client_loop: create new direct connection " << extra.debug_str;
|
VLOG(connections) << "In client_loop: create new direct connection " << extra.debug_str;
|
||||||
|
Reference in New Issue
Block a user