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/ruleset.h

147 lines
3.9 KiB

/* -*- C++ -*-
* kPPP: A pppd front end for the KDE project
*
* $Id$
*
* Copyright (C) 1997 Bernd Johannes Wuebben
* wuebben@math.cornell.edu
*
* This file was contributed by Mario Weilguni <mweilguni@sime.com>
* Thanks Mario !
*
* 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.
*/
#ifndef __RULESET__H__
#define __RULESET__H__
#include <tqmemarray.h>
#include <tqdatetime.h>
#include <tqstring.h>
// this structure is used to save
// accounting rules
typedef struct RULE {
int type;
double costs;
double len;
double after;
TQTime from, until;
struct {
TQDate from, until;
} date;
struct {
int from, until;
} weekday;
};
// this class is used for loading and parsing of rules
class RuleSet {
public:
/// create an empty rule
RuleSet();
/// gcc needs a destructor (otherwise compiler error)
~RuleSet() {};
/// returns the name of the ruleset
TQString name() const;
/** Load a ruleset from a file. If an error occurs,
* returns the linenumber the error was in,
* otherwise 0. If the file could not be opened,
* returns -1
*/
int load(const TQString &filename);
/// returns the currency symbol
TQString currencySymbol() const;
/** returns a string representation of the
* of a doubleingpoint number using the
* currency-settings
*/
TQString currencyString(double val) const;
/// sets the start time -- must be called when the connection has bee established
void setStartTime(TQDateTime dt);
/// returns the "per-connection" costs
double perConnectionCosts() const;
/** returns the minimum number of costs (some
* phony companies have this
*/
double minimumCosts() const;
/// returns the currently valid rule settings
void getActiveRule(TQDateTime dt, double connect_time, double &costs, double &len);
/// checks if a rulefile is ok (no parse errors...)
static int checkRuleFile(const TQString &);
protected:
/** converts an english name of a day to integer,
* beginning with monday=0 .. sunday=6
*/
int dayNameToInt(const char *s);
/// returns the date of easter-sunday for a year
static TQDate get_easter(int year);
/// add a rule to this ruleset
void addRule(RULE r);
/// parses on entry of the "on(...)" fields
bool parseEntry(RULE &ret, TQString s, int year);
/// parses the "on(...)" fields
bool parseEntries(TQString s, int year,
TQTime t1, TQTime t2,
double costs, double len, double after);
/// parses the "between(...)" time fields
bool parseTime(TQTime &t1, TQTime &t2, TQString s);
/// parses the "use(...)" fields
bool parseRate(double &costs, double &len, double &after, TQString s);
/// parses a whole line
bool parseLine(const TQString &line);
/// returns midnight time (00:00:00.000)
TQTime midnight() const;
/// returns the last valid time BEFORE midnight
TQTime beforeMidnight() const;
protected:
TQString _name;
TQString _currency_symbol;
TQDateTime starttime;
int _currency_digits;
double default_costs;
double _minimum_costs;
double default_len;
double pcf;
bool have_flat_init_costs;
double flat_init_duration;
double flat_init_costs;
TQMemArray<RULE> rules;
};
#endif