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 PyObject* Network_is_subnet_of(NetworkObject* self, PyObject* args) {
+ NetworkObject* other = NULL;
+
+ if (!PyArg_ParseTuple(args, "O!", &NetworkType, &other))
+ return NULL;
+
+ if (loc_network_is_subnet_of(self->network, other->network))
+ Py_RETURN_TRUE;
+
+ Py_RETURN_FALSE;
+}
+
+static PyObject* Network_get_family(NetworkObject* self) {
+ int family = loc_network_address_family(self->network);
+
+ return PyLong_FromLong(family);
+}
+
+static PyObject* Network_get_first_address(NetworkObject* self) {
+ char* address = loc_network_format_first_address(self->network);
+
+ PyObject* obj = PyUnicode_FromString(address);
+ free(address);
+
+ return obj;
+}
+
+static PyObject* Network_get_last_address(NetworkObject* self) {
+ char* address = loc_network_format_last_address(self->network);
+
+ PyObject* obj = PyUnicode_FromString(address);
+ free(address);
+
+ return obj;
+}
+
+static struct PyMethodDef Network_methods[] = {
+ {
+ "has_flag",
+ (PyCFunction)Network_has_flag,
+ METH_VARARGS,
+ NULL,
+ },
+ {
+ "is_subnet_of",
+ (PyCFunction)Network_is_subnet_of,
+ METH_VARARGS,
+ NULL,
+ },
+ {
+ "set_flag",
+ (PyCFunction)Network_set_flag,
+ METH_VARARGS,
+ NULL,
+ },
+ { NULL },
+};
+
static struct PyGetSetDef Network_getsetters[] = {
{
"asn",
NULL,
NULL,
},
+ {
+ "family",
+ (getter)Network_get_family,
+ NULL,
+ NULL,
+ NULL,
+ },
+ {
+ "first_address",
+ (getter)Network_get_first_address,
+ NULL,
+ NULL,
+ NULL,
+ },
+ {
+ "last_address",
+ (getter)Network_get_last_address,
+ NULL,
+ NULL,
+ NULL,
+ },
{ NULL },
};
PyTypeObject NetworkType = {
PyVarObject_HEAD_INIT(NULL, 0)
- tp_name: "location.Network",
- tp_basicsize: sizeof(NetworkObject),
- tp_flags: Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
- tp_new: Network_new,
- tp_dealloc: (destructor)Network_dealloc,
- tp_init: (initproc)Network_init,
- tp_doc: "Network object",
- tp_getset: Network_getsetters,
- tp_repr: (reprfunc)Network_repr,
- tp_str: (reprfunc)Network_str,
+ .tp_name = "location.Network",
+ .tp_basicsize = sizeof(NetworkObject),
+ .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
+ .tp_new = Network_new,
+ .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,
};