Ανάγνωση αποτελεσμάτων proxy του CFNetwork απευθείας σε C++
Χρησιμοποιήστε τα C API αναζήτησης proxy της Apple από C++ και κρατήστε ζωντανές τις δανεισμένες τιμές λεξικών χωρίς να τις απελευθερώσετε ως ιδιόκτητα αντικείμενα.
Η αναζήτηση proxy του CFNetwork είναι ένα C API που μπορεί να χρησιμοποιηθεί απευθείας από C++· η μετατροπή όλων σε αντικείμενα Objective-C είναι προαιρετική. Καλέστε το CFNetworkCopyProxiesForURL με το CFURL προορισμού και τις ρυθμίσεις από το CFNetworkCopySystemProxySettings για να λάβετε διατεταγμένα λεξικά proxy.
| Τιμή | Ιδιοκτησία |
|---|---|
| Αντικείμενα που δημιουργούνται ή επιστρέφονται από το 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· αλλιώς τελειώστε πριν απελευθερώσετε τον ιδιοκτήτη που το περιέχει.
Απελευθερώστε το δημιουργημένο/αντιγραμμένο CFURL προορισμού, το λεξικό ρυθμίσεων και τον πίνακα αποτελεσμάτων στον καθαρισμό, χρησιμοποιώντας φρουρό εμβέλειας όπου αρμόζει. Ο τύπος CFStringRef μιας μεταβλητής από μόνος του δεν παρέχει ιδιοκτησία σε αποτέλεσμα Get.