diff options
Diffstat (limited to 'plugins/ConnectionNotify/src/netstat.cpp')
-rw-r--r-- | plugins/ConnectionNotify/src/netstat.cpp | 79 |
1 files changed, 23 insertions, 56 deletions
diff --git a/plugins/ConnectionNotify/src/netstat.cpp b/plugins/ConnectionNotify/src/netstat.cpp index ff645a55dc..8b7d5e75ee 100644 --- a/plugins/ConnectionNotify/src/netstat.cpp +++ b/plugins/ConnectionNotify/src/netstat.cpp @@ -1,23 +1,19 @@ #include "ConnectionNotify.h" -struct CONNECTION* GetConnectionsTable() +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)); + MIB_TCPTABLE_OWNER_PID *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); + DWORD 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) { + DWORD dwRetVal = GetExtendedTcpTable(pTcpTable, &dwSize, TRUE,AF_INET,TCP_TABLE_OWNER_PID_ALL,0); + if (dwRetVal == ERROR_INSUFFICIENT_BUFFER) { FREE(pTcpTable); pTcpTable = (MIB_TCPTABLE_OWNER_PID *) MALLOC(dwSize); if (pTcpTable == NULL) { @@ -35,20 +31,26 @@ struct CONNECTION* GetConnectionsTable() } //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)); + struct in_addr IpAddr; + struct CONNECTION *connHead = NULL; + for (DWORD 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)))); + TCHAR *strIntIp = mir_a2t(inet_ntoa(IpAddr)); + _tcsncpy(newConn->strIntIp, strIntIp, SIZEOF(newConn->strIntIp)-1); + mir_free(strIntIp); } 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)))); + TCHAR *strExtIp = mir_a2t(inet_ntoa(IpAddr)); + _tcsncpy(newConn->strExtIp, strExtIp, SIZEOF(newConn->strExtIp)-1); + mir_free(strExtIp); } newConn->state = pTcpTable->table[i].dwState; newConn->intIntPort = ntohs((u_short)pTcpTable->table[i].dwLocalPort); @@ -108,7 +110,7 @@ struct CONNECTION* GetConnectionsTable() return connHead; } -void deleteConnectionsTable(struct CONNECTION* head) +void deleteConnectionsTable(struct CONNECTION *head) { struct CONNECTION *cur = head, *del; @@ -121,18 +123,15 @@ void deleteConnectionsTable(struct CONNECTION* head) head = NULL; } -struct CONNECTION* searchConnection(struct CONNECTION* head, TCHAR *intIp, TCHAR *extIp, int intPort, int extPort, int state) +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 && + for(struct CONNECTION *cur = head; cur != NULL; cur = cur->next) { + if (_tcscmp(cur->strIntIp, intIp) == 0 && + _tcscmp(cur->strExtIp, extIp) == 0 && cur->intExtPort == extPort && cur->intIntPort == intPort && cur->state == state) return cur; - cur = cur->next; } return NULL; } @@ -141,41 +140,9 @@ void getDnsName(TCHAR *strIp, TCHAR *strHostName, size_t len) { in_addr iaHost; - iaHost.s_addr = inet_addr(mir_t2a(strIp)); + char *szStrIP = mir_t2a(strIp); + iaHost.s_addr = inet_addr(szStrIP); + mir_free(szStrIP); 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; -} |