Update website
This commit is contained in:
parent
011b183e28
commit
41ce1aa076
23 changed files with 284 additions and 94 deletions
2
vendor/symfony/http-client/HttpOptions.php
vendored
2
vendor/symfony/http-client/HttpOptions.php
vendored
|
@ -148,6 +148,8 @@ class HttpOptions
|
|||
}
|
||||
|
||||
/**
|
||||
* @param callable(int, int, array, \Closure|null=):void $callback
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setOnProgress(callable $callback)
|
||||
|
|
12
vendor/symfony/http-client/NativeHttpClient.php
vendored
12
vendor/symfony/http-client/NativeHttpClient.php
vendored
|
@ -138,7 +138,15 @@ final class NativeHttpClient implements HttpClientInterface, LoggerAwareInterfac
|
|||
// Memoize the last progress to ease calling the callback periodically when no network transfer happens
|
||||
$lastProgress = [0, 0];
|
||||
$maxDuration = 0 < $options['max_duration'] ? $options['max_duration'] : \INF;
|
||||
$onProgress = static function (...$progress) use ($onProgress, &$lastProgress, &$info, $maxDuration) {
|
||||
$multi = $this->multi;
|
||||
$resolve = static function (string $host, ?string $ip = null) use ($multi): ?string {
|
||||
if (null !== $ip) {
|
||||
$multi->dnsCache[$host] = $ip;
|
||||
}
|
||||
|
||||
return $multi->dnsCache[$host] ?? null;
|
||||
};
|
||||
$onProgress = static function (...$progress) use ($onProgress, &$lastProgress, &$info, $maxDuration, $resolve) {
|
||||
if ($info['total_time'] >= $maxDuration) {
|
||||
throw new TransportException(sprintf('Max duration was reached for "%s".', implode('', $info['url'])));
|
||||
}
|
||||
|
@ -154,7 +162,7 @@ final class NativeHttpClient implements HttpClientInterface, LoggerAwareInterfac
|
|||
$lastProgress = $progress ?: $lastProgress;
|
||||
}
|
||||
|
||||
$onProgress($lastProgress[0], $lastProgress[1], $progressInfo);
|
||||
$onProgress($lastProgress[0], $lastProgress[1], $progressInfo, $resolve);
|
||||
};
|
||||
} elseif (0 < $options['max_duration']) {
|
||||
$maxDuration = $options['max_duration'];
|
||||
|
|
|
@ -77,9 +77,33 @@ final class NoPrivateNetworkHttpClient implements HttpClientInterface, LoggerAwa
|
|||
}
|
||||
|
||||
$subnets = $this->subnets;
|
||||
$lastUrl = '';
|
||||
$lastPrimaryIp = '';
|
||||
|
||||
$options['on_progress'] = function (int $dlNow, int $dlSize, array $info) use ($onProgress, $subnets, &$lastPrimaryIp): void {
|
||||
$options['on_progress'] = function (int $dlNow, int $dlSize, array $info, ?\Closure $resolve = null) use ($onProgress, $subnets, &$lastUrl, &$lastPrimaryIp): void {
|
||||
if ($info['url'] !== $lastUrl) {
|
||||
$host = trim(parse_url($info['url'], PHP_URL_HOST) ?: '', '[]');
|
||||
$resolve ??= static fn () => null;
|
||||
|
||||
if (($ip = $host)
|
||||
&& !filter_var($ip, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6)
|
||||
&& !filter_var($ip, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4)
|
||||
&& !$ip = $resolve($host)
|
||||
) {
|
||||
if ($ip = @(dns_get_record($host, \DNS_A)[0]['ip'] ?? null)) {
|
||||
$resolve($host, $ip);
|
||||
} elseif ($ip = @(dns_get_record($host, \DNS_AAAA)[0]['ipv6'] ?? null)) {
|
||||
$resolve($host, '['.$ip.']');
|
||||
}
|
||||
}
|
||||
|
||||
if ($ip && IpUtils::checkIp($ip, $subnets ?? self::PRIVATE_SUBNETS)) {
|
||||
throw new TransportException(sprintf('Host "%s" is blocked for "%s".', $host, $info['url']));
|
||||
}
|
||||
|
||||
$lastUrl = $info['url'];
|
||||
}
|
||||
|
||||
if ($info['primary_ip'] !== $lastPrimaryIp) {
|
||||
if ($info['primary_ip'] && IpUtils::checkIp($info['primary_ip'], $subnets ?? self::PRIVATE_SUBNETS)) {
|
||||
throw new TransportException(sprintf('IP "%s" is blocked for "%s".', $info['primary_ip'], $info['url']));
|
||||
|
|
|
@ -89,10 +89,17 @@ final class AmpResponse implements ResponseInterface, StreamableInterface
|
|||
$info['max_duration'] = $options['max_duration'];
|
||||
$info['debug'] = '';
|
||||
|
||||
$resolve = static function (string $host, ?string $ip = null) use ($multi): ?string {
|
||||
if (null !== $ip) {
|
||||
$multi->dnsCache[$host] = $ip;
|
||||
}
|
||||
|
||||
return $multi->dnsCache[$host] ?? null;
|
||||
};
|
||||
$onProgress = $options['on_progress'] ?? static function () {};
|
||||
$onProgress = $this->onProgress = static function () use (&$info, $onProgress) {
|
||||
$onProgress = $this->onProgress = static function () use (&$info, $onProgress, $resolve) {
|
||||
$info['total_time'] = microtime(true) - $info['start_time'];
|
||||
$onProgress((int) $info['size_download'], ((int) (1 + $info['download_content_length']) ?: 1) - 1, (array) $info);
|
||||
$onProgress((int) $info['size_download'], ((int) (1 + $info['download_content_length']) ?: 1) - 1, (array) $info, $resolve);
|
||||
};
|
||||
|
||||
$pauseDeferred = new Deferred();
|
||||
|
|
|
@ -156,8 +156,8 @@ final class AsyncContext
|
|||
$this->info['previous_info'][] = $info = $this->response->getInfo();
|
||||
if (null !== $onProgress = $options['on_progress'] ?? null) {
|
||||
$thisInfo = &$this->info;
|
||||
$options['on_progress'] = static function (int $dlNow, int $dlSize, array $info) use (&$thisInfo, $onProgress) {
|
||||
$onProgress($dlNow, $dlSize, $thisInfo + $info);
|
||||
$options['on_progress'] = static function (int $dlNow, int $dlSize, array $info, ?\Closure $resolve = null) use (&$thisInfo, $onProgress) {
|
||||
$onProgress($dlNow, $dlSize, $thisInfo + $info, $resolve);
|
||||
};
|
||||
}
|
||||
if (0 < ($info['max_duration'] ?? 0) && 0 < ($info['total_time'] ?? 0)) {
|
||||
|
|
|
@ -51,8 +51,8 @@ final class AsyncResponse implements ResponseInterface, StreamableInterface
|
|||
|
||||
if (null !== $onProgress = $options['on_progress'] ?? null) {
|
||||
$thisInfo = &$this->info;
|
||||
$options['on_progress'] = static function (int $dlNow, int $dlSize, array $info) use (&$thisInfo, $onProgress) {
|
||||
$onProgress($dlNow, $dlSize, $thisInfo + $info);
|
||||
$options['on_progress'] = static function (int $dlNow, int $dlSize, array $info, ?\Closure $resolve = null) use (&$thisInfo, $onProgress) {
|
||||
$onProgress($dlNow, $dlSize, $thisInfo + $info, $resolve);
|
||||
};
|
||||
}
|
||||
$this->response = $client->request($method, $url, ['buffer' => false] + $options);
|
||||
|
|
|
@ -115,13 +115,20 @@ final class CurlResponse implements ResponseInterface, StreamableInterface
|
|||
curl_pause($ch, \CURLPAUSE_CONT);
|
||||
|
||||
if ($onProgress = $options['on_progress']) {
|
||||
$resolve = static function (string $host, ?string $ip = null) use ($multi): ?string {
|
||||
if (null !== $ip) {
|
||||
$multi->dnsCache->hostnames[$host] = $ip;
|
||||
}
|
||||
|
||||
return $multi->dnsCache->hostnames[$host] ?? null;
|
||||
};
|
||||
$url = isset($info['url']) ? ['url' => $info['url']] : [];
|
||||
curl_setopt($ch, \CURLOPT_NOPROGRESS, false);
|
||||
curl_setopt($ch, \CURLOPT_PROGRESSFUNCTION, static function ($ch, $dlSize, $dlNow) use ($onProgress, &$info, $url, $multi, $debugBuffer) {
|
||||
curl_setopt($ch, \CURLOPT_PROGRESSFUNCTION, static function ($ch, $dlSize, $dlNow) use ($onProgress, &$info, $url, $multi, $debugBuffer, $resolve) {
|
||||
try {
|
||||
rewind($debugBuffer);
|
||||
$debug = ['debug' => stream_get_contents($debugBuffer)];
|
||||
$onProgress($dlNow, $dlSize, $url + curl_getinfo($ch) + $info + $debug);
|
||||
$onProgress($dlNow, $dlSize, $url + curl_getinfo($ch) + $info + $debug, $resolve);
|
||||
} catch (\Throwable $e) {
|
||||
$multi->handlesActivity[(int) $ch][] = null;
|
||||
$multi->handlesActivity[(int) $ch][] = $e;
|
||||
|
|
|
@ -58,11 +58,11 @@ final class TraceableHttpClient implements HttpClientInterface, ResetInterface,
|
|||
$content = false;
|
||||
}
|
||||
|
||||
$options['on_progress'] = function (int $dlNow, int $dlSize, array $info) use (&$traceInfo, $onProgress) {
|
||||
$options['on_progress'] = function (int $dlNow, int $dlSize, array $info, ?\Closure $resolve = null) use (&$traceInfo, $onProgress) {
|
||||
$traceInfo = $info;
|
||||
|
||||
if (null !== $onProgress) {
|
||||
$onProgress($dlNow, $dlSize, $info);
|
||||
$onProgress($dlNow, $dlSize, $info, $resolve);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue