Ler os resultados de proxy do CFNetwork diretamente em C++
Use as APIs C de pesquisa de proxy da Apple a partir do C++ e mantenha vivos os valores de dicionário emprestados sem liberá-los como objetos próprios.
A pesquisa de proxy do CFNetwork é uma API C que pode ser usada diretamente do C++; converter tudo em objetos Objective-C é opcional. Chame CFNetworkCopyProxiesForURL com o CFURL de destino e as configurações de CFNetworkCopySystemProxySettings para obter dicionários de proxy ordenados.
| Valor | Propriedade |
|---|---|
| Objetos criados ou retornados por Copy, incluindo rotas e configurações | Propriedade do chamador; libere cada objeto próprio diferente de null |
| Dicionário do array ou nome de host do dicionário via Get | Emprestado; não o libere sem tê-lo retido antes |
Para routes válidos e um índice dentro do intervalo, a extração pode ser:
CFDictionaryRef proxy = static_cast<CFDictionaryRef>(
CFArrayGetValueAtIndex(routes, index));
CFStringRef hostname = static_cast<CFStringRef>(
CFDictionaryGetValue(proxy, kCFProxyHostNameKey));
Leia kCFProxyTypeKey antes de tratar a entrada como um endpoint. Os candidatos diretos e os de configuração automática exigem tratamento diferente.
Converta o nome de host CFString e a porta CFNumber de uma entrada concreta enquanto o proprietário permanece vivo. Os valores C++ extraídos podem então entrar na configuração do transporte. Para reter o próprio CFString além do resultado, retenha-o primeiro e equilibre isso depois com CFRelease; caso contrário, termine antes de liberar o proprietário que o contém.
Libere o URL de destino criado/copiado, o dicionário de configurações e o array de resultados na limpeza, usando um guard de escopo se for o caso. Apenas o tipo CFStringRef de uma variável não concede propriedade sobre um resultado de Get.