You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdenetwork/kppp/logview/loginfo.cpp

198 lines
4.2 KiB

/*
* 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;
}