summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2019-02-24 07:21:21 -0800
committerGiampaolo Rodola <g.rodola@gmail.com>2019-02-24 07:21:21 -0800
commit8c4d4c21d08a573a25cbbe3d6c3e2ec20008e215 (patch)
tree8995f98f8edd65a0a90e1203c81f4d2763d19d24
parent05a7ad481f56ec280729d4f403ebee261097e824 (diff)
downloadpsutil-8c4d4c21d08a573a25cbbe3d6c3e2ec20008e215.tar.gz
win connections refactoring
-rw-r--r--psutil/_psutil_windows.c428
1 files changed, 207 insertions, 221 deletions
diff --git a/psutil/_psutil_windows.c b/psutil/_psutil_windows.c
index c0d73645..82be938b 100644
--- a/psutil/_psutil_windows.c
+++ b/psutil/_psutil_windows.c
@@ -1561,79 +1561,75 @@ psutil_net_connections(PyObject *self, PyObject *args) {
goto error;
}
- if (error == NO_ERROR)
- {
- tcp4Table = table;
+ if (error != NO_ERROR) {
+ PyErr_SetFromWindowsErr(error);
+ goto error;
+ }
- for (i = 0; i < tcp4Table->dwNumEntries; i++)
- {
- if (pid != -1) {
- if (tcp4Table->table[i].dwOwningPid != pid) {
- continue;
- }
+ tcp4Table = table;
+ for (i = 0; i < tcp4Table->dwNumEntries; i++) {
+ if (pid != -1) {
+ if (tcp4Table->table[i].dwOwningPid != pid) {
+ continue;
}
+ }
- if (tcp4Table->table[i].dwLocalAddr != 0 ||
- tcp4Table->table[i].dwLocalPort != 0)
- {
- struct in_addr addr;
-
- addr.S_un.S_addr = tcp4Table->table[i].dwLocalAddr;
- psutil_rtlIpv4AddressToStringA(&addr, addressBufferLocal);
- py_addr_tuple_local = Py_BuildValue(
- "(si)",
- addressBufferLocal,
- BYTESWAP_USHORT(tcp4Table->table[i].dwLocalPort));
- }
- else {
- py_addr_tuple_local = PyTuple_New(0);
- }
+ if (tcp4Table->table[i].dwLocalAddr != 0 ||
+ tcp4Table->table[i].dwLocalPort != 0)
+ {
+ struct in_addr addr;
+
+ addr.S_un.S_addr = tcp4Table->table[i].dwLocalAddr;
+ psutil_rtlIpv4AddressToStringA(&addr, addressBufferLocal);
+ py_addr_tuple_local = Py_BuildValue(
+ "(si)",
+ addressBufferLocal,
+ BYTESWAP_USHORT(tcp4Table->table[i].dwLocalPort));
+ }
+ else {
+ py_addr_tuple_local = PyTuple_New(0);
+ }
- if (py_addr_tuple_local == NULL)
- goto error;
+ if (py_addr_tuple_local == NULL)
+ goto error;
- // On Windows <= XP, remote addr is filled even if socket
- // is in LISTEN mode in which case we just ignore it.
- if ((tcp4Table->table[i].dwRemoteAddr != 0 ||
- tcp4Table->table[i].dwRemotePort != 0) &&
- (tcp4Table->table[i].dwState != MIB_TCP_STATE_LISTEN))
- {
- struct in_addr addr;
-
- addr.S_un.S_addr = tcp4Table->table[i].dwRemoteAddr;
- psutil_rtlIpv4AddressToStringA(&addr, addressBufferRemote);
- py_addr_tuple_remote = Py_BuildValue(
- "(si)",
- addressBufferRemote,
- BYTESWAP_USHORT(tcp4Table->table[i].dwRemotePort));
- }
- else
- {
- py_addr_tuple_remote = PyTuple_New(0);
- }
+ // On Windows <= XP, remote addr is filled even if socket
+ // is in LISTEN mode in which case we just ignore it.
+ if ((tcp4Table->table[i].dwRemoteAddr != 0 ||
+ tcp4Table->table[i].dwRemotePort != 0) &&
+ (tcp4Table->table[i].dwState != MIB_TCP_STATE_LISTEN))
+ {
+ struct in_addr addr;
+
+ addr.S_un.S_addr = tcp4Table->table[i].dwRemoteAddr;
+ psutil_rtlIpv4AddressToStringA(&addr, addressBufferRemote);
+ py_addr_tuple_remote = Py_BuildValue(
+ "(si)",
+ addressBufferRemote,
+ BYTESWAP_USHORT(tcp4Table->table[i].dwRemotePort));
+ }
+ else
+ {
+ py_addr_tuple_remote = PyTuple_New(0);
+ }
- if (py_addr_tuple_remote == NULL)
- goto error;
+ if (py_addr_tuple_remote == NULL)
+ goto error;
- py_conn_tuple = Py_BuildValue(
- "(iiiNNiI)",
- -1,
- AF_INET,
- SOCK_STREAM,
- py_addr_tuple_local,
- py_addr_tuple_remote,
- tcp4Table->table[i].dwState,
- tcp4Table->table[i].dwOwningPid);
- if (!py_conn_tuple)
- goto error;
- if (PyList_Append(py_retlist, py_conn_tuple))
- goto error;
- Py_DECREF(py_conn_tuple);
- }
- }
- else {
- PyErr_SetFromWindowsErr(error);
- goto error;
+ py_conn_tuple = Py_BuildValue(
+ "(iiiNNiI)",
+ -1,
+ AF_INET,
+ SOCK_STREAM,
+ py_addr_tuple_local,
+ py_addr_tuple_remote,
+ tcp4Table->table[i].dwState,
+ tcp4Table->table[i].dwOwningPid);
+ if (!py_conn_tuple)
+ goto error;
+ if (PyList_Append(py_retlist, py_conn_tuple))
+ goto error;
+ Py_DECREF(py_conn_tuple);
}
free(table);
@@ -1657,80 +1653,76 @@ psutil_net_connections(PyObject *self, PyObject *args) {
PyErr_NoMemory();
goto error;
}
+ if (error != NO_ERROR) {
+ PyErr_SetFromWindowsErr(error);
+ goto error;
+ }
- if (error == NO_ERROR)
+ tcp6Table = table;
+ for (i = 0; i < tcp6Table->dwNumEntries; i++)
{
- tcp6Table = table;
-
- for (i = 0; i < tcp6Table->dwNumEntries; i++)
- {
- if (pid != -1) {
- if (tcp6Table->table[i].dwOwningPid != pid) {
- continue;
- }
+ if (pid != -1) {
+ if (tcp6Table->table[i].dwOwningPid != pid) {
+ continue;
}
+ }
- if (memcmp(tcp6Table->table[i].ucLocalAddr, null_address, 16)
- != 0 || tcp6Table->table[i].dwLocalPort != 0)
- {
- struct in6_addr addr;
-
- memcpy(&addr, tcp6Table->table[i].ucLocalAddr, 16);
- psutil_rtlIpv6AddressToStringA(&addr, addressBufferLocal);
- py_addr_tuple_local = Py_BuildValue(
- "(si)",
- addressBufferLocal,
- BYTESWAP_USHORT(tcp6Table->table[i].dwLocalPort));
- }
- else {
- py_addr_tuple_local = PyTuple_New(0);
- }
+ if (memcmp(tcp6Table->table[i].ucLocalAddr, null_address, 16)
+ != 0 || tcp6Table->table[i].dwLocalPort != 0)
+ {
+ struct in6_addr addr;
+
+ memcpy(&addr, tcp6Table->table[i].ucLocalAddr, 16);
+ psutil_rtlIpv6AddressToStringA(&addr, addressBufferLocal);
+ py_addr_tuple_local = Py_BuildValue(
+ "(si)",
+ addressBufferLocal,
+ BYTESWAP_USHORT(tcp6Table->table[i].dwLocalPort));
+ }
+ else {
+ py_addr_tuple_local = PyTuple_New(0);
+ }
- if (py_addr_tuple_local == NULL)
- goto error;
+ if (py_addr_tuple_local == NULL)
+ goto error;
- // On Windows <= XP, remote addr is filled even if socket
- // is in LISTEN mode in which case we just ignore it.
- if ((memcmp(tcp6Table->table[i].ucRemoteAddr, null_address, 16)
- != 0 ||
- tcp6Table->table[i].dwRemotePort != 0) &&
- (tcp6Table->table[i].dwState != MIB_TCP_STATE_LISTEN))
- {
- struct in6_addr addr;
-
- memcpy(&addr, tcp6Table->table[i].ucRemoteAddr, 16);
- psutil_rtlIpv6AddressToStringA(&addr, addressBufferRemote);
- py_addr_tuple_remote = Py_BuildValue(
- "(si)",
- addressBufferRemote,
- BYTESWAP_USHORT(tcp6Table->table[i].dwRemotePort));
- }
- else {
- py_addr_tuple_remote = PyTuple_New(0);
- }
+ // On Windows <= XP, remote addr is filled even if socket
+ // is in LISTEN mode in which case we just ignore it.
+ if ((memcmp(tcp6Table->table[i].ucRemoteAddr, null_address, 16)
+ != 0 ||
+ tcp6Table->table[i].dwRemotePort != 0) &&
+ (tcp6Table->table[i].dwState != MIB_TCP_STATE_LISTEN))
+ {
+ struct in6_addr addr;
+
+ memcpy(&addr, tcp6Table->table[i].ucRemoteAddr, 16);
+ psutil_rtlIpv6AddressToStringA(&addr, addressBufferRemote);
+ py_addr_tuple_remote = Py_BuildValue(
+ "(si)",
+ addressBufferRemote,
+ BYTESWAP_USHORT(tcp6Table->table[i].dwRemotePort));
+ }
+ else {
+ py_addr_tuple_remote = PyTuple_New(0);
+ }
- if (py_addr_tuple_remote == NULL)
- goto error;
+ if (py_addr_tuple_remote == NULL)
+ goto error;
- py_conn_tuple = Py_BuildValue(
- "(iiiNNiI)",
- -1,
- AF_INET6,
- SOCK_STREAM,
- py_addr_tuple_local,
- py_addr_tuple_remote,
- tcp6Table->table[i].dwState,
- tcp6Table->table[i].dwOwningPid);
- if (!py_conn_tuple)
- goto error;
- if (PyList_Append(py_retlist, py_conn_tuple))
- goto error;
- Py_DECREF(py_conn_tuple);
- }
- }
- else {
- PyErr_SetFromWindowsErr(error);
- goto error;
+ py_conn_tuple = Py_BuildValue(
+ "(iiiNNiI)",
+ -1,
+ AF_INET6,
+ SOCK_STREAM,
+ py_addr_tuple_local,
+ py_addr_tuple_remote,
+ tcp6Table->table[i].dwState,
+ tcp6Table->table[i].dwOwningPid);
+ if (!py_conn_tuple)
+ goto error;
+ if (PyList_Append(py_retlist, py_conn_tuple))
+ goto error;
+ Py_DECREF(py_conn_tuple);
}
free(table);
@@ -1754,57 +1746,53 @@ psutil_net_connections(PyObject *self, PyObject *args) {
PyErr_NoMemory();
goto error;
}
+ if (error != NO_ERROR) {
+ PyErr_SetFromWindowsErr(error);
+ goto error;
+ }
- if (error == NO_ERROR)
+ udp4Table = table;
+ for (i = 0; i < udp4Table->dwNumEntries; i++)
{
- udp4Table = table;
-
- for (i = 0; i < udp4Table->dwNumEntries; i++)
- {
- if (pid != -1) {
- if (udp4Table->table[i].dwOwningPid != pid) {
- continue;
- }
+ if (pid != -1) {
+ if (udp4Table->table[i].dwOwningPid != pid) {
+ continue;
}
+ }
- if (udp4Table->table[i].dwLocalAddr != 0 ||
- udp4Table->table[i].dwLocalPort != 0)
- {
- struct in_addr addr;
-
- addr.S_un.S_addr = udp4Table->table[i].dwLocalAddr;
- psutil_rtlIpv4AddressToStringA(&addr, addressBufferLocal);
- py_addr_tuple_local = Py_BuildValue(
- "(si)",
- addressBufferLocal,
- BYTESWAP_USHORT(udp4Table->table[i].dwLocalPort));
- }
- else {
- py_addr_tuple_local = PyTuple_New(0);
- }
+ if (udp4Table->table[i].dwLocalAddr != 0 ||
+ udp4Table->table[i].dwLocalPort != 0)
+ {
+ struct in_addr addr;
+
+ addr.S_un.S_addr = udp4Table->table[i].dwLocalAddr;
+ psutil_rtlIpv4AddressToStringA(&addr, addressBufferLocal);
+ py_addr_tuple_local = Py_BuildValue(
+ "(si)",
+ addressBufferLocal,
+ BYTESWAP_USHORT(udp4Table->table[i].dwLocalPort));
+ }
+ else {
+ py_addr_tuple_local = PyTuple_New(0);
+ }
- if (py_addr_tuple_local == NULL)
- goto error;
+ if (py_addr_tuple_local == NULL)
+ goto error;
- py_conn_tuple = Py_BuildValue(
- "(iiiNNiI)",
- -1,
- AF_INET,
- SOCK_DGRAM,
- py_addr_tuple_local,
- PyTuple_New(0),
- PSUTIL_CONN_NONE,
- udp4Table->table[i].dwOwningPid);
- if (!py_conn_tuple)
- goto error;
- if (PyList_Append(py_retlist, py_conn_tuple))
- goto error;
- Py_DECREF(py_conn_tuple);
- }
- }
- else {
- PyErr_SetFromWindowsErr(error);
- goto error;
+ py_conn_tuple = Py_BuildValue(
+ "(iiiNNiI)",
+ -1,
+ AF_INET,
+ SOCK_DGRAM,
+ py_addr_tuple_local,
+ PyTuple_New(0),
+ PSUTIL_CONN_NONE,
+ udp4Table->table[i].dwOwningPid);
+ if (!py_conn_tuple)
+ goto error;
+ if (PyList_Append(py_retlist, py_conn_tuple))
+ goto error;
+ Py_DECREF(py_conn_tuple);
}
free(table);
@@ -1829,55 +1817,53 @@ psutil_net_connections(PyObject *self, PyObject *args) {
goto error;
}
- if (error == NO_ERROR)
- {
- udp6Table = table;
+ if (error != NO_ERROR) {
+ PyErr_SetFromWindowsErr(error);
+ goto error;
+ }
- for (i = 0; i < udp6Table->dwNumEntries; i++) {
- if (pid != -1) {
- if (udp6Table->table[i].dwOwningPid != pid) {
- continue;
- }
- }
+ udp6Table = table;
- if (memcmp(udp6Table->table[i].ucLocalAddr, null_address, 16)
- != 0 || udp6Table->table[i].dwLocalPort != 0)
- {
- struct in6_addr addr;
-
- memcpy(&addr, udp6Table->table[i].ucLocalAddr, 16);
- psutil_rtlIpv6AddressToStringA(&addr, addressBufferLocal);
- py_addr_tuple_local = Py_BuildValue(
- "(si)",
- addressBufferLocal,
- BYTESWAP_USHORT(udp6Table->table[i].dwLocalPort));
- }
- else {
- py_addr_tuple_local = PyTuple_New(0);
+ for (i = 0; i < udp6Table->dwNumEntries; i++) {
+ if (pid != -1) {
+ if (udp6Table->table[i].dwOwningPid != pid) {
+ continue;
}
+ }
- if (py_addr_tuple_local == NULL)
- goto error;
-
- py_conn_tuple = Py_BuildValue(
- "(iiiNNiI)",
- -1,
- AF_INET6,
- SOCK_DGRAM,
- py_addr_tuple_local,
- PyTuple_New(0),
- PSUTIL_CONN_NONE,
- udp6Table->table[i].dwOwningPid);
- if (!py_conn_tuple)
- goto error;
- if (PyList_Append(py_retlist, py_conn_tuple))
- goto error;
- Py_DECREF(py_conn_tuple);
+ if (memcmp(udp6Table->table[i].ucLocalAddr, null_address, 16)
+ != 0 || udp6Table->table[i].dwLocalPort != 0)
+ {
+ struct in6_addr addr;
+
+ memcpy(&addr, udp6Table->table[i].ucLocalAddr, 16);
+ psutil_rtlIpv6AddressToStringA(&addr, addressBufferLocal);
+ py_addr_tuple_local = Py_BuildValue(
+ "(si)",
+ addressBufferLocal,
+ BYTESWAP_USHORT(udp6Table->table[i].dwLocalPort));
}
- }
- else {
- PyErr_SetFromWindowsErr(error);
- goto error;
+ else {
+ py_addr_tuple_local = PyTuple_New(0);
+ }
+
+ if (py_addr_tuple_local == NULL)
+ goto error;
+
+ py_conn_tuple = Py_BuildValue(
+ "(iiiNNiI)",
+ -1,
+ AF_INET6,
+ SOCK_DGRAM,
+ py_addr_tuple_local,
+ PyTuple_New(0),
+ PSUTIL_CONN_NONE,
+ udp6Table->table[i].dwOwningPid);
+ if (!py_conn_tuple)
+ goto error;
+ if (PyList_Append(py_retlist, py_conn_tuple))
+ goto error;
+ Py_DECREF(py_conn_tuple);
}
free(table);