/* * kPPPlogview: a accounting log system for kPPP * * Copyright (C) 1998 Mario Weilguni * * 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 #endif #include "loginfo.h" #include #ifdef HAVE_STRING_H #include #endif #include 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; }