Skip to content

Commit b13c6f2

Browse files
committed
Added MtProxy Support
1 parent e311c9e commit b13c6f2

6 files changed

Lines changed: 608 additions & 5 deletions

File tree

pyrogram/connection/connection.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
from pyrogram import utils
2424

25-
from .transport import TCP, TCPAbridged
25+
from .transport import TCP, TCPAbridged, TCPMTProxyAbridged, TCPMTProxyIntermediate, TCPMTProxyRandomizedIntermediate
2626

2727
log = logging.getLogger(__name__)
2828

@@ -51,6 +51,15 @@ def __init__(
5151
self.media = media
5252
self.protocol_factory = protocol_factory
5353
self.crypto_executor_workers = crypto_executor_workers
54+
self.is_mtproxy = False
55+
56+
# if isinstance(proxy, str) and proxy.lower().startswith("mtproxy://"):
57+
# self.is_mtproxy = True
58+
59+
if isinstance(proxy, dict) and proxy.get("scheme", "").lower() == "mtproxy":
60+
self.is_mtproxy = True
61+
62+
self.is_mtproxy_protocol_factory = bool(protocol_factory in (TCPMTProxyAbridged, TCPMTProxyIntermediate, TCPMTProxyRandomizedIntermediate))
5463

5564
self.protocol: Optional[TCP] = None
5665

@@ -61,8 +70,13 @@ def __init__(
6170

6271
async def connect(self) -> None:
6372
for i in range(Connection.MAX_CONNECTION_ATTEMPTS):
64-
self.protocol = self.protocol_factory(ipv6=self.ipv6, proxy=self.proxy, crypto_executor_workers=self.crypto_executor_workers, loop=self.loop)
65-
73+
if self.is_mtproxy:
74+
if not self.is_mtproxy_protocol_factory:
75+
self.protocol = TCPMTProxyRandomizedIntermediate(dc_id=self.dc_id, ipv6=self.ipv6, proxy=self.proxy, crypto_executor_workers=self.crypto_executor_workers, loop=self.loop)
76+
else:
77+
self.protocol = self.protocol_factory(dc_id=self.dc_id, ipv6=self.ipv6, proxy=self.proxy, crypto_executor_workers=self.crypto_executor_workers, loop=self.loop)
78+
else:
79+
self.protocol = self.protocol_factory(ipv6=self.ipv6, proxy=self.proxy, crypto_executor_workers=self.crypto_executor_workers, loop=self.loop)
6680
try:
6781
log.info("Connecting...")
6882
await self.protocol.connect((self.server_address, self.port))

pyrogram/connection/transport/tcp/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@
2222
from .tcp_full import TCPFull
2323
from .tcp_intermediate import TCPIntermediate
2424
from .tcp_intermediate_o import TCPIntermediateO
25+
from .tcp_mtproxy import TCPMTProxyAbridged, TCPMTProxyIntermediate, TCPMTProxyRandomizedIntermediate

pyrogram/connection/transport/tcp/tcp.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class ProxyDict(TypedDict):
3636
scheme: str
3737
hostname: str
3838
port: int
39+
secret: Optional[str]
3940
username: Optional[str]
4041
password: Optional[str]
4142

@@ -154,7 +155,7 @@ async def _connect_via_direct(self, destination: Tuple[str, int]) -> None:
154155
log.info("Connection established")
155156

156157
async def _connect(self, destination: Tuple[str, int]) -> None:
157-
if self.proxy:
158+
if self.proxy and isinstance(self.proxy, dict) and self.proxy.get("scheme", "").lower() != "mtproxy":
158159
await self._connect_via_proxy(destination)
159160
else:
160161
await self._connect_via_direct(destination)
@@ -245,4 +246,4 @@ async def recv(self, length: int = 0) -> Optional[bytes]:
245246
return None
246247

247248
log.debug("Recv complete: %d bytes", len(data))
248-
return data
249+
return data

0 commit comments

Comments
 (0)