policyChecker->find($userId, $host, $port, $protocol); if ($policy === null) { return new RouteDecision(false, 'reject', null, null, 'policy_denied'); } $routeType = (string)($policy['route_type'] ?? 'reject'); $nodeId = $policy['node_id'] ?? null; if (($routeType === 'agent' || $routeType === 'border') && $protocol !== 'udp') { $nodeId = is_string($nodeId) && $nodeId !== '' ? $nodeId : $routeHint; if (!is_string($nodeId) || $nodeId === '') { return new RouteDecision(false, 'reject', null, (string)$policy['policy_id'], 'route_not_found'); } if (!$this->nodeRegistry->isOnline($nodeId)) { return new RouteDecision(false, 'reject', $nodeId, (string)$policy['policy_id'], 'node_offline'); } } return new RouteDecision(true, $routeType, $nodeId, (string)$policy['policy_id']); } }