Improve connection status determination logic
This commit is contained in:
parent
b4f4ef986c
commit
089f5ee597
1 changed files with 21 additions and 9 deletions
|
|
@ -15,11 +15,12 @@ from pathlib import Path
|
||||||
from subprocess import CalledProcessError
|
from subprocess import CalledProcessError
|
||||||
from typing import Union, Optional, Any
|
from typing import Union, Optional, Any
|
||||||
import os
|
import os
|
||||||
|
import random
|
||||||
import re
|
import re
|
||||||
import requests
|
|
||||||
import shutil
|
import shutil
|
||||||
import socket
|
import socket
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
@ -430,14 +431,11 @@ class ConnectionController:
|
||||||
return task_output
|
return task_output
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __test_connection(port_number: Optional[int] = None, timeout: float = 10.0):
|
def __test_connection(port_number: Optional[int] = None, timeout: float = 4.0):
|
||||||
|
|
||||||
proxies = None
|
|
||||||
request_urls = [Constants.PING_URL]
|
request_urls = [Constants.PING_URL]
|
||||||
timeout = float(timeout)
|
command_name = os.path.basename(sys.executable)
|
||||||
|
proxies = None
|
||||||
if port_number is not None:
|
|
||||||
proxies = ConnectionController.get_proxies(port_number)
|
|
||||||
|
|
||||||
if os.environ.get('PING_URL') is None:
|
if os.environ.get('PING_URL') is None:
|
||||||
|
|
||||||
|
|
@ -447,14 +445,28 @@ class ConnectionController:
|
||||||
'https://hc3.hydraveil.net'
|
'https://hc3.hydraveil.net'
|
||||||
])
|
])
|
||||||
|
|
||||||
|
random.shuffle(request_urls)
|
||||||
|
|
||||||
|
if port_number is not None:
|
||||||
|
proxies = ConnectionController.get_proxies(port_number)
|
||||||
|
|
||||||
for request_url in request_urls:
|
for request_url in request_urls:
|
||||||
|
|
||||||
|
command = [
|
||||||
|
sys.executable, '-u', '-c', 'import sys; from requests import get\n'
|
||||||
|
f'response = get(\'{request_url}\', timeout={timeout}, proxies={proxies})\n'
|
||||||
|
'if response.status_code == 200:\n'
|
||||||
|
' print((response.text or \'\')[:15])\n'
|
||||||
|
'else:\n'
|
||||||
|
f' raise subprocess.CalledProcessError(1, {command_name})\n'
|
||||||
|
]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
||||||
requests.get(request_url, timeout=timeout, proxies=proxies)
|
_response = subprocess.check_output(command, text=True, timeout=timeout)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
except requests.exceptions.RequestException:
|
except (subprocess.CalledProcessError, subprocess.TimeoutExpired):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
raise ConnectionError('The connection could not be established.')
|
raise ConnectionError('The connection could not be established.')
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue