annotate Mac/Modules/_scproxy.c @ 58765:2ba7677bfa95 legacy-trunk

testCopysign was defined twice in test_math; combine the definitions
author Mark Dickinson <dickinsm@gmail.com>
date Sat, 06 Feb 2010 23:11:25 +0000
parents 1db6ee9d7be7
children 725be8f9418b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
56141
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
1 /*
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
2 * Helper method for urllib to fetch the proxy configuration settings
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
3 * using the SystemConfiguration framework.
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
4 */
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
5 #include <Python.h>
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
6 #include <SystemConfiguration/SystemConfiguration.h>
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
7
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
8 static int32_t
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
9 cfnum_to_int32(CFNumberRef num)
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
10 {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
11 int32_t result;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
12
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
13 CFNumberGetValue(num, kCFNumberSInt32Type, &result);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
14 return result;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
15 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
16
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
17 static PyObject*
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
18 cfstring_to_pystring(CFStringRef ref)
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
19 {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
20 const char* s;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
21
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
22 s = CFStringGetCStringPtr(ref, kCFStringEncodingUTF8);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
23 if (s) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
24 return PyString_FromString(s);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
25
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
26 } else {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
27 CFIndex len = CFStringGetLength(ref);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
28 Boolean ok;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
29 PyObject* result;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
30 result = PyString_FromStringAndSize(NULL, len*4);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
31
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
32 ok = CFStringGetCString(ref,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
33 PyString_AS_STRING(result),
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
34 PyString_GET_SIZE(result),
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
35 kCFStringEncodingUTF8);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
36 if (!ok) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
37 Py_DECREF(result);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
38 return NULL;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
39 } else {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
40 _PyString_Resize(&result,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
41 strlen(PyString_AS_STRING(result)));
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
42 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
43 return result;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
44 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
45 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
46
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
47
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
48 static PyObject*
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
49 get_proxy_settings(PyObject* mod __attribute__((__unused__)))
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
50 {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
51 CFDictionaryRef proxyDict = NULL;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
52 CFNumberRef aNum = NULL;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
53 CFArrayRef anArray = NULL;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
54 PyObject* result = NULL;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
55 PyObject* v;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
56 int r;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
57
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
58 proxyDict = SCDynamicStoreCopyProxies(NULL);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
59 if (!proxyDict) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
60 Py_INCREF(Py_None);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
61 return Py_None;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
62 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
63
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
64 result = PyDict_New();
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
65 if (result == NULL) goto error;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
66
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
67 aNum = CFDictionaryGetValue(proxyDict,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
68 kSCPropNetProxiesExcludeSimpleHostnames);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
69 if (aNum == NULL) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
70 v = PyBool_FromLong(0);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
71 } else {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
72 v = PyBool_FromLong(cfnum_to_int32(aNum));
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
73 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
74 if (v == NULL) goto error;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
75
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
76 r = PyDict_SetItemString(result, "exclude_simple", v);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
77 Py_DECREF(v); v = NULL;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
78 if (r == -1) goto error;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
79
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
80 anArray = CFDictionaryGetValue(proxyDict,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
81 kSCPropNetProxiesExceptionsList);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
82 if (anArray != NULL) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
83 CFIndex len = CFArrayGetCount(anArray);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
84 CFIndex i;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
85 v = PyTuple_New(len);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
86 if (v == NULL) goto error;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
87
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
88 r = PyDict_SetItemString(result, "exceptions", v);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
89 Py_DECREF(v);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
90 if (r == -1) goto error;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
91
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
92 for (i = 0; i < len; i++) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
93 CFStringRef aString = NULL;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
94
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
95 aString = CFArrayGetValueAtIndex(anArray, i);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
96 if (aString == NULL) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
97 PyTuple_SetItem(v, i, Py_None);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
98 Py_INCREF(Py_None);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
99 } else {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
100 PyObject* t = cfstring_to_pystring(aString);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
101 if (!t) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
102 PyTuple_SetItem(v, i, Py_None);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
103 Py_INCREF(Py_None);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
104 } else {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
105 PyTuple_SetItem(v, i, t);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
106 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
107 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
108 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
109 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
110
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
111 CFRelease(proxyDict);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
112 return result;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
113
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
114 error:
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
115 if (proxyDict) CFRelease(proxyDict);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
116 Py_XDECREF(result);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
117 return NULL;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
118 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
119
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
120 static int
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
121 set_proxy(PyObject* proxies, char* proto, CFDictionaryRef proxyDict,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
122 CFStringRef enabledKey,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
123 CFStringRef hostKey, CFStringRef portKey)
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
124 {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
125 CFNumberRef aNum;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
126
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
127 aNum = CFDictionaryGetValue(proxyDict, enabledKey);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
128 if (aNum && cfnum_to_int32(aNum)) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
129 CFStringRef hostString;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
130
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
131 hostString = CFDictionaryGetValue(proxyDict, hostKey);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
132 aNum = CFDictionaryGetValue(proxyDict, portKey);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
133
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
134 if (hostString) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
135 int r;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
136 PyObject* h = cfstring_to_pystring(hostString);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
137 PyObject* v;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
138 if (h) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
139 if (aNum) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
140 int32_t port = cfnum_to_int32(aNum);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
141 v = PyString_FromFormat("http://%s:%ld",
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
142 PyString_AS_STRING(h),
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
143 (long)port);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
144 } else {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
145 v = PyString_FromFormat("http://%s",
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
146 PyString_AS_STRING(h));
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
147 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
148 Py_DECREF(h);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
149 if (!v) return -1;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
150 r = PyDict_SetItemString(proxies, proto,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
151 v);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
152 Py_DECREF(v);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
153 return r;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
154 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
155 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
156
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
157 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
158 return 0;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
159 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
160
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
161
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
162
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
163 static PyObject*
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
164 get_proxies(PyObject* mod __attribute__((__unused__)))
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
165 {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
166 PyObject* result = NULL;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
167 int r;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
168 CFDictionaryRef proxyDict = NULL;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
169
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
170 proxyDict = SCDynamicStoreCopyProxies(NULL);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
171 if (proxyDict == NULL) {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
172 return PyDict_New();
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
173 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
174
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
175 result = PyDict_New();
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
176 if (result == NULL) goto error;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
177
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
178 r = set_proxy(result, "http", proxyDict,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
179 kSCPropNetProxiesHTTPEnable,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
180 kSCPropNetProxiesHTTPProxy,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
181 kSCPropNetProxiesHTTPPort);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
182 if (r == -1) goto error;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
183 r = set_proxy(result, "https", proxyDict,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
184 kSCPropNetProxiesHTTPSEnable,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
185 kSCPropNetProxiesHTTPSProxy,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
186 kSCPropNetProxiesHTTPSPort);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
187 if (r == -1) goto error;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
188 r = set_proxy(result, "ftp", proxyDict,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
189 kSCPropNetProxiesFTPEnable,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
190 kSCPropNetProxiesFTPProxy,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
191 kSCPropNetProxiesFTPPort);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
192 if (r == -1) goto error;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
193 r = set_proxy(result, "gopher", proxyDict,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
194 kSCPropNetProxiesGopherEnable,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
195 kSCPropNetProxiesGopherProxy,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
196 kSCPropNetProxiesGopherPort);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
197 if (r == -1) goto error;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
198
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
199 CFRelease(proxyDict);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
200 return result;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
201 error:
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
202 if (proxyDict) CFRelease(proxyDict);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
203 Py_XDECREF(result);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
204 return NULL;
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
205 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
206
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
207 static PyMethodDef mod_methods[] = {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
208 {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
209 "_get_proxy_settings",
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
210 (PyCFunction)get_proxy_settings,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
211 METH_NOARGS,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
212 NULL,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
213 },
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
214 {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
215 "_get_proxies",
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
216 (PyCFunction)get_proxies,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
217 METH_NOARGS,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
218 NULL,
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
219 },
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
220 { 0, 0, 0, 0 }
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
221 };
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
222
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
223 void init_scproxy(void)
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
224 {
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
225 (void)Py_InitModule4("_scproxy", mod_methods, NULL, NULL, PYTHON_API_VERSION);
1db6ee9d7be7 r74963 didn't include the merger of _scproxy.c
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
diff changeset
226 }