CFNetwork-Proxyergebnisse direkt in C++ lesen
Nutzen Sie Apples C-Proxy-Lookup-APIs aus C++ und halten Sie geliehene Dictionary-Werte am Leben, ohne sie als eigene Objekte freizugeben.
Die Proxy-Suche von CFNetwork ist eine C-API, die sich direkt aus C++ verwenden lässt; alles in Objective-C-Objekte umzuwandeln ist optional. Rufen Sie CFNetworkCopyProxiesForURL mit der Ziel-CFURL und den Einstellungen aus CFNetworkCopySystemProxySettings auf, um geordnete Proxy-Dictionaries zu erhalten.
| Wert | Eigentum |
|---|---|
| Von Copy erzeugte oder zurückgegebene Objekte, einschließlich Routen und Einstellungen | Eigentum des Aufrufers; jedes eigene Objekt ungleich null freigeben |
| Dictionary aus dem Array bzw. Hostname aus dem Dictionary über Get | Geliehen; nicht freigeben, ohne es zuvor behalten zu haben |
Für gültige routes und einen Index im gültigen Bereich kann das Auslesen so aussehen:
CFDictionaryRef proxy = static_cast<CFDictionaryRef>(
CFArrayGetValueAtIndex(routes, index));
CFStringRef hostname = static_cast<CFStringRef>(
CFDictionaryGetValue(proxy, kCFProxyHostNameKey));
Lesen Sie kCFProxyTypeKey, bevor Sie den Eintrag als Endpunkt behandeln. Direkte Kandidaten und solche der automatischen Konfiguration erfordern unterschiedliche Behandlung.
Wandeln Sie Hostname (CFString) und Port (CFNumber) eines konkreten Eintrags um, solange der Eigentümer lebt. Ausgelesene C++-Werte können dann in die Konfiguration des Transports einfließen. Um den CFString selbst über das Ergebnis hinaus zu behalten, behalten Sie ihn zuerst und gleichen das später mit CFRelease aus; andernfalls sind Sie fertig, bevor Sie den enthaltenden Eigentümer freigeben.
Geben Sie beim Aufräumen die erzeugte/kopierte Ziel-URL, das Einstellungs-Dictionary und das Ergebnis-Array frei, gegebenenfalls mit einem Scope Guard. Der Typ CFStringRef einer Variablen allein verleiht kein Eigentum an einem Get-Ergebnis.