|
|
|
@ -27,52 +27,52 @@ class IRCClientService: |
|
|
|
self.srv_task = None |
|
|
|
self.srv_task = None |
|
|
|
self.stop_task = None |
|
|
|
self.stop_task = None |
|
|
|
|
|
|
|
|
|
|
|
async def _create_connection(self, wait_sec): |
|
|
|
async def _create_conn(self, sslc): |
|
|
|
loop = self.loop |
|
|
|
self.transport, self.protocol = await self.loop.create_connection( |
|
|
|
proxy = self.proxy |
|
|
|
self.factory.buildProtocol, self.host, self.port, |
|
|
|
|
|
|
|
ssl=sslc) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def _proxy_create_conn(self, sslc): |
|
|
|
|
|
|
|
self.transport, self.protocol = await self.proxy.create_connection( |
|
|
|
|
|
|
|
self.factory.buildProtocol, self.host, self.port, |
|
|
|
|
|
|
|
ssl=sslc) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def _start_service(self, wait_sec): |
|
|
|
if self.stop_task and not self.stop_task.done(): |
|
|
|
if self.stop_task and not self.stop_task.done(): |
|
|
|
await self.stop_task |
|
|
|
await self.stop_task |
|
|
|
self.stop_task = None |
|
|
|
self.stop_task = None |
|
|
|
|
|
|
|
|
|
|
|
async def create_conn(sslc): |
|
|
|
|
|
|
|
self.transport, self.protocol = await loop.create_connection( |
|
|
|
|
|
|
|
self.factory.buildProtocol, self.host, self.port, |
|
|
|
|
|
|
|
ssl=sslc) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def proxy_create_conn(sslc): |
|
|
|
|
|
|
|
self.transport, self.protocol = await proxy.create_connection( |
|
|
|
|
|
|
|
self.factory.buildProtocol, self.host, self.port, |
|
|
|
|
|
|
|
ssl=sslc) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await asyncio.sleep(wait_sec) |
|
|
|
await asyncio.sleep(wait_sec) |
|
|
|
try: |
|
|
|
try: |
|
|
|
|
|
|
|
|
|
|
|
sslc = None |
|
|
|
sslc = None |
|
|
|
if self.usessl: |
|
|
|
if self.usessl: |
|
|
|
sslc = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_CLIENT) |
|
|
|
sslc = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_CLIENT) |
|
|
|
sslc.check_hostname = False |
|
|
|
sslc.check_hostname = False |
|
|
|
sslc.verify_mode = ssl.CERT_NONE |
|
|
|
sslc.verify_mode = ssl.CERT_NONE |
|
|
|
if self.socks5: |
|
|
|
if self.socks5: |
|
|
|
await asyncio.wait_for(proxy_create_conn(sslc), timeout=60) |
|
|
|
await asyncio.wait_for(self._proxy_create_conn(sslc), |
|
|
|
|
|
|
|
timeout=60) |
|
|
|
else: |
|
|
|
else: |
|
|
|
await asyncio.wait_for(create_conn(sslc), timeout=30) |
|
|
|
await asyncio.wait_for(self._create_conn(sslc), timeout=30) |
|
|
|
except BaseException as e: |
|
|
|
except BaseException as e: |
|
|
|
self.logger.error(f'create_connection: {repr(e)}') |
|
|
|
self.logger.error(f'_start_service: {repr(e)}') |
|
|
|
self.factory.clientConnectionFailed(str(e)) |
|
|
|
self.factory.clientConnectionFailed(str(e)) |
|
|
|
|
|
|
|
|
|
|
|
def startService(self): |
|
|
|
def startService(self): |
|
|
|
wait_sec = 5 if self.stop_task else 0 |
|
|
|
wait_sec = 5 if self.stop_task else 0 |
|
|
|
self.srv_task = asyncio.create_task(self._create_connection(wait_sec)) |
|
|
|
self.srv_task = asyncio.create_task(self._start_service(wait_sec)) |
|
|
|
|
|
|
|
|
|
|
|
async def _stop_service(self): |
|
|
|
async def _stop_service(self): |
|
|
|
if self.srv_task and not self.srv_task.done(): |
|
|
|
try: |
|
|
|
self.srv_task.cancel() |
|
|
|
if self.srv_task and not self.srv_task.done(): |
|
|
|
self.srv_task = None |
|
|
|
self.srv_task.cancel() |
|
|
|
|
|
|
|
self.srv_task = None |
|
|
|
|
|
|
|
|
|
|
|
if self.transport: |
|
|
|
if self.transport: |
|
|
|
self.transport.close() |
|
|
|
self.transport.close() |
|
|
|
self.transport = None |
|
|
|
self.transport = None |
|
|
|
self.protocol = None |
|
|
|
self.protocol = None |
|
|
|
|
|
|
|
except BaseException as e: |
|
|
|
|
|
|
|
self.logger.error(f'_stop_service: {repr(e)}') |
|
|
|
|
|
|
|
|
|
|
|
def stopService(self): |
|
|
|
def stopService(self): |
|
|
|
self.stop_task = asyncio.create_task(self._stop_service()) |
|
|
|
self.stop_task = asyncio.create_task(self._stop_service()) |
|
|
|
|