Improve connection status determination logic
This commit is contained in:
parent
b4f4ef986c
commit
7a3f2e7596
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 requests, sys\n'
|
||||||
|
'try:\n'
|
||||||
|
f' response = requests.get(\'{request_url}\', timeout={timeout}, proxies={proxies})\n'
|
||||||
|
' response.raise_for_status(); print((response.text or \'\')[:15])\n'
|
||||||
|
'except requests.exceptions.RequestException:\n'
|
||||||
|
' sys.exit(1)'
|
||||||
|
]
|
||||||
|
|
||||||
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