diff options
author | Tobias Weimer <wishmaster51@googlemail.com> | 2015-03-20 19:30:24 +0000 |
---|---|---|
committer | Tobias Weimer <wishmaster51@googlemail.com> | 2015-03-20 19:30:24 +0000 |
commit | 1e8dbc1ff44b65c0fbe4e83fa5a22641c9ab9f47 (patch) | |
tree | d6f85e20e1fa76becf6841a6f6d279a5e45a2543 /plugins/ConnectionNotify/src | |
parent | 33c323624f6e03ab35002e382299e9a074c8cb3b (diff) |
ConnectionNotify:
-Fixed some big memory leaks
git-svn-id: http://svn.miranda-ng.org/main/trunk@12455 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/ConnectionNotify/src')
-rw-r--r-- | plugins/ConnectionNotify/src/filter.cpp | 2 | ||||
-rw-r--r-- | plugins/ConnectionNotify/src/netstat.cpp | 79 | ||||
-rw-r--r-- | plugins/ConnectionNotify/src/netstat.h | 3 |
3 files changed, 25 insertions, 59 deletions
diff --git a/plugins/ConnectionNotify/src/filter.cpp b/plugins/ConnectionNotify/src/filter.cpp index 9e5ba6933a..0c8e53d1aa 100644 --- a/plugins/ConnectionNotify/src/filter.cpp +++ b/plugins/ConnectionNotify/src/filter.cpp @@ -145,7 +145,7 @@ BOOL checkFilter(struct CONNECTION *head,struct CONNECTION *conn) struct CONNECTION *cur=head;
while(cur!=NULL)
{
- if (wildcmp(cur->PName,conn->PName)&&wildcmp(cur->strIntIp,conn->strIntIp)&&wildcmp(cur->strExtIp,conn->strExtIp)&&(cur->intIntPort==-1||cur->intIntPort==conn->intIntPort)&&(cur->intExtPort==-1||cur->intExtPort==conn->intExtPort))
+ if (wildcmpt(cur->PName,conn->PName)&&wildcmpt(cur->strIntIp,conn->strIntIp)&&wildcmpt(cur->strExtIp,conn->strExtIp)&&(cur->intIntPort==-1||cur->intIntPort==conn->intIntPort)&&(cur->intExtPort==-1||cur->intExtPort==conn->intExtPort))
return cur->Pid;
cur=cur->next;
}
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; -} diff --git a/plugins/ConnectionNotify/src/netstat.h b/plugins/ConnectionNotify/src/netstat.h index fdd0908a72..ccfff64a0c 100644 --- a/plugins/ConnectionNotify/src/netstat.h +++ b/plugins/ConnectionNotify/src/netstat.h @@ -17,5 +17,4 @@ struct CONNECTION struct CONNECTION* GetConnectionsTable();
void deleteConnectionsTable(struct CONNECTION* head);
struct CONNECTION* searchConnection(struct CONNECTION* head,TCHAR *intIp,TCHAR *extIp,int intPort,int extPort,int state);
-void getDnsName(TCHAR *strIp, TCHAR *strHostName, size_t len);
-int wildcmp(const TCHAR *wild, const TCHAR *string);
\ No newline at end of file +void getDnsName(TCHAR *strIp, TCHAR *strHostName, size_t len);
\ No newline at end of file |