-
Notifications
You must be signed in to change notification settings - Fork 70
Expand file tree
/
Copy pathproxy.cpp
More file actions
56 lines (49 loc) · 1.6 KB
/
Copy pathproxy.cpp
File metadata and controls
56 lines (49 loc) · 1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <Python.h>
#include "helpers.h"
#include "proxy.h"
int proxy_settings_parse(PyObject *obj, ProxySettings *settings) {
settings->mode = PROXY_MODE_AUTO;
settings->proxy_list = NULL;
settings->username = NULL;
settings->password = NULL;
if (!obj || Py_Is(obj, Py_GetConstantBorrowed(Py_CONSTANT_NONE))) {
return 1;
}
int mode;
if (!PyArg_ParseTuple(
obj,
"iO&O&O&:proxy_settings",
&mode,
as_utf16, &settings->proxy_list,
as_utf16, &settings->username,
as_utf16, &settings->password
)) {
// PyArg_ParseTuple calls cleanup for successful O& converters when a
// later conversion fails, so these pointers no longer own memory.
settings->proxy_list = NULL;
settings->username = NULL;
settings->password = NULL;
return 0;
}
if (mode < PROXY_MODE_AUTO || mode > PROXY_MODE_OVERRIDE) {
PyErr_SetString(PyExc_ValueError, "invalid proxy mode");
proxy_settings_clear(settings);
return 0;
}
settings->mode = (ProxyMode)mode;
if (settings->mode == PROXY_MODE_OVERRIDE && !settings->proxy_list) {
PyErr_SetString(PyExc_ValueError, "proxy override requires a proxy list");
proxy_settings_clear(settings);
return 0;
}
return 1;
}
void proxy_settings_clear(ProxySettings *settings) {
PyMem_Free(settings->proxy_list);
PyMem_Free(settings->username);
PyMem_Free(settings->password);
settings->mode = PROXY_MODE_AUTO;
settings->proxy_list = NULL;
settings->username = NULL;
settings->password = NULL;
}