|
|
|
/*
|
|
|
|
* kPPPlogview: a accounting log system for kPPP
|
|
|
|
*
|
|
|
|
* Copyright (C) 1998 Mario Weilguni <mweilguni@kde.org>
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Library General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Library General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Library General Public
|
|
|
|
* License along with this program; if not, write to the Free
|
|
|
|
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include <config.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "loginfo.h"
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
#ifdef HAVE_STRING_H
|
|
|
|
#include <string.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <kdebug.h>
|
|
|
|
|
|
|
|
char *mystrsep (char **stringp, const char *delim);
|
|
|
|
|
|
|
|
LogInfo::LogInfo(TQCString data) {
|
|
|
|
parse(data);
|
|
|
|
}
|
|
|
|
|
|
|
|
TQDateTime LogInfo::from() const {
|
|
|
|
TQDateTime tm;
|
|
|
|
tm.setTime_t(_from);
|
|
|
|
return tm;
|
|
|
|
}
|
|
|
|
|
|
|
|
TQDateTime LogInfo::until() const {
|
|
|
|
TQDateTime tm;
|
|
|
|
tm.setTime_t(_until);
|
|
|
|
return tm;
|
|
|
|
}
|
|
|
|
|
|
|
|
TQString LogInfo::connectionName() const {
|
|
|
|
return _conname;
|
|
|
|
}
|
|
|
|
|
|
|
|
TQString LogInfo::currency() const {
|
|
|
|
return _currency;
|
|
|
|
}
|
|
|
|
|
|
|
|
double LogInfo::sessionCosts() const {
|
|
|
|
return _session_cost;
|
|
|
|
}
|
|
|
|
|
|
|
|
double LogInfo::totalCosts() const {
|
|
|
|
return _total_cost;
|
|
|
|
}
|
|
|
|
|
|
|
|
double LogInfo::bytesIn() const {
|
|
|
|
return _bytes_in;
|
|
|
|
}
|
|
|
|
|
|
|
|
double LogInfo::bytesOut() const {
|
|
|
|
return _bytes_out;
|
|
|
|
}
|
|
|
|
|
|
|
|
double LogInfo::bytes() const {
|
|
|
|
if(bytesIn() == -1 || bytesOut() == -1)
|
|
|
|
return -1;
|
|
|
|
else
|
|
|
|
return bytesIn() + bytesOut();
|
|
|
|
}
|
|
|
|
|
|
|
|
int LogInfo::error() const {
|
|
|
|
return errorfield;
|
|
|
|
}
|
|
|
|
|
|
|
|
void LogInfo::parse(TQCString s) {
|
|
|
|
errorfield = 0;
|
|
|
|
char *c = (char *)malloc(s.length() + 1), *csep;
|
|
|
|
strcpy(c, s);
|
|
|
|
|
|
|
|
// init data
|
|
|
|
_from = _until = 0;
|
|
|
|
_conname = "";
|
|
|
|
_currency = "";
|
|
|
|
_bytes_in = _bytes_out = -1;
|
|
|
|
_session_cost = _total_cost = -1;
|
|
|
|
|
|
|
|
// start of connection time
|
|
|
|
csep = c;
|
|
|
|
char *p = mystrsep(&csep, ":");
|
|
|
|
int i = 0;
|
|
|
|
while(i < 8 && p != 0) {
|
|
|
|
TQString token = TQString::fromLocal8Bit(p);
|
|
|
|
|
|
|
|
switch(i) {
|
|
|
|
case 0:
|
|
|
|
_from = token.toULong();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
_conname = token;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
_currency = token;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
_until = token.toULong();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 4:
|
|
|
|
_session_cost = token.toFloat();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 5:
|
|
|
|
_total_cost = token.toFloat();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 6:
|
|
|
|
_bytes_in = token.toLong();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 7:
|
|
|
|
_bytes_out = token.toLong();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
i++;
|
|
|
|
p = mystrsep(&csep, ":");
|
|
|
|
}
|
|
|
|
|
|
|
|
free(c);
|
|
|
|
|
|
|
|
if(i == 8)
|
|
|
|
errorfield = 0;
|
|
|
|
else
|
|
|
|
errorfield = i+1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int LogInfo::duration() const {
|
|
|
|
if( _until - _from < 0)
|
|
|
|
return 0;
|
|
|
|
else
|
|
|
|
return _until - _from;
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef MYDEBUG
|
|
|
|
void LogInfo::dump() {
|
|
|
|
kdDebug(5002) << "LOGINFO " << this << endl;
|
|
|
|
kdDebug(5002) << "connection name : " << connectionName() << endl;
|
|
|
|
kdDebug(5002) << "currency symbol : " << currency() << endl;
|
|
|
|
kdDebug(5002) << "begin : " << ctime(&_from) << endl;
|
|
|
|
kdDebug(5002) << "end : " << ctime(&_until) << endl;
|
|
|
|
kdDebug(5002) << "duration : " << (int)_until - (int)_from << " seconds" << endl;
|
|
|
|
kdDebug(5002) << "session cost : " << sessionCosts() << endl;
|
|
|
|
kdDebug(5002) << "total cost : " << totalCosts() << endl;
|
|
|
|
kdDebug(5002) << "bytes in : " << bytesIn() << endl;
|
|
|
|
kdDebug(5002) << "bytes out : " << bytesOut() << endl;
|
|
|
|
kdDebug(5002) << "bytes total : " << bytes() << endl;
|
|
|
|
kdDebug(5002) << endl;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
char *mystrsep (char **stringp, const char *delim) {
|
|
|
|
char *begin, *end;
|
|
|
|
|
|
|
|
begin = *stringp;
|
|
|
|
if (begin == 0L)
|
|
|
|
return 0L;
|
|
|
|
|
|
|
|
/* Find the end of the token. */
|
|
|
|
end = strpbrk (begin, delim);
|
|
|
|
if (end) {
|
|
|
|
/* Terminate the token and set *STRINGP past NUL character. */
|
|
|
|
*end++ = '\0';
|
|
|
|
*stringp = end;
|
|
|
|
} else
|
|
|
|
/* No more delimiters; this is the last token. */
|
|
|
|
*stringp = 0L;
|
|
|
|
|
|
|
|
return begin;
|
|
|
|
}
|
|
|
|
|
|
|
|
|