Source Code (Use browser search to find items of interest.)
Class Index
kppp'ExecutableAccounting (./kdenetwork/kppp/accounting.h:119)
class ExecutableAccounting : public AccountingBase {
Q_OBJECT
public:
ExecutableAccounting(PPPStats *st, QObject *parent = 0);
virtual bool loadRuleSet(const char *);
virtual bool running();
public slots:
virtual void slotStart();
virtual void slotStop();
private slots:
void gotData(KProcess *proc, char *buffer, int buflen);
signals:
void changed(QString total, QString session);
private:
KProcess *proc;
QString currency;
QString provider;
PPPStats *stats;
};
kppp'ExecutableAccounting::ExecutableAccounting() (./kdenetwork/kppp/accounting.cpp:364)
ExecutableAccounting::ExecutableAccounting(PPPStats *st, QObject *parent) :
AccountingBase(parent),
proc(0),
stats(st)
{
}
kppp'ExecutableAccounting::running() (./kdenetwork/kppp/accounting.cpp:372)
bool ExecutableAccounting::running() {
return (proc != 0) || proc->isRunning();
}
kppp'ExecutableAccounting::loadRuleSet() (./kdenetwork/kppp/accounting.cpp:377)
bool ExecutableAccounting::loadRuleSet(const char *) {
QString s = AccountingBase::getAccountingFile(gpppdata.accountingFile());
return (access(s.data(), X_OK) == 0);
}
kppp'ExecutableAccounting::gotData() (./kdenetwork/kppp/accounting.cpp:383)
void ExecutableAccounting::gotData(KProcess */*proc*/, char *buffer, int /*buflen*/) {
QString field[8];
int nFields = 0;
int pos, last_pos = 0;
// split string
QString b(buffer);
pos = b.find(':');
while(pos != -1 && nFields < 8) {
field[nFields++] = b.mid(last_pos, pos-last_pos);
last_pos = pos+1;
pos = b.find(':', last_pos);
}
for(int i = 0; i < nFields;i++)
fprintf(stderr, "FIELD[%d] = %s\n", i, field[i].data());
QString __total, __session;
QString s(buffer);
int del1, del2, del3;
del1 = s.find(':');
del2 = s.find(':', del1+1);
del3 = s.find(':', del2+1);
if(del1 == -1 || del2 == -1 || del3 == -1) {
// TODO: do something usefull here
return;
}
provider = s.left(del1);
currency = s.mid(del1, del2-del1);
__total = s.mid(del2, del2-del1);
__session = s.mid(del3, s.length()-del3+1);
bool ok1, ok2;
_total = __total.toDouble(&ok1);
_session = __session.toDouble(&ok2);
if(!ok1 || !ok2) {
// TODO: do something usefull here
return;
}
printf("PROVIDER=%s, CURRENCY=%s, TOTAL=%0.3e, SESSION=%0.3e\n",
provider.data(),
currency.data(),
_total,
_session);
}
kppp'ExecutableAccounting::slotStart() (./kdenetwork/kppp/accounting.cpp:434)
void ExecutableAccounting::slotStart() {
if(proc != 0)
slotStop(); // just to make sure
loadCosts();
QString s = AccountingBase::getAccountingFile(gpppdata.accountingFile());
proc = new KProcess;
QString s_total;
s_total.sprintf("%0.8f", total());
*proc << s.data() << s_total.data();
connect(proc, SIGNAL(receivedStdout(KProcess *, char *, int)),
this, SLOT(gotData(KProcess *, char *, int)));
proc->start();
time_t start_time = time(0);
s = timet2qstring(start_time);
s += ":";
s += gpppdata.accname();
s += ":";
s += currency;
logMessage(s, TRUE);
}
kppp'ExecutableAccounting::slotStop() (./kdenetwork/kppp/accounting.cpp:460)
void ExecutableAccounting::slotStop() {
if(proc != 0) {
proc->kill();
delete proc;
proc = 0;
QString s;
s.sprintf(":%s:%0.4e:%0.4e:%u:%u\n",
timet2qstring(time(0)).data(),
session(),
total(),
stats->ibytes,
stats->obytes);
logMessage(s, FALSE);
saveCosts();
}
}