Вход Регистрация
Файл: vendor/symfony/var-dumper/Caster/AddressInfoCaster.php
Строк: 43
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentVarDumperCaster;

use 
SymfonyComponentVarDumperClonerStub;

/**
 * @author Nicolas Grekas <p@tchwork.com>
 *
 * @internal since Symfony 7.3
 */
final class AddressInfoCaster
{
    private const 
MAPS = [
        
'ai_flags' => [
            
=> 'AI_PASSIVE',
            
=> 'AI_CANONNAME',
            
=> 'AI_NUMERICHOST',
            
=> 'AI_V4MAPPED',
            
16 => 'AI_ALL',
            
32 => 'AI_ADDRCONFIG',
            
64 => 'AI_IDN',
            
128 => 'AI_CANONIDN',
            
1024 => 'AI_NUMERICSERV',
        ],
        
'ai_family' => [
            
=> 'AF_UNIX',
            
=> 'AF_INET',
            
10 => 'AF_INET6',
            
44 => 'AF_DIVERT',
        ],
        
'ai_socktype' => [
            
=> 'SOCK_STREAM',
            
=> 'SOCK_DGRAM',
            
=> 'SOCK_RAW',
            
=> 'SOCK_RDM',
            
=> 'SOCK_SEQPACKET',
        ],
        
'ai_protocol' => [
            
=> 'SOL_SOCKET',
            
=> 'SOL_TCP',
            
17 => 'SOL_UDP',
            
136 => 'SOL_UDPLITE',
        ],
    ];

    public static function 
castAddressInfo(AddressInfo $h, array $aStub $stubbool $isNested): array
    {
        static 
$resolvedMaps;

        if (!
$resolvedMaps) {
            foreach (
self::MAPS as $k => $map) {
                foreach (
$map as $v => $name) {
                    if (
defined($name)) {
                        
$resolvedMaps[$k][constant($name)] = $name;
                    } elseif (!isset(
$resolvedMaps[$k][$v])) {
                        
$resolvedMaps[$k][$v] = $name;
                    }
                }
            }
        }

        foreach (
socket_addrinfo_explain($h) as $k => $v) {
            
$a[Caster::PREFIX_VIRTUAL.$k] = match (true) {
                
'ai_flags' === $k => ConstStub::fromBitfield($v$resolvedMaps[$k]),
                isset(
$resolvedMaps[$k][$v]) => new ConstStub($resolvedMaps[$k][$v], $v),
                default => 
$v,
            };
        }

        return 
$a;
    }
}
Онлайн: 1
Реклама