X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/597f6f31e3801612273886481381df509d8bcd12..91002d861d8e0729e84f9ef65a19001d515d7dbe:/stglibs/pinger.lib/pinger.cpp?ds=sidebyside diff --git a/stglibs/pinger.lib/pinger.cpp b/stglibs/pinger.lib/pinger.cpp index 8e6370ed..1689e294 100644 --- a/stglibs/pinger.lib/pinger.cpp +++ b/stglibs/pinger.lib/pinger.cpp @@ -18,7 +18,7 @@ #include "stg/common.h" #include "stg/locker.h" -#include "pinger.h" +#include "stg/pinger.h" #ifdef STG_TIME extern volatile time_t stgTime; @@ -98,16 +98,6 @@ if (isRunningRecver) struct timespec ts = {0, 200000000}; nanosleep(&ts, NULL); } - - //after 5 seconds waiting thread still running. now killing it - if (isRunningRecver) - { - if (pthread_kill(recvThread, SIGINT)) - { - errorStr = "Cannot kill thread."; - return -1; - } - } } if (isRunningSender) @@ -121,37 +111,31 @@ if (isRunningSender) struct timespec ts = {0, 200000000}; nanosleep(&ts, NULL); } - - //after 5 seconds waiting thread still running. now killing it - if (isRunningSender) - { - if (pthread_kill(sendThread, SIGINT)) - { - errorStr = "Cannot kill thread."; - return -1; - } - } } close(sendSocket); + +if (isRunningSender || isRunningRecver) + return -1; + return 0; } //----------------------------------------------------------------------------- void STG_PINGER::AddIP(uint32_t ip) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); ipToAdd.push_back(ip); } //----------------------------------------------------------------------------- void STG_PINGER::DelIP(uint32_t ip) { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); ipToDel.push_back(ip); } //----------------------------------------------------------------------------- void STG_PINGER::RealAddIP() { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); std::list::iterator iter; iter = ipToAdd.begin(); @@ -165,7 +149,7 @@ ipToAdd.erase(ipToAdd.begin(), ipToAdd.end()); //----------------------------------------------------------------------------- void STG_PINGER::RealDelIP() { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); std::list::iterator iter; std::multimap::iterator treeIter; @@ -181,14 +165,9 @@ while (iter != ipToDel.end()) ipToDel.erase(ipToDel.begin(), ipToDel.end()); } //----------------------------------------------------------------------------- -int STG_PINGER::GetPingIPNum() const -{ -return pingIP.size(); -} -//----------------------------------------------------------------------------- void STG_PINGER::PrintAllIP() { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); std::multimap::iterator iter; iter = pingIP.begin(); while (iter != pingIP.end()) @@ -205,7 +184,7 @@ while (iter != pingIP.end()) //----------------------------------------------------------------------------- int STG_PINGER::GetIPTime(uint32_t ip, time_t * t) const { -STG_LOCKER lock(&mutex, __FILE__, __LINE__); +STG_LOCKER lock(&mutex); std::multimap::const_iterator treeIter; treeIter = pingIP.find(ip); @@ -218,20 +197,20 @@ return 0; //----------------------------------------------------------------------------- uint16_t STG_PINGER::PingCheckSum(void * data, int len) { -unsigned short * buf = (unsigned short *)data; -unsigned int sum = 0; -unsigned short result; +uint16_t * buf = static_cast(data); +uint32_t sum = 0; +uint32_t result; for ( sum = 0; len > 1; len -= 2 ) sum += *buf++; if ( len == 1 ) - sum += *(unsigned char*)buf; + sum += *reinterpret_cast(buf); sum = (sum >> 16) + (sum & 0xFFFF); sum += (sum >> 16); result = ~sum; -return result; +return static_cast(result); } //----------------------------------------------------------------------------- int STG_PINGER::SendPing(uint32_t ip) @@ -244,7 +223,7 @@ addr.sin_addr.s_addr = ip; memset(&pmSend, 0, sizeof(pmSend)); pmSend.hdr.type = ICMP_ECHO; -pmSend.hdr.un.echo.id = pid; +pmSend.hdr.un.echo.id = static_cast(pid); memcpy(pmSend.msg, &ip, sizeof(ip)); pmSend.hdr.checksum = PingCheckSum(&pmSend, sizeof(pmSend)); @@ -266,19 +245,17 @@ uint32_t ipAddr = 0; char buf[128]; memset(buf, 0, sizeof(buf)); -int bytes; socklen_t len = sizeof(addr); -bytes = recvfrom(recvSocket, &buf, sizeof(buf), 0, (struct sockaddr*)&addr, &len); -if (bytes > 0) +if (recvfrom(recvSocket, &buf, sizeof(buf), 0, reinterpret_cast(&addr), &len)) { - struct IP_HDR * ip = (struct IP_HDR *)buf; - struct ICMP_HDR *icmp = (struct ICMP_HDR *)(buf + ip->ihl * 4); + struct IP_HDR * ip = static_cast(static_cast(buf)); + struct ICMP_HDR *icmp = static_cast(static_cast(buf + ip->ihl * 4)); if (icmp->un.echo.id != pid) return 0; - ipAddr = *(uint32_t*)(buf + sizeof(ICMP_HDR) + ip->ihl * 4); + ipAddr = *static_cast(static_cast(buf + sizeof(ICMP_HDR) + ip->ihl * 4)); } return ipAddr;