Llegir els resultats de proxy de CFNetwork directament en C++
Utilitzeu les API C d'Apple per cercar proxies des de C++ i manteniu vius els valors de diccionari manllevats sense alliberar-los com a objectes propis.
La cerca de proxy de CFNetwork és una API C que es pot utilitzar directament des de C++; convertir-ho tot en objectes Objective-C és opcional. Crideu CFNetworkCopyProxiesForURL amb el CFURL objectiu i la configuració de CFNetworkCopySystemProxySettings per obtenir diccionaris de proxy ordenats.
| Valor | Propietat |
|---|---|
| Objectes creats o retornats per Copy, incloent-hi rutes i configuració | Propietat del cridador; allibereu cada objecte propi no nul |
| Diccionari de la matriu o nom d'amfitrió del diccionari mitjançant Get | Manllevat; no l'allibereu sense haver-lo retingut |
Per a routes vàlids i un índex dins del rang, l'extracció pot ser:
CFDictionaryRef proxy = static_cast<CFDictionaryRef>(
CFArrayGetValueAtIndex(routes, index));
CFStringRef hostname = static_cast<CFStringRef>(
CFDictionaryGetValue(proxy, kCFProxyHostNameKey));
Llegiu kCFProxyTypeKey abans de tractar l'entrada com a punt final. Els candidats directes i els d'autoconfiguració requereixen un tractament diferent.
Convertiu el nom d'amfitrió CFString i el port CFNumber d'una entrada concreta mentre el propietari continua viu. Els valors C++ extrets poden entrar després a la configuració del transport. Per retenir el CFString mateix més enllà del resultat, reteniu-lo primer i després compenseu-ho amb CFRelease; altrament, acabeu abans d'alliberar el propietari que el conté.
Allibereu l'URL objectiu creat/copiat, el diccionari de configuració i la matriu de resultats en netejar, fent servir un guard d'àmbit si escau. El tipus CFStringRef d'una variable per si sol no atorga propietat sobre un resultat de Get.