loc_network_format_last_address;
loc_network_get_asn;
loc_network_get_country_code;
+ loc_network_get_first_address;
+ loc_network_get_last_address;
loc_network_gt;
loc_network_has_flag;
loc_network_is_subnet;
char* loc_network_str(struct loc_network* network);
int loc_network_address_family(struct loc_network* network);
+const struct in6_addr* loc_network_get_first_address(struct loc_network* network);
char* loc_network_format_first_address(struct loc_network* network);
+const struct in6_addr* loc_network_get_last_address(struct loc_network* network);
char* loc_network_format_last_address(struct loc_network* network);
int loc_network_match_address(struct loc_network* network, const struct in6_addr* address);
return string;
}
+LOC_EXPORT const struct in6_addr* loc_network_get_first_address(struct loc_network* network) {
+ return &network->first_address;
+}
+
LOC_EXPORT char* loc_network_format_first_address(struct loc_network* network) {
return loc_network_format_address(network, &network->first_address);
}
+LOC_EXPORT const struct in6_addr* loc_network_get_last_address(struct loc_network* network) {
+ return &network->last_address;
+}
+
LOC_EXPORT char* loc_network_format_last_address(struct loc_network* network) {
return loc_network_format_address(network, &network->last_address);
}
if (r) {
PyErr_SetFromErrno(PyExc_SystemError);
- loc_as_list_unref(countries);
+ loc_country_list_unref(countries);
return NULL;
}
mode = "wb"
def _write_network(self, network):
- for address in (network.first_address, network.last_address):
- # Convert this into a string of bits
- bytes = socket.inet_pton(network.family, address)
-
- self.f.write(bytes)
+ for address in (network._first_address, network._last_address):
+ self.f.write(address)
formats = {
return obj;
}
+static PyObject* PyBytes_FromAddress(const struct in6_addr* address6) {
+ struct in_addr address4;
+
+ // Convert IPv4 addresses to struct in_addr
+ if (IN6_IS_ADDR_V4MAPPED(address6)) {
+ address4.s_addr = address6->s6_addr32[3];
+
+ return PyBytes_FromStringAndSize((const char*)&address4, sizeof(address4));
+ }
+
+ // Return IPv6 addresses as they are
+ return PyBytes_FromStringAndSize((const char*)address6, sizeof(*address6));
+}
+
+static PyObject* Network_get__first_address(NetworkObject* self) {
+ const struct in6_addr* address = loc_network_get_first_address(self->network);
+
+ return PyBytes_FromAddress(address);
+}
+
static PyObject* Network_get_last_address(NetworkObject* self) {
char* address = loc_network_format_last_address(self->network);
return obj;
}
+static PyObject* Network_get__last_address(NetworkObject* self) {
+ const struct in6_addr* address = loc_network_get_last_address(self->network);
+
+ return PyBytes_FromAddress(address);
+}
+
static struct PyMethodDef Network_methods[] = {
{
"exclude",
NULL,
NULL,
},
+ {
+ "_first_address",
+ (getter)Network_get__first_address,
+ NULL,
+ NULL,
+ NULL,
+ },
{
"last_address",
(getter)Network_get_last_address,
NULL,
NULL,
},
+ {
+ "_last_address",
+ (getter)Network_get__last_address,
+ NULL,
+ NULL,
+ NULL,
+ },
{ NULL },
};