Читання результатів проксі CFNetwork безпосередньо в C++
Використовуйте C-API пошуку проксі від Apple з C++ і тримайте позичені значення словників живими, не звільняючи їх як власні об'єкти.
Пошук проксі в 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.