Leer los resultados de proxy de CFNetwork directamente en C++
Use las API C de búsqueda de proxy de Apple desde C++ y mantenga vivos los valores de diccionario prestados sin liberarlos como objetos propios.
La búsqueda de proxy de CFNetwork es una API C que se puede usar directamente desde C++; convertir todo en objetos Objective-C es opcional. Llame a CFNetworkCopyProxiesForURL con el CFURL de destino y los ajustes de CFNetworkCopySystemProxySettings para obtener diccionarios de proxy ordenados.
| Valor | Propiedad |
|---|---|
| Objetos creados o devueltos por Copy, incluidas rutas y ajustes | Propiedad del llamador; libere cada objeto propio distinto de null |
| Diccionario del arreglo o nombre de host del diccionario mediante Get | Prestado; no lo libere sin haberlo retenido |
Para routes válidos y un índice dentro del rango, la extracción puede ser:
CFDictionaryRef proxy = static_cast<CFDictionaryRef>(
CFArrayGetValueAtIndex(routes, index));
CFStringRef hostname = static_cast<CFStringRef>(
CFDictionaryGetValue(proxy, kCFProxyHostNameKey));
Lea kCFProxyTypeKey antes de tratar la entrada como un extremo. Los candidatos directos y los de configuración automática requieren un tratamiento distinto.
Convierta el nombre de host CFString y el puerto CFNumber de una entrada concreta mientras el propietario siga vivo. Los valores C++ extraídos pueden pasar después a la configuración del transporte. Para conservar el propio CFString más allá del resultado, reténgalo primero y compense después con CFRelease; de lo contrario, termine antes de liberar el propietario que lo contiene.
Libere la URL de destino creada/copiada, el diccionario de ajustes y el arreglo de resultados al limpiar, usando un guard de ámbito si procede. El tipo CFStringRef de una variable por sí solo no otorga propiedad sobre un resultado de Get.