diff options
author | Rozhuk Ivan <rozhuk.im@gmail.com> | 2014-11-29 18:50:00 +0000 |
---|---|---|
committer | Rozhuk Ivan <rozhuk.im@gmail.com> | 2014-11-29 18:50:00 +0000 |
commit | 74a7275c9ae50d84abf5ffd80fe448be91c2df19 (patch) | |
tree | 081b8ee8151ed52306610ff288fcd7f5a87ed7a8 /plugins | |
parent | 619dc45218d67dc8254da138a21fa9ae251f51a2 (diff) |
ConnectionNotify: code refactoring.
git-svn-id: http://svn.miranda-ng.org/main/trunk@11155 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/ConnectionNotify/src/netstat.cpp | 379 |
1 files changed, 181 insertions, 198 deletions
diff --git a/plugins/ConnectionNotify/src/netstat.cpp b/plugins/ConnectionNotify/src/netstat.cpp index ae813c9d1d..ff645a55dc 100644 --- a/plugins/ConnectionNotify/src/netstat.cpp +++ b/plugins/ConnectionNotify/src/netstat.cpp @@ -1,198 +1,181 @@ -#include "ConnectionNotify.h"
-
-struct CONNECTION* GetConnectionsTable()
-{
- // Declare and initialize variables
- MIB_TCPTABLE_OWNER_PID *pTcpTable;
- DWORD dwSize = 0;
- DWORD dwRetVal = 0;
- struct in_addr IpAddr;
- int i;
- struct CONNECTION *connHead=NULL;
-
- pTcpTable = (MIB_TCPTABLE_OWNER_PID *) MALLOC(sizeof (MIB_TCPTABLE_OWNER_PID));
- if (pTcpTable == NULL)
- {
- //printf("Error allocating memory!\n");
- return NULL;
- }
-
- dwSize = sizeof (MIB_TCPTABLE_OWNER_PID);
- // Make an initial call to GetTcpTable to
- // get the necessary size into the dwSize variable
- if ((dwRetVal = GetExtendedTcpTable(pTcpTable, &dwSize, TRUE,AF_INET,TCP_TABLE_OWNER_PID_ALL,0)) == ERROR_INSUFFICIENT_BUFFER)
- {
- FREE(pTcpTable);
- pTcpTable = (MIB_TCPTABLE_OWNER_PID *) MALLOC(dwSize);
- if (pTcpTable == NULL)
- {
- //printf("Error allocating memory\n");
- return NULL;
- }
- }
-
- // Make a second call to GetTcpTable to get
- // the actual data we require
- if ((dwRetVal = GetExtendedTcpTable(pTcpTable, &dwSize, TRUE,AF_INET,TCP_TABLE_OWNER_PID_ALL,0)) == NO_ERROR)
- {
- //printf("\tLocal Addr\tLocal Port\tRemote Addr\tRemote Port\n");
- //printf("Number of entries: %d\n", (int) pTcpTable->dwNumEntries);
-
-
- for (i = 0; i < (int) pTcpTable->dwNumEntries; i++)
- {
- struct CONNECTION* newConn=(struct CONNECTION*)mir_alloc(sizeof(struct CONNECTION));
- memset(newConn,0,sizeof(struct CONNECTION));
- //pid2name(pTcpTable->table[i].dwOwningPid,&newConn->Pname);
-
- if (pTcpTable->table[i].dwLocalAddr)
- {
- IpAddr.S_un.S_addr = (ULONG) pTcpTable->table[i].dwLocalAddr;
- //_snprintf(newConn->strIntIp,_countof(newConn->strIntIp),"%d.%d.%d.%d",IpAddr.S_un.S_un_b.s_b1,IpAddr.S_un.S_un_b.s_b2,IpAddr.S_un.S_un_b.s_b3,IpAddr.S_un.S_un_b.s_b4);
- wcsncpy(newConn->strIntIp, mir_a2t(inet_ntoa(IpAddr)),_tcslen(mir_a2t(inet_ntoa(IpAddr))));
- }
-
- if (pTcpTable->table[i].dwRemoteAddr)
- {
- IpAddr.S_un.S_addr = (u_long) pTcpTable->table[i].dwRemoteAddr;
- wcsncpy(newConn->strExtIp, mir_a2t(inet_ntoa(IpAddr)),_tcslen(mir_a2t(inet_ntoa(IpAddr))));
- }
- newConn->state = pTcpTable->table[i].dwState;
- newConn->intIntPort =ntohs((u_short)pTcpTable->table[i].dwLocalPort);
- newConn->intExtPort =ntohs((u_short)pTcpTable->table[i].dwRemotePort);
- newConn->Pid=pTcpTable->table[i].dwOwningPid;
-
- switch (pTcpTable->table[i].dwState)
- {
- case MIB_TCP_STATE_CLOSED:
- //printf("CLOSED\n");
- break;
- case MIB_TCP_STATE_LISTEN:
- //printf("LISTEN\n");
- break;
- case MIB_TCP_STATE_SYN_SENT:
- //printf("SYN-SENT\n");
- break;
- case MIB_TCP_STATE_SYN_RCVD:
- //printf("SYN-RECEIVED\n");
- break;
- case MIB_TCP_STATE_ESTAB:
- //printf("ESTABLISHED\n");
- break;
- case MIB_TCP_STATE_FIN_WAIT1:
- //printf("FIN-WAIT-1\n");
- break;
- case MIB_TCP_STATE_FIN_WAIT2:
- //printf("FIN-WAIT-2 \n");
- break;
- case MIB_TCP_STATE_CLOSE_WAIT:
- //printf("CLOSE-WAIT\n");
- break;
- case MIB_TCP_STATE_CLOSING:
- //printf("CLOSING\n");
- break;
- case MIB_TCP_STATE_LAST_ACK:
- //printf("LAST-ACK\n");
- break;
- case MIB_TCP_STATE_TIME_WAIT:
- //printf("TIME-WAIT\n");
- break;
- case MIB_TCP_STATE_DELETE_TCB:
- //printf("DELETE-TCB\n");
- break;
- default:
- //printf("UNKNOWN dwState value\n");
- break;
- }
- newConn->next = connHead;
- connHead=newConn;
-
- //printf("TCP[%d]:%s%15d%20s%15d\n", i, szLocalAddr,ntohs((u_short)pTcpTable->table[i].dwLocalPort), szRemoteAddr,ntohs((u_short)pTcpTable->table[i].dwRemotePort));
-
- //printf("\tTCP[%d] Local Addr: %s\n", i, szLocalAddr);
- // printf("\tTCP[%d] Local Port: %d \n", i, ntohs((u_short)pTcpTable->table[i].dwLocalPort));
- //printf("\tTCP[%d] Remote Addr: %s\n", i, szRemoteAddr);
- //printf("\tTCP[%d] Remote Port: %d\n", i, ntohs((u_short)pTcpTable->table[i].dwRemotePort));
- }
- }
- else
- {
- //printf("\tGetTcpTable() failed with return value %d\n", dwRetVal);
- FREE(pTcpTable);
- return NULL;
- }
- if (pTcpTable != NULL)
- {
- FREE(pTcpTable);
- pTcpTable = NULL;
- }
- return connHead;
-}
-
-void deleteConnectionsTable(struct CONNECTION* head)
-{
- struct CONNECTION *cur=head,*del;
- while(cur!=NULL)
- {
- del=cur;
- cur=cur->next;
- mir_free(del);
- head=cur;
- }
- head=NULL;
-}
-
-struct CONNECTION* searchConnection(struct CONNECTION* head,TCHAR *intIp,TCHAR *extIp,int intPort,int extPort,int state)
-{
- struct CONNECTION *cur=head;
- while(cur!=NULL)
- {
- if (wcscmp(cur->strIntIp,intIp)==0 && wcscmp(cur->strExtIp,extIp)==0 && cur->intExtPort==extPort && cur->intIntPort==intPort && cur->state==state)
- return cur;
- cur=cur->next;
- }
- return NULL;
-}
-
-void getDnsName(TCHAR *strIp, TCHAR *strHostName, size_t len)
-{
- in_addr iaHost;
- iaHost.s_addr = inet_addr(mir_t2a(strIp));
- hostent *h = gethostbyaddr((char *)&iaHost, sizeof(struct in_addr), AF_INET);
- _tcsncpy_s(strHostName, len, (h == NULL) ? strIp : _A2T(h->h_name), _TRUNCATE);
-}
-
-int wildcmp(const TCHAR *wild, const TCHAR *string) {
- // Written by Jack Handy - jakkhandy@hotmail.com
-
- const TCHAR *cp = NULL, *mp = NULL;
-
- while ((*string) && (*wild != '*')) {
- if ((*wild != *string) && (*wild != '?')) {
- return 0;
- }
- wild++;
- string++;
- }
-
- while (*string) {
- if (*wild == '*') {
- if (!*++wild) {
- return 1;
- }
- mp = wild;
- cp = string+1;
- } else if ((*wild == *string) || (*wild == '?')) {
- wild++;
- string++;
- } else {
- wild = mp;
- string = cp++;
- }
- }
-
- while (*wild == '*') {
- wild++;
- }
- return !*wild;
-}
+#include "ConnectionNotify.h" + +struct CONNECTION* GetConnectionsTable() +{ + // Declare and initialize variables + MIB_TCPTABLE_OWNER_PID *pTcpTable; + DWORD i, dwSize = 0, dwRetVal = 0; + struct in_addr IpAddr; + struct CONNECTION *connHead = NULL; + + pTcpTable = (MIB_TCPTABLE_OWNER_PID *) MALLOC(sizeof (MIB_TCPTABLE_OWNER_PID)); + if (pTcpTable == NULL) { + //printf("Error allocating memory!\n"); + return NULL; + } + + dwSize = sizeof (MIB_TCPTABLE_OWNER_PID); + // Make an initial call to GetTcpTable to + // get the necessary size into the dwSize variable + if ((dwRetVal = GetExtendedTcpTable(pTcpTable, &dwSize, TRUE,AF_INET,TCP_TABLE_OWNER_PID_ALL,0)) == ERROR_INSUFFICIENT_BUFFER) { + FREE(pTcpTable); + pTcpTable = (MIB_TCPTABLE_OWNER_PID *) MALLOC(dwSize); + if (pTcpTable == NULL) { + //printf("Error allocating memory\n"); + return NULL; + } + } + + // Make a second call to GetTcpTable to get + // the actual data we require + if ((dwRetVal = GetExtendedTcpTable(pTcpTable, &dwSize, TRUE,AF_INET,TCP_TABLE_OWNER_PID_ALL,0)) != NO_ERROR) { + //printf("\tGetTcpTable() failed with return value %d\n", dwRetVal); + FREE(pTcpTable); + return NULL; + } + //printf("\tLocal Addr\tLocal Port\tRemote Addr\tRemote Port\n"); + //printf("Number of entries: %d\n", (int) pTcpTable->dwNumEntries); + for (i = 0; i < pTcpTable->dwNumEntries; i ++) { + struct CONNECTION* newConn = (struct CONNECTION*)mir_alloc(sizeof(struct CONNECTION)); + memset(newConn, 0, sizeof(struct CONNECTION)); + //pid2name(pTcpTable->table[i].dwOwningPid,&newConn->Pname); + + if (pTcpTable->table[i].dwLocalAddr) { + IpAddr.S_un.S_addr = (ULONG) pTcpTable->table[i].dwLocalAddr; + //_snprintf(newConn->strIntIp,_countof(newConn->strIntIp),"%d.%d.%d.%d",IpAddr.S_un.S_un_b.s_b1,IpAddr.S_un.S_un_b.s_b2,IpAddr.S_un.S_un_b.s_b3,IpAddr.S_un.S_un_b.s_b4); + wcsncpy(newConn->strIntIp, mir_a2t(inet_ntoa(IpAddr)),_tcslen(mir_a2t(inet_ntoa(IpAddr)))); + } + + if (pTcpTable->table[i].dwRemoteAddr) { + IpAddr.S_un.S_addr = (u_long) pTcpTable->table[i].dwRemoteAddr; + wcsncpy(newConn->strExtIp, mir_a2t(inet_ntoa(IpAddr)),_tcslen(mir_a2t(inet_ntoa(IpAddr)))); + } + newConn->state = pTcpTable->table[i].dwState; + newConn->intIntPort = ntohs((u_short)pTcpTable->table[i].dwLocalPort); + newConn->intExtPort = ntohs((u_short)pTcpTable->table[i].dwRemotePort); + newConn->Pid = pTcpTable->table[i].dwOwningPid; + switch (pTcpTable->table[i].dwState) { + case MIB_TCP_STATE_CLOSED: + //printf("CLOSED\n"); + break; + case MIB_TCP_STATE_LISTEN: + //printf("LISTEN\n"); + break; + case MIB_TCP_STATE_SYN_SENT: + //printf("SYN-SENT\n"); + break; + case MIB_TCP_STATE_SYN_RCVD: + //printf("SYN-RECEIVED\n"); + break; + case MIB_TCP_STATE_ESTAB: + //printf("ESTABLISHED\n"); + break; + case MIB_TCP_STATE_FIN_WAIT1: + //printf("FIN-WAIT-1\n"); + break; + case MIB_TCP_STATE_FIN_WAIT2: + //printf("FIN-WAIT-2 \n"); + break; + case MIB_TCP_STATE_CLOSE_WAIT: + //printf("CLOSE-WAIT\n"); + break; + case MIB_TCP_STATE_CLOSING: + //printf("CLOSING\n"); + break; + case MIB_TCP_STATE_LAST_ACK: + //printf("LAST-ACK\n"); + break; + case MIB_TCP_STATE_TIME_WAIT: + //printf("TIME-WAIT\n"); + break; + case MIB_TCP_STATE_DELETE_TCB: + //printf("DELETE-TCB\n"); + break; + default: + //printf("UNKNOWN dwState value\n"); + break; + } + newConn->next = connHead; + connHead = newConn; + //printf("TCP[%d]:%s%15d%20s%15d\n", i, szLocalAddr,ntohs((u_short)pTcpTable->table[i].dwLocalPort), szRemoteAddr,ntohs((u_short)pTcpTable->table[i].dwRemotePort)); + //printf("\tTCP[%d] Local Addr: %s\n", i, szLocalAddr); + // printf("\tTCP[%d] Local Port: %d \n", i, ntohs((u_short)pTcpTable->table[i].dwLocalPort)); + //printf("\tTCP[%d] Remote Addr: %s\n", i, szRemoteAddr); + //printf("\tTCP[%d] Remote Port: %d\n", i, ntohs((u_short)pTcpTable->table[i].dwRemotePort)); + } + FREE(pTcpTable); + + return connHead; +} + +void deleteConnectionsTable(struct CONNECTION* head) +{ + struct CONNECTION *cur = head, *del; + + while (cur != NULL) { + del = cur; + cur = cur->next; + mir_free(del); + head = cur; + } + head = NULL; +} + +struct CONNECTION* searchConnection(struct CONNECTION* head, TCHAR *intIp, TCHAR *extIp, int intPort, int extPort, int state) +{ + struct CONNECTION *cur = head; + + while(cur != NULL) { + if (wcscmp(cur->strIntIp, intIp) == 0 && + wcscmp(cur->strExtIp, extIp) == 0 && + cur->intExtPort == extPort && + cur->intIntPort == intPort && + cur->state == state) + return cur; + cur = cur->next; + } + return NULL; +} + +void getDnsName(TCHAR *strIp, TCHAR *strHostName, size_t len) +{ + in_addr iaHost; + + iaHost.s_addr = inet_addr(mir_t2a(strIp)); + hostent *h = gethostbyaddr((char *)&iaHost, sizeof(struct in_addr), AF_INET); + _tcsncpy_s(strHostName, len, (h == NULL) ? strIp : _A2T(h->h_name), _TRUNCATE); +} + +int wildcmp(const TCHAR *wild, const TCHAR *string) { + // Written by Jack Handy - jakkhandy@hotmail.com + const TCHAR *cp = NULL, *mp = NULL; + + while ((*string) && (*wild != '*')) { + if ((*wild != *string) && (*wild != '?')) { + return 0; + } + wild ++; + string ++; + } + + while (*string) { + if (*wild == '*') { + if (!*++ wild) { + return 1; + } + mp = wild; + cp = string + 1; + } else if ((*wild == *string) || (*wild == '?')) { + wild ++; + string ++; + } else { + wild = mp; + string = cp ++; + } + } + + while (*wild == '*') { + wild ++; + } + return !*wild; +} |