/* * 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 * 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 #include #include // this structure is used to save // accounting rules 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 rules; }; #endif