aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2026-01-19 23:02:56 +0300
committerlevlam <levlam@telegram.org>2026-01-19 23:02:56 +0300
commitd4aa7322c04c5711c949521208c4ed8061df90b4 (patch)
tree345bd6c97bc868ae415e540967c8c2368ed6b8e9
parenta41d1fa8f1a98b97689b704625bb6684bb892021 (diff)
Use td_api::proxy in td_api::internalLinkTypeProxy.
-rw-r--r--td/generate/scheme/td_api.tl7
-rw-r--r--td/telegram/LinkManager.cpp5
-rw-r--r--td/telegram/net/Proxy.cpp7
-rw-r--r--td/telegram/net/Proxy.h2
-rw-r--r--test/link.cpp8
5 files changed, 18 insertions, 11 deletions
diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl
index f0bcf6a6c..4407aaf0d 100644
--- a/td/generate/scheme/td_api.tl
+++ b/td/generate/scheme/td_api.tl
@@ -8653,11 +8653,8 @@ internalLinkTypePremiumGiftCode code:string = InternalLinkType;
//@referrer Referrer specified in the link
internalLinkTypePremiumGiftPurchase referrer:string = InternalLinkType;
-//@description The link is a link to a proxy. Call addProxy with the given parameters to process the link and add the proxy
-//@server Proxy server domain or IP address
-//@port Proxy server port
-//@type Type of the proxy
-internalLinkTypeProxy server:string port:int32 type:ProxyType = InternalLinkType;
+//@description The link is a link to a proxy. Call addProxy with the given parameters to process the link and add the proxy @proxy The proxy
+internalLinkTypeProxy proxy:proxy = InternalLinkType;
//@description The link is a link to a chat by its username. Call searchPublicChat with the given chat username to process the link.
//-If the chat is found, open its profile information screen or the chat itself.
diff --git a/td/telegram/LinkManager.cpp b/td/telegram/LinkManager.cpp
index 0f796cbd1..e1c2b439c 100644
--- a/td/telegram/LinkManager.cpp
+++ b/td/telegram/LinkManager.cpp
@@ -1060,7 +1060,8 @@ class LinkManager::InternalLinkProxy final : public InternalLink {
return nullptr;
}
}();
- return td_api::make_object<td_api::internalLinkTypeProxy>(server_, port_, std::move(proxy_type));
+ return td_api::make_object<td_api::internalLinkTypeProxy>(
+ td_api::make_object<td_api::proxy>(server_, port_, std::move(proxy_type)));
}
public:
@@ -3352,7 +3353,7 @@ Result<string> LinkManager::get_internal_link_impl(const td_api::InternalLinkTyp
}
case td_api::internalLinkTypeProxy::ID: {
auto link = static_cast<const td_api::internalLinkTypeProxy *>(type_ptr);
- TRY_RESULT(proxy, Proxy::create_proxy(link->server_, link->port_, link->type_.get()));
+ TRY_RESULT(proxy, Proxy::create_proxy(link->proxy_.get()));
return get_proxy_link(proxy, is_internal);
}
case td_api::internalLinkTypePublicChat::ID: {
diff --git a/td/telegram/net/Proxy.cpp b/td/telegram/net/Proxy.cpp
index e0e74cf2e..a22e87795 100644
--- a/td/telegram/net/Proxy.cpp
+++ b/td/telegram/net/Proxy.cpp
@@ -48,6 +48,13 @@ Result<Proxy> Proxy::create_proxy(string server, int port, const td_api::ProxyTy
}
}
+Result<Proxy> Proxy::create_proxy(const td_api::proxy *proxy) {
+ if (proxy == nullptr) {
+ return Status::Error(400, "Proxy must be non-empty");
+ }
+ return create_proxy(proxy->server_, proxy->port_, proxy->type_.get());
+}
+
td_api::object_ptr<td_api::proxy> Proxy::get_proxy_object() const {
auto type = [&]() -> td_api::object_ptr<td_api::ProxyType> {
switch (type_) {
diff --git a/td/telegram/net/Proxy.h b/td/telegram/net/Proxy.h
index d9e2775f4..dfcc0d8a3 100644
--- a/td/telegram/net/Proxy.h
+++ b/td/telegram/net/Proxy.h
@@ -33,6 +33,8 @@ class Proxy {
public:
static Result<Proxy> create_proxy(string server, int port, const td_api::ProxyType *proxy_type);
+ static Result<Proxy> create_proxy(const td_api::proxy *proxy);
+
static Proxy socks5(string server, int32 port, string user, string password) {
Proxy proxy;
proxy.type_ = Type::Socks5;
diff --git a/test/link.cpp b/test/link.cpp
index 58610b4ae..a43aa901f 100644
--- a/test/link.cpp
+++ b/test/link.cpp
@@ -444,14 +444,14 @@ static auto premium_gift_purchase(const td::string &referrer) {
}
static auto proxy_mtproto(const td::string &server, td::int32 port, const td::string &secret) {
- return td::td_api::make_object<td::td_api::internalLinkTypeProxy>(
- server, port, td::td_api::make_object<td::td_api::proxyTypeMtproto>(secret));
+ return td::td_api::make_object<td::td_api::internalLinkTypeProxy>(td::td_api::make_object<td::td_api::proxy>(
+ server, port, td::td_api::make_object<td::td_api::proxyTypeMtproto>(secret)));
}
static auto proxy_socks(const td::string &server, td::int32 port, const td::string &username,
const td::string &password) {
- return td::td_api::make_object<td::td_api::internalLinkTypeProxy>(
- server, port, td::td_api::make_object<td::td_api::proxyTypeSocks5>(username, password));
+ return td::td_api::make_object<td::td_api::internalLinkTypeProxy>(td::td_api::make_object<td::td_api::proxy>(
+ server, port, td::td_api::make_object<td::td_api::proxyTypeSocks5>(username, password)));
}
static auto public_chat(const td::string &chat_username, const td::string &draft_text = td::string(),