diff --git a/base/applications/network/nslookup/utility.c b/base/applications/network/nslookup/utility.c index 2c9c9eb905d..9064744847c 100644 --- a/base/applications/network/nslookup/utility.c +++ b/base/applications/network/nslookup/utility.c @@ -507,6 +507,36 @@ void PrintD2( PCHAR pBuffer, DWORD BufferLength ) _tprintf( _T("\n------------\n") ); } +int _TtlToStr(ULONG secs, LPTSTR buff, size_t blen, PULONG ttl, LPCTSTR str) +{ + int len = 0; + ULONG val; + + if(*ttl >= secs) + { + val = *ttl / secs; + *ttl = *ttl % secs; + len += _sntprintf(buff, blen, (val == 1 ? _T("%lu %s ") : _T("%lu %ss ")), val, str); + } + return len; +} + +LPCTSTR TtlToStr(ULONG ttl) +{ + static TCHAR buff[40]; + int i = 0; + + i += _TtlToStr(60*60*24, &buff[i], (sizeof(buff) / sizeof(*buff)) - i, &ttl, _T("day")); + i += _TtlToStr(60*60, &buff[i], (sizeof(buff) / sizeof(*buff)) - i, &ttl, _T("hour")); + i += _TtlToStr(60, &buff[i], (sizeof(buff) / sizeof(*buff)) - i, &ttl, _T("min")); + i += _TtlToStr(1, &buff[i], (sizeof(buff) / sizeof(*buff)) - i, &ttl, _T("sec")); + if(i) + buff[i-1] = '\0'; + else + _tcscpy(buff, _T("0 secs")); + return buff; +} + void PrintDebug( PCHAR pBuffer, DWORD BufferLength ) { USHORT ResponseID; @@ -625,7 +655,7 @@ void PrintDebug( PCHAR pBuffer, DWORD BufferLength ) _tprintf( _T(" name = %s\n"), pName ); } - _tprintf( _T(" ttl = %d ()\n"), (int)TTL ); + _tprintf( _T(" ttl = %lu (%s)\n"), TTL, TtlToStr(TTL) ); } } @@ -666,11 +696,11 @@ void PrintDebug( PCHAR pBuffer, DWORD BufferLength ) _tprintf( _T(" nameserver = %s\n"), pName ); - _tprintf( _T(" ttl = %d ()\n"), (int)TTL ); + _tprintf( _T(" ttl = %lu (%s)\n"), TTL, TtlToStr(TTL) ); } else if( TYPE_SOA == Type ) { - _tprintf( _T(" ttl = %d ()\n"), (int)TTL ); + _tprintf( _T(" ttl = %lu (%s)\n"), TTL, TtlToStr(TTL) ); /* Print out the primary NS. */ i += ExtractName( pBuffer, pName, i, 0 ); @@ -683,12 +713,28 @@ void PrintDebug( PCHAR pBuffer, DWORD BufferLength ) _tprintf( _T(" responsible mail addr = %s\n"), pName ); /* Print out the serial, refresh, retry, expire and default TTL. */ - _tprintf( _T(" serial = ()\n") ); - _tprintf( _T(" refresh = ()\n") ); - _tprintf( _T(" retry = ()\n") ); - _tprintf( _T(" expire = ()\n") ); - _tprintf( _T(" default TTL = ()\n") ); - i += 20; + _tprintf( _T(" serial = %lu\n"), ntohl( *(PULONG)(pBuffer + i)) ); + i += 4; + + TTL = ntohl( *(PULONG)(pBuffer + i) ); + i += 4; + + _tprintf( _T(" refresh = %lu (%s)\n"), TTL, TtlToStr(TTL) ); + + TTL = ntohl( *(PULONG)(pBuffer + i) ); + i += 4; + + _tprintf( _T(" retry = %lu (%s)\n"), TTL, TtlToStr(TTL)); + + TTL = ntohl( *(PULONG)(pBuffer + i) ); + i += 4; + + _tprintf( _T(" expire = %lu (%s)\n"), TTL, TtlToStr(TTL) ); + + TTL = ntohl( *(PULONG)(pBuffer + i) ); + i += 4; + + _tprintf( _T(" default TTL = %lu (%s)\n"), TTL, TtlToStr(TTL) ); } } } @@ -730,7 +776,7 @@ void PrintDebug( PCHAR pBuffer, DWORD BufferLength ) _tprintf( _T(" internet address = %s\n"), pName ); - _tprintf( _T(" ttl = %d ()\n"), (int)TTL ); + _tprintf( _T(" ttl = %lu (%s)\n"), TTL, TtlToStr(TTL) ); } } }