From 24ca799248e4ed11ed00617170865b2784bf964b Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 13 Oct 2019 17:38:53 +0000 Subject: [PATCH] python: Expose flags Signed-off-by: Michael Tremer --- src/python/locationmodule.c | 10 +++++++++ src/python/network.c | 45 +++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/src/python/locationmodule.c b/src/python/locationmodule.c index a1e4d82..f986370 100644 --- a/src/python/locationmodule.c +++ b/src/python/locationmodule.c @@ -115,5 +115,15 @@ PyMODINIT_FUNC PyInit_location(void) { // Version PyDict_SetItemString(d, "__version__", PyUnicode_FromString(VERSION)); + // Add flags + if (PyModule_AddIntConstant(m, "FLAG_ANONYMOUS_PROXY", LOC_NETWORK_FLAG_ANONYMOUS_PROXY)) + return NULL; + + if (PyModule_AddIntConstant(m, "FLAG_SATELLITE_PROVIDER", LOC_NETWORK_FLAG_SATELLITE_PROVIDER)) + return NULL; + + if (PyModule_AddIntConstant(m, "FLAG_ANYCAST", LOC_NETWORK_FLAG_ANYCAST)) + return NULL; + return m; } diff --git a/src/python/network.c b/src/python/network.c index c74baae..d1b0de8 100644 --- a/src/python/network.c +++ b/src/python/network.c @@ -126,6 +126,50 @@ static int Network_set_asn(NetworkObject* self, PyObject* value) { return 0; } +static PyObject* Network_has_flag(NetworkObject* self, PyObject* args) { + enum loc_network_flags flag = 0; + + if (!PyArg_ParseTuple(args, "i", &flag)) + return NULL; + + if (loc_network_has_flag(self->network, flag)) + Py_RETURN_TRUE; + + Py_RETURN_FALSE; +} + +static PyObject* Network_set_flag(NetworkObject* self, PyObject* args) { + enum loc_network_flags flag = 0; + + if (!PyArg_ParseTuple(args, "i", &flag)) + return NULL; + + int r = loc_network_set_flag(self->network, flag); + + if (r) { + // What exception to throw here? + return NULL; + } + + Py_RETURN_NONE; +} + +static struct PyMethodDef Network_methods[] = { + { + "has_flag", + (PyCFunction)Network_has_flag, + METH_VARARGS, + NULL, + }, + { + "set_flag", + (PyCFunction)Network_set_flag, + METH_VARARGS, + NULL, + }, + { NULL }, +}; + static struct PyGetSetDef Network_getsetters[] = { { "asn", @@ -153,6 +197,7 @@ PyTypeObject NetworkType = { .tp_dealloc = (destructor)Network_dealloc, .tp_init = (initproc)Network_init, .tp_doc = "Network object", + .tp_methods = Network_methods, .tp_getset = Network_getsetters, .tp_repr = (reprfunc)Network_repr, .tp_str = (reprfunc)Network_str, -- 2.39.2