Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
20 changes: 17 additions & 3 deletions pyrogram/connection/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

from pyrogram import utils

from .transport import TCP, TCPAbridged
from .transport import TCP, TCPAbridged, TCPMTProxyAbridged, TCPMTProxyIntermediate, TCPMTProxyRandomizedIntermediate

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -51,6 +51,18 @@ def __init__(
self.media = media
self.protocol_factory = protocol_factory
self.crypto_executor_workers = crypto_executor_workers
self.is_mtproxy = False

# if isinstance(proxy, str) and proxy.lower().startswith("mtproxy://"):
# self.is_mtproxy = True

if isinstance(proxy, dict) and proxy.get("scheme", "").lower() == "mtproxy":
self.is_mtproxy = True

self.is_mtproxy_protocol_factory = bool(protocol_factory in (TCPMTProxyAbridged, TCPMTProxyIntermediate, TCPMTProxyRandomizedIntermediate))

if self.is_mtproxy and not self.is_mtproxy_protocol_factory:
self.protocol_factory = TCPMTProxyRandomizedIntermediate

self.protocol: Optional[TCP] = None

Expand All @@ -61,8 +73,10 @@ def __init__(

async def connect(self) -> None:
for i in range(Connection.MAX_CONNECTION_ATTEMPTS):
self.protocol = self.protocol_factory(ipv6=self.ipv6, proxy=self.proxy, crypto_executor_workers=self.crypto_executor_workers, loop=self.loop)

if self.is_mtproxy:
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)
else:
self.protocol = self.protocol_factory(ipv6=self.ipv6, proxy=self.proxy, crypto_executor_workers=self.crypto_executor_workers, loop=self.loop)
try:
log.info("Connecting...")
await self.protocol.connect((self.server_address, self.port))
Expand Down
1 change: 1 addition & 0 deletions pyrogram/connection/transport/tcp/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@
from .tcp_full import TCPFull
from .tcp_intermediate import TCPIntermediate
from .tcp_intermediate_o import TCPIntermediateO
from .tcp_mtproxy import TCPMTProxyAbridged, TCPMTProxyIntermediate, TCPMTProxyRandomizedIntermediate
5 changes: 3 additions & 2 deletions pyrogram/connection/transport/tcp/tcp.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class ProxyDict(TypedDict):
scheme: str
hostname: str
port: int
secret: Optional[str]
username: Optional[str]
password: Optional[str]

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

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

log.debug("Recv complete: %d bytes", len(data))
return data
return data
Loading
Loading