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();
  }
}