Поиск прокси в CFNetwork — это C-API, которое можно использовать напрямую из C++; преобразовывать всё в объекты Objective-C необязательно. Вызовите CFNetworkCopyProxiesForURL с целевым CFURL и настройками из CFNetworkCopySystemProxySettings, чтобы получить упорядоченные словари прокси.

ЗначениеВладение
Объекты, созданные или возвращённые Copy, включая маршруты и настройкиПринадлежат вызывающему; освобождайте каждый принадлежащий объект, не равный null
Словарь из массива или имя хоста из словаря через GetЗаимствовано; не освобождайте, предварительно не сохранив владение

Для корректных routes и индекса в допустимом диапазоне извлечение может выглядеть так:

CFDictionaryRef proxy = static_cast<CFDictionaryRef>(
    CFArrayGetValueAtIndex(routes, index));
CFStringRef hostname = static_cast<CFStringRef>(
    CFDictionaryGetValue(proxy, kCFProxyHostNameKey));

Прочитайте kCFProxyTypeKey, прежде чем рассматривать запись как конечную точку. Прямые кандидаты и кандидаты автоматической конфигурации требуют разной обработки.

Преобразуйте имя хоста CFString и порт CFNumber конкретной записи, пока владелец жив. Извлечённые значения C++ затем могут попасть в конфигурацию транспорта. Чтобы сохранить сам CFString после результата, сначала сохраните его, а затем уравновесьте это с помощью CFRelease; иначе завершите работу до освобождения содержащего его владельца.

При очистке освободите созданный/скопированный целевой URL, словарь настроек и массив результатов, используя при необходимости защиту области видимости. Один лишь тип CFStringRef переменной не даёт владения результатом Get.

Похожие статьи