$ErrorActionPreference = 'Continue' $testLog = 'C:\Apache24\htdocs\.codex_tmp\airmax_tls_timing_test.log' $protonClient = 'C:\Program Files\Proton\VPN\v5.1.5\ProtonVPN.Client.exe' $protonDirectory = Split-Path -Parent $protonClient function Write-TestLog([string]$message) { Add-Content -LiteralPath $testLog -Value (('{0} {1}' -f (Get-Date -Format 'yyyy-MM-dd HH:mm:ss.fff'), $message)) -Encoding UTF8 } Set-Content -LiteralPath $testLog -Value '' -Encoding UTF8 Write-TestLog 'BEGIN TLS timing test' try { Get-Process -Name 'ProtonVPN.Client' -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue Start-Sleep -Milliseconds 750 Stop-Service -Name 'ProtonVPN Service' -Force -ErrorAction Continue Start-Sleep -Seconds 2 $format = 'http=%{http_code} remote=%{remote_ip} connect=%{time_connect} tls=%{time_appconnect} first_byte=%{time_starttransfer} total=%{time_total}' foreach ($url in @( 'http://10.30.99.22/', 'http://10.30.99.22/status.cgi', 'https://10.30.99.25/', 'https://10.30.99.25/status.cgi' )) { $result = & curl.exe -k -sS -o NUL --connect-timeout 20 --max-time 30 -w $format $url 2>&1 Write-TestLog ("CURL_GET url=$url exit=$LASTEXITCODE result=" + ($result -join ' | ')) } } catch { Write-TestLog ("ERROR " + $_.Exception.GetBaseException().Message) } finally { Start-Service -Name 'ProtonVPN Service' -ErrorAction Continue Start-Sleep -Seconds 2 if (Test-Path -LiteralPath $protonClient) { Start-Process -FilePath $protonClient -WorkingDirectory $protonDirectory -WindowStyle Hidden } Start-Sleep -Seconds 12 Write-TestLog 'END TLS timing test; Proton restored' }