<chapter xml:id="ch1">
<title>Назначение и возможности системы</title>
<para>Система Stargazer (далее просто «система») предназначена для авторизации и учета трафика в локальных сетях. При написании данной системы была поставлена задача создать продукт, который отвечал бы требованиям большинства локальных сетей для учета в них трафика и средств клиентов, а также безопасной авторизации клиентов.</para>
+ <para>Система построена по клиент-серверной технологии, что обеспечивает необходимую гибкость и быстродействие. В качестве сервера выступает машина с ОС Linux или FreeBSD и архитектурой x86/x86_64/SPARC. В качестве клиентов могут выступать машины как семейства Windows, так и клиенты с ОС GNU/Linux или FreeBSD. Так же клиентом может выступать любая ОС, в которой есть поддержка сетевых протоколов TCP-IP и WEB-броузер.</para>
+ <para>Система имеет модульную структуру, что позволяет гибко изменять ее конфигурацию и функциональность.</para>
+ <para>Основные возможности системы:</para>
+ <itemizedlist mark="opencircle">
+ <listitem><para>контроль над клиентами сети, их добавление, удаление, текущие корректировки;</para></listitem>
+ <listitem><para>авторизация клиента, с последующим разрешением или запретом доступа в Internet;</para></listitem>
+ <listitem><para>подсчет трафика по предварительно заданным направлениям и правилам;</para></listitem>
+ <listitem><para>подсчет израсходованных клиентом средств и автоматическое отключение в случае их полного расходования;</para></listitem>
+ <listitem><para>хранение дополнительной информации о клиенте, такой как домашний адрес, телефон и т.д.;</para></listitem>
+ <listitem><para>автоматический пинг всех клиентов сети и вывод результатов на экран;</para></listitem>
+ <listitem><para>ведение истории для всех клиентов;</para></listitem>
+ <listitem><para>журналирование действий администраторов системы;</para></listitem>
+ <listitem><para>оперативное предоставление клиенту информации о его трафике и наличии средств;</para></listitem>
+ <listitem><para>формирование подробных отчетов о состоянии клиентов;</para></listitem>
+ <listitem><para>подключаемые модули.</para></listitem>
+ </itemizedlist>
</chapter>
<chapter xml:id="ch2">
<title>Описание компонентов системы</title>
<para>Составными компонентами системы являются:</para>
- <orderedlist>
- <listitem>Сервер</listitem>
- <listitem>Конфигуратор</listitem>
- <listitem>Авторизатор</listitem>
+ <orderedlist numeration="arabic">
+ <listitem><para>сервер;</para></listitem>
+ <listitem><para>конфигуратор;</para></listitem>
+ <listitem><para>авторизатор.</para></listitem>
</orderedlist>
+ <para>Сервер – служит для авторизации клиентов, манипуляции правилами сетевого фильтра (firewall), подсчета трафика, выполнения финансовых операций, хранения информации о статистике и выдаче её клиентам и администраторам.</para>
+ <para>Конфигуратор – используют администраторы сети. Служит для просмотра и редактирования свойств клиентов. Конфигуратор является основным инструментарием для администрирования системы. Доступ к различным функциям разграничен для различных категорий администраторов. С помощью конфигуратора выполняются все финансовые операции с клиентскими счетами, так же просматривается подробная статистика клиентов. Конфигуратором настраиваются некоторые параметры сервера, например тарифные планы и администраторы.</para>
+ <para>Авторизатор – используется на клиентских машинах. С его помощью происходит авторизация клиента на сервере, получение права на доступ в Интернет или к другим ресурсам, которые разрешены администратором. Так же авторизатор позволяет клиенту просмотреть свою статистику и состояние денежных средств на счету.</para>
</chapter>
<title>Установка системы</title>
<para>Система обычно поставляется в виде 3 файлов: исходных кодов сервера, бинарной сборки конфигуратора и авторизатора.</para>
<para>Стабильная версия сервера маркируется так: stg-A.B.src.tgz. A и B – старшая и младшая версия сервера. Промежуточные версии сервера имеют маркировку: stg-A.B-YYYY.MM.DD-HH.MM.SS.tgz. A и B – старшая и младшая версия сервера. YYYY.MM.DD-HH.MM.SS – дата и время сборки.</para>
+ <para>Установочный файл конфигуратора имеет маркировку: sgconfig-A.B.C.win.exe. A.B – старшая и младшая версия конфигуратора. C – версия протокола конфигуратора. Исходные коды конфигуратора имеют маркировку: sgconfig-A.B.C.src.rar.</para>
+ <para>Установочный файл авторизатора имеет маркировку: inetaccess-A.B.C.win.exe. A.B – старшая и младшая версия авторизатора. C – версия протокола авторизатора.</para>
+ <simplesect>
+ <title>Установка сервера</title>
+ <programlisting linenumbering="numbered">
+ tar -zxvf stg-A.B.src.tgz
+ cd stg-A.B.src/projects/stargazer
+ ./build
+ make install
+ </programlisting>
+ <para>Заголовок скрипта build содержит набор параметров сборки и установки:</para>
+ <itemizedlist>
+ <listitem><para>LDFLAGS – дополнительные ключи компоновщика (ключи, предназначенные непосредственно ld указывать в виде -Wl,<ключ>);</para></listitem>
+ <listitem><para>CXXFLAGS – дополнительные ключи компилятора;</para></listitem>
+ <listitem><para>PREFIX – префикс путей установки;</para></listitem>
+ <listitem><para>BIN_MODE – права доступа к бинарным файлам системы (0755 по умолчанию);</para></listitem>
+ <listitem><para>DATA_MODE – права доступа к файлам данных системы (0644 по умолчанию);</para></listitem>
+ <listitem><para>DIR_MODE — права доступа к каталогам системы (0755 по умолчанию);</para></listitem>
+ <listitem><para>OWNER – владелец файлов системы (root по умолчанию);</para></listitem>
+ <listitem><para>FIREBIRD_GROUP – группа сервера СУБД Firebird (по умолчанию firebird);</para></listitem>
+ <listitem><para>DB_ADDRESS – адрес БД (Firebird) системы ( по умолчанию "localhost:/var/stargazer/stargazer.fdb");</para></listitem>
+ <listitem><para>DB_USER – пользователь БД (Firebird) системы (по умолчанию "stg");</para></listitem>
+ <listitem><para>DB_PASSWORD – пароль пользователя БД (Firebird) системы (по умолчанию "123456");</para></listitem>
+ <listitem><para>FIREBIRD_ISQL – путь к командному интерпретатору SQL СУБД Firebird (по умолчанию "/opt/firebird/bin/isql", пользователи Debian и, возможно, некоторых других дистрибутивов должны указать путь к утилите isql-fb);</para></listitem>
+ </itemizedlist>
+ <para>Параметры указываются в формате <ИМЯ_ПАРАМЕТРА> = <ЗНАЧЕНИЕ_ПАРАМЕТРА></para>
+ <para>В случае успешной сборки бинарных файлов сервера и их инсталляции в каталогах /etc и /var появится каталог stargazer с набором конфигурационных файлов. Бинарный файл установиться в каталог /usr/sbin с именем stargazer, библиотеки и модули установятся в каталог /usr/lib/stg/ а заголовочные файлы в каталог /usr/include/stg.</para>
+ <para>Если сборка прошла без ошибок и необходимые файлы находятся в соответствующих каталогах, то установка считается успешно завершенной.</para>
+ <para>Для удобства разработчиков и для создания багрепортов возможна сборка в отладочном режиме. Для этого скрипт ./build запускается с параметром debug. В этом режиме сборка не производится, а выполняется только конфигурирование. Для сборки отладочной версии необходимо выполнить команду make (gmake для BSD-систем). Также возможна раздельная установка бинарных файлов и файлов данных. Для этого в Makefile предусмотренны цели install-bin и install-data. make install-bin устанавливает только бинарные файлы (сервер, модули и библиотеки) и заголовочные файлы. make install-data устанавливает конфигурационные файлы и БД. По аналогии с целью install работает и цель uninstall. make uninstall удаляет сервер из системы. uninstall-bin и uninstall-data удаляют бинарные файлы и файлы данных соответственно.</para>
+ <formalpara>
+ <title>Внимание!</title>
+ <para>Для успешной сборки сервера необходима правильно установленная библиотека LibExpat. (Поиск производится в /usr/lib и /usr/local/lib, но при желании с помощью переменных окружения CXXFLAGS и LDFLAGS можно указать и иное месторасположение библиотеки).</para>
+ </formalpara>
+ <para>Если в процессе сборки будет обнаружена правильно установленная библиотека fbclient (входит в стандартную поставку СУБД Firebird) в сборку будет включен модуль для работы с СУБД Firebird. Модуль поддерживает работу с СУБД Firebird версии 1.5 и выше.</para>
+ <para>Если в процессе сборки будет обнаружена правильно установленная библиотека mysqlclient (входит в стандартную поставку СУБД MySQL) в сборку будет включен модуль для работы с СУБД MySQL. Модуль поддерживает работу с СУБД MySQL версии 4.0 и выше.</para>
+ <para>Если в процессе сборки будет обнаружена библиотека pq в сборку будет включен модуль для работы с СУБД PostgreSQL. Модуль поддерживает работу с СУБД PostgreSQL версии 8.0 и выше.</para>
+ <formalpara>
+ <title>Примечание</title>
+ <para>Если сборка завершилась неудачей, то необходимо проверить доступность библиотеки LibExpat. Пользователи ОС Linux могут выполнить команду ldconfig -p | grep libexpat.so. Если она выведет нечто похожее на
+ <programlisting linenumbering="unnumbered">
+ # ldconfig -p | grep libexpat.so
+ libexpat.so.1 (libc6) => /usr/lib/libexpat.so.1
+ libexpat.so (libc6) => /usr/lib/libexpat.so
+ </programlisting>
+ значит библиотека доступна. Если вывод будет пустой – библиотека в системе не найдена. Для пользователей ОС FreeBSD можно выполнить команду ls /usr/lib | grep libexpat.so. Если она выведет нечто похожее на
+ <programlisting linenumbering="unnumbered">
+ # ls /usr/lib | grep libexpat.so
+ libexpat.so
+ libexpat.so.4
+ </programlisting>
+ значит библиотека доступна. Если вывод пустой – скорее всего библиотеки в системе нет или она установлена неправильно. Возможно, библиотека установлена в другое место. Если это так – достаточно при выполнении скрипта build в CXXFLAGS с помощью ключа -I указать путь к заголовочным файлам библиотеки, а в LDLFAGS с помощью ключа -L указать путь к самой библиотеке. Для поиска библиотеки можно использовать команды locate, slocate, whereis или find. Если библиотека в системе отсутствует – установите ее используя Ваш пакетный менеджер (apt (Debian, Ubuntu), rpm (RPM-based дистрибутивы), emerge (Gentoo) или др.). Так же библиотеку можно установить из исходных кодов, доступных на странице http://sourceforge.net/projects/expat/.</para>
+ </formalpara>
+ <para>Для использования СУБД Firebird в качестве хранилища необходимо наличие библиотеки fbclient. Проверка может быть выполнена аналогично библиотеке LibExpat: ldconfig -p | grep libfbclient.so для ОС Linux и ls /usr/lib | grep libfbclient.so для ОС FreeBSD. Некоторые дистрибутивы позволяют установить ее отдельно от СУБД (например, в Ubuntu соответствующий пакет называется libfbclient1), некоторые – только в составе сервера (например, Gentoo). Исходные коды СУБД Firebird доступны для скачивания со страницы http://www.firebirdsql.org/index.php?op=files. Необходимо заметить, что сами разработчики СУБД Firebird не разделяют свой продукт на клиентскую и серверную части. По этому архивы исходных кодов содержат и сервер СУБД, и консольный клиент (командный интерпретатор SQL) и клиентскую библиотеку.</para>
+ <para>Для использования СУБД MySQL в качестве хранилища необходимо наличие библиотеки mysqlclient. Проверка выполняется аналогично первым двум: ldconfig -p | grep libmysqlclient_r.so для ОС Linux и ls /usr/lib | grep libmysqlclient_r.so для ОС FreeBSD. Так же проверку можно выполнить с помощью утилиты mysql_config. Ее вызов с ключем --libs_r должен выдать что-то похожее на
+ <programlisting linenumbering="unnumbered">
+ $ mysql_config --libs
+ -Wl,-O1 -rdynamic -L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib -lssl -lcrypto
+ </programlisting>
+ Необходима именно реентерабельная версия библиотеки, т.к. Сам плагин не имеет блокировок. Некоторые дистрибутивы позволяют установить ее отдельно от СУБД (например, в Ubuntu соответствующие пакеты называются libmysqlclient15-dev и libmysqlclient15off), некоторые – только в составе сервера (например, Gentoo). Исходные коды открытой/свободной версии СУБД MySQL доступны для скачивания со страницы http://dev.mysql.com/downloads/mysql/5.0.html. Необходимо заметить, что сами разработчики СУБД MySQL не разделяют свой продукт на клиентскую и серверную части. По этому архивы исходных кодов содержат и сервер СУБД MySQL, и консольный клиент (командный интерпретатор SQL) и клиентскую библиотеку.</para>
+ <para>Для использования СУБД PostgreSQL необходимо наличие библиотеки pq. Проверка выполняется аналогично предыдущим: ldconfig -p | grep libpq.so для ОС Linux и ls /usr/lib | grep libpq.so для ОС FreeBSD. Так-же проверку можно выполнить с использованием утилиты pg_config или pkg_config. Ее вызов с ключем --libdir выдать что-то похожее на
+ <programlisting numbered="unnumbered">
+ $ pg_config --libdir
+ /usr/lib
+ </programlisting>
+ Обычно библиотека устанавливается отдельно от самой СУБД. Например, в Debian соответствующий пакет называется libpq5 и libpq-dev. Исходные коды библиотеки можно загрузить со страницы http://www.postgresql.org/ftp/source/. Необходимо заметить, что сами разработчики СУБД PostgreSQL не разделяют свой продукт на клиентскую и серверную части. По этому архивы исходных кодов содержат и сервер СУБД PostgreSQL, и консольный клиент (командный интерпретатор SQL) и клиентскую библиотеку.</para>
+ </simplesect>
+ <simplesect>
+ <title>Установка авторизатора и конфигуратора</title>
+ <para>Для установки конфигуратора необходимо запустить установочный файл и следовать вопросам мастера установки.</para>
+ <para>Для установки авторизатора необходимо запустить установочный файл и следовать вопросам мастера установки.</para>
+ </simplesect>
+ <simplesect>
+ <title>Запуск сервера</title>
+ <para>При запуске в качестве первого параметра можно указать путь к директории, где расположен файл stargazer.conf. По умолчанию при запуске без параметров система ищет файл в каталоге /etc/stargazer. Например если файл stargazer.conf находится в каталоге /etc/stargazer2, то для запуска системы с чтением настройки из этого каталога следует запустить сервер таким образом: ./stargazer /etc/stargazer2. Для просмотра, работает ли сервер, необходимо выполнить команду: ps –x | grep stargazer. В случае если сервер успешно был запущен и работает то результат команды должен быть примерно таким:</para>
+ <programlisting linenumbering="unnumbered">
+ 4818 ? S< 0:32 ./stargazer /etc/stargazer
+ 4819 ? S 0:00 stg-exec /etc/stargazer
+ </programlisting>
+ <para>Следует отметить что в выводе предыдущей команды должно присутствовать не менее двух строк. То есть, первая строка в данном примере – это процесс сервера, вторая – процесс исполнителя скриптов. Если присутствует только строка с именем stg-exec или не имеется строк вовсе, то сервер не запущен или имеются проблемы в его работе. Для диагностики ошибок при запуске сервера необходимо просмотреть содержимое журнала сервера биллинга (/var/log/stargazer.log) или же системный журнал (обычно /var/log/messages).</para>
+ <para>Сервер ведет журнал своих действий, куда заносятся все сообщения системы. По умолчанию лог файл находится в каталоге /var/log и имеет название stargazer.log. Если при запуске сервера возникла какая-то ошибка, то необходимо просмотреть файл журнала и исправить ошибку. В случае если серверу не удается записать сообщения в указанный файл, он пытается писать сообщения в syslog, обычно записи syslog находяться в /var/log/messages.</para>
+ </simplesect>
</chapter>
<title>Настройка системы</title>
<para>После инсталляции система должна быть подвергнута процедуре настройки. Обычно следует начинать с настройки сервера.</para>
<para>Основные конфигурационные файлы сервера по умолчанию находятся в каталоге /etc/stargazer. Они включают в себя: основной конфигурационный файл stargazer.conf, файл описания направлений тарификации rules, набор скриптов On* и два каталога — conf-available.d и conf-enabled.d, содержащих конфигурационные файлы отдельных модулей. Для включения какого-либо модуля нужно сделать символическую ссылку на его конфигурационный файл в каталоге conf-enabled.d или прописать его конфигурационную секцию в разделе <Modules> файла stargazer.conf.</para>
+ <simplesect>
+ <title>Настройка конфигурационного файла /etc/stargazer/stargazer.conf</title>
+ <para>Файл имеет текстовый формат, содержащий пары ПАРАМЕТР = ЗНАЧЕНИЕ и секции <ИМЯ_СЕКЦИИ ПАРАМЕТРЫ_СЕКЦИИ>. Комментарии в файле начинаются с символа #. В файле описываются общие параметры, которые являются глобальными значениями для всего сервера биллинга, а также параметры соответствующих модулей. Параметры модулей должны быть заключены в секции:</para>
+ <programlisting linenumbering="unnumbered">
+ <Module [имя модуля(имя файла модуля без mod_ и без .so)]>
+
+ </Module>
+ </programlisting>
+ <para>Описание глобальных параметров параметров:</para>
+ <itemizedlist mark="opencircle">
+ <listitem><para>Rules – параметр, указывающий серверу, где находится файл с правилами для подсчета трафика клиентов, по умолчанию Rules=/etc/stargazer/rules</para></listitem>
+ <listitem><para>LogFile – параметр, указывающий серверу расположение файла, в который будут заноситься все сообщения системы, по умолчанию LogFile=/var/log/stargazer.log</para></listitem>
+ <listitem><para>PidFile — параметр, указывающий серверу где находится файл хранящий PID (идентификатор процесса) дэмона, по умолчанию это /var/run/stargazer.pid. Используется скриптами запуска/останова.</para></listitem>
+ <listitem><para>ModulesPath – параметр, указывающий серверу путь, где находятся подключаемые модули (плагины). По умолчанию ModulesPath = /usr/lib/stg.</para></listitem>
+ <listitem><para>DetailStatWritePeriod – параметр, указывающий серверу через какое время должна записываться детальная статистика клиента, по умолчанию StatTime=1/6. Данный параметр может принимать следующие значения: 3 - раз в три часа, 2 - раз в два часа, 1 - раз в чаc, 1/2 - раз в пол часа, 1/4 - раз в 15 минут, 1/6 - раз в 10 минут.</para></listitem>
+ <listitem><para>StatWritePeriod – параметр, указывающий серверу периодичность записи в БД информации о статистике пользователя (в минутах). При большом количестве пользователей эту величину стоит увеличить, так как запись в БД может занимать длительное время. По умолчанию StatWritePeriod = 10.</para></listitem>
+ <listitem><para>DayFee – параметр, показывающий серверу, в какой день месяца снимать с клиентских счетов сумму абонплаты, в соответствии с тарифными планами клиентов. По умолчанию DayFee=21. Следует помнить, что в некоторых месяцах не более 28 дней. Данный параметр также может принять значение 0; если параметр равен 0, тогда система выполнит действия в последний день текущего месяца; определение последнего дня месяца проводится автоматически.</para></listitem>
+ <listitem><para>DayResetTraff – параметр указывает серверу в какой день месяца очищать статистику клиентов; так же в этот день сервер осуществляет переход на новый тариф, если он был изменен у клиента. По умолчанию DayResetTraff = 28. Следует помнить, что в некоторых месяцах не более 28 дней. Данный параметр также может принять значение 0; если параметр равен 0, тогда система выполнит действия в последний день текущего месяца; определение последнего дня месяца проводится автоматически.</para></listitem>
+ <listitem><para>SpreadFee – параметр, указывающий серверу, производить ли «размазанное» снятие абонплаты. Т. е. сумма абонплаты указанная в тарифе пользователя будет сниматься не раз в месяц, а каждый день ровными долями. По умолчанию SpreadFee = no.</para></listitem>
+ <listitem><para>FreeMbAllowInet – параметр, указывающий серверу выполнять ли для пользователя скрипт OnConnect, если у него на балансе отсутствуют средства, но остался предоплаченный трафик. По умолчанию FreeMbAllowInet = no.</para></listitem>
+ <listitem><para>WriteFreeMbTraffCost – параметр, определяющий, что будет писаться в стоимость трафика в детальной статистике. Если у клиента еще есть предоплаченный трафик и WriteFreeMbTraffCost = no, то в детальную статистику будет записываться стоимость со значением = 0. Если у пользователя уже нет предоплаченного трафика и WriteFreeMbTraffCost = no, то в детальную статистику будет записана стоимость трафика. При WriteFreeMbTraffCost = yes стоимость трафика будет записана в любом случае. По умолчанию WriteFreeMbTraffCost = no.</para></listitem>
+ <listitem><para>DayFeeIsLastDay – параметр, указывающий серверу, когда абонплата снимается в последний (yes) или первый (no) день учетного периода. Это влияет на то, как будет снята абонплата (АП) при переходе на новый тариф. Если у пользователя был тариф A с АП=100 и он хочет перейти на тариф B с АП=200, то при переходе на новый тариф со счета пользователя снимется 100, если DayFeeIsLastDay = yes, и 200, если DayFeeIsLastDay = no. По умолчанию DayFeeIsLastDay = yes.</para></listitem>
+ <listitem><para>ExecutersNum – параметр который показывает, сколько процессов исполнителя скриптов может быть запущено одновременно. Количество процессов означает сколько скриптов могут выполнятся одновременно. По умолчанию ExecutersNum = 1. Если выполнение ваших скриптов занимает много времени следует увеличить это значение. Каждый исполнитель скриптов блокируется на время, пока отработает скрипт. Если исполнителей несколько — они принимают скрипты на выполнение по принципу «кто успел».</para></listitem>
+ <listitem><para>StgMsgKey – параметр отвечающий за идентификатор очереди сообщений для исполнителя скриптов. По умолчанию данный параметр закомментирован и равен 5555. Рекомендуется не изменять значение параметра без нужды. Его изменение целесообразно лишь в том случае, если в системе требуется запустить более одной копии сервера биллинга.</para></listitem>
+ <listitem><para>ShowFeeInCash – показывать на счету и позволять использовать абонплату пользователю. Принимает значения yes и no. Параметр не является обязательным, по умолчанию установлен в yes.</para></listitem>
+ <listitem><para>FullFee – снимать полную абонплату, даже если пользователь был заморожен часть учетного периода. Принимает значения yes и no. Параметр не является обязательным, по умолчанию установлен в no.</para></listitem>
+ <listitem><para>MessagesTimeout — устанавливает время жизни не отправленных сообщений пользователям. Время указывается в сутках. При превышении этого времени сообщение будет удалено, в т.ч. из БД. Если указан 0 то значения не будут удаляться из базы. По умолчанию 0.</para></listitem>
+ <listitem><para>FeeChargeType — регулирует процесс снятия абонплаты. Может принимать значения 0, 1 и 2. При значении 0 абонплата снимается как обычно. При значении 1 абонплата снимается только если баланс пользователя положительный. При значении 2 абонплата снимается только если баланс пользователя больше абонплаты.</para></listitem>
+ <listitem><para>ReconnectOnTariffChange — позволяет выполнить переподключение пользователя при смене тарифа. Может принимать значения yes и no. При указании ReconnectOnTariffChange = yes при смене тарифа пользователя если он был подключен произойдет его отключение и подключение заново. Может быть полезно для управления шейпером.</para></listitem>
+ <listitem><para>Именования направлений в конфигурационном файле должны быть заключены в теги:
+ <programlisting linenumbering="unnumbered">
+ <DirNames>
+ DirName0 = "ИМЯ НАПРАВЛЕНИЯ"
+ ...
+ DirName9 = ПОСЛЕДНЕЕ_НАПРАВЛЕНИЕ
+ </DirNames>
+ </programlisting>
+ Всего предусмотрено 10 направлений с нумерацией от 0 до 9. Внутри данных тегов указывается названия направлений. Направления, наименование которых состоит из нескольких слов, должны быть заключены в кавычки. Если наименование направления не указано, то система считает что данное направление не используется и не будет производить по нему никаких действий. Пример: DirName0 = Локаль, DirName5 = "Локальные игры". Необходимо заметить, что текущая версия системы требует, чтобы имена направлений были указаны в кодировке KOI8-R. В противном случае пользователи не смогут их прочитать в статистике авторизатора, а администраторы — в конфигураторе.</para></listitem>
+ </itemizedlist>
+ <para>Все модули (кроме Store module), которые необходимо подключить к серверу в момент старта должны идти внутри секции:</para>
+ <programlisting linenumbering="unnumbered">
+ <Modules>
+ <Module [имя модуля]>
+ ПАРАМЕТРЫ_МОДУЛЯ
+ </Module>
+ </Modules>
+ </programlisting>
+ <para>Если модуль не имеет настраиваемых параметров, то он все равно должен задаваться в тегах Module … /Module чтобы быть успешно загруженным. Некоторые модули, такие как store module обязательно требуются при старте и без их подключения система не может быть запущена. По умолчанию для указания конфигурации модулей используются отдельные файлы из каталога conf-enabled.d. Для этого используется директива <IncludeFile ПУТЬ_К_ФАЙЛУ></IncludeFile>. Одна директива указана в секции <Modules>, а вторая в корне файла конфигурации (для store module).</para>
+ <formalpara>
+ <title>Описание параметров модуля InetAccess (auth_ia) для работы с клиентскими авторизаторами:</title>
+ <itemizedlist mark="opencircle">
+ <listitem><para>Port – параметр, определяющий на каком порту сервер будет принимать обращения авторизаторов клиентов, по умолчанию UserPort=5555.</para></listitem>
+ <listitem><para>UserTimeout – параметр, показывающий серверу, через какое время в секундах клиент будет отключен, если авторизатор не отвечает серверу на запросы. По умолчанию UserTimeout=60. Значение данного параметра должно лежать в диапазоне от 15 до 1200.</para></listitem>
+ <listitem><para>UserDelay – время в секундах, через которое сервер опрашивает клиента. Сервер шлет клиенту запрос подтверждения работы авторизатора, а клиент должен прислать ответ что авторизатор находится в рабочем состоянии. Так же это время, через которое у клиента обновляется статистика, по умолчанию UserDelay=5. Следует заметить что значение UserDelay должно быть в 3…10 раз меньше чем значение UserTimeout и данные значения не могут содержать одинаковые таймауты. Значение данного параметра должно лежать в диапазоне от 5 до 600.</para></listitem>
+ <listitem>
+ <para>FreeMb – параметр, указывающий серверу что будет передаваться авторизатору клиента от сервера. Данный параметр может принимать следующие значения:</para>
+ <itemizedlist mark="none">
+ <listitem><para>0 - количество бесплатных мегабайт в пересчете на цену нулевого направления;</para></listitem>
+ <listitem><para>1 - количество бесплатных мегабайт в пересчете на цену первого направления;</para></listitem>
+ <listitem><para>2 - количество бесплатных мегабайт в пересчете на цену второго направления;</para></listitem>
+ <listitem><para>...</para></listitem>
+ <listitem><para>9 - количество бесплатных мегабайт в пересчете на цену девятого направления;</para></listitem>
+ <listitem><para>cash - количество денег на которые клиент может бесплатно работать;</para></listitem>
+ <listitem><para>none - ничего не передавать.</para></listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem><para></para></listitem>
+ <listitem><para></para></listitem>
+ <listitem><para></para></listitem>
+ <listitem><para></para></listitem>
+ <listitem><para></para></listitem>
+ <listitem><para></para></listitem>
+ <listitem><para></para></listitem>
+ </itemizedlist>
+ </formalpara>
+ </simplesect>
</chapter>
"xmlns:xi CDATA #FIXED 'http://www.w3.org/2001/XInclude'">
]>
<book xmlns="http://docbook.org/ns/docbook"
- xmlns:xi="http://www.w3.org/2001/XInclude" version="5.0">
+ xmlns:xi="http://www.w3.org/2001/XInclude" version="5.0"
+ lang="ru">
<info>
<title>Stargazer - руководство пользователя</title>
<author>
SHELL="/usr/local/bin/bash"
fi
-echo -n "Checking gcc... "
-gcc --version > /dev/null 2> /dev/null
+echo -n "Checking CC... "
+$CC --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "gcc not found"
+ echo "$CC not found"
exit;
fi
echo "found"
-echo -n "Checking g++... "
-g++ --version > /dev/null 2> /dev/null
+echo -n "Checking CXX... "
+$CXX --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "g++ not found"
+ echo "$CXX not found"
exit;
fi
echo "found"
echo -n "Checking endianess... "
echo "int main() { int probe = 0x00000001; return *(char *)&probe; }" > build_check.c
-gcc $CXXFLAGS $LDFLAGS -L/usr/lib/mysql -L/usr/local/lib/mysql build_check.c -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS -L/usr/lib/mysql -L/usr/local/lib/mysql build_check.c -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
rm -f fake
echo -n "Checking for -lfbclient... "
-gcc $CXXFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_FBCLIENT=no
then
echo "no";
echo -n "Checking for -lmysqlclient... "
- gcc $CXXFLAGS $LDFLAGS build_check.c -lmysqlclient_r $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ $CC $CXXFLAGS $LDFLAGS build_check.c -lmysqlclient_r $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_MYSQLCLIENT=no
then
echo "no";
echo -n "Checking for -lpq... "
- gcc $CXXFLAGS $LDFLAGS build_check.c -lpq $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ $CC $CXXFLAGS $LDFLAGS build_check.c -lpq $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_PQ=no
CXXFLAGS="$CXXFLAGS -DHAVE_CLOSEFROM"
fi
-echo -n "Checking gcc... "
-gcc --version > /dev/null 2> /dev/null
+echo -n "Checking CC... "
+$CC --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "gcc not found"
+ echo "$CC not found"
exit;
fi
echo "found"
-echo -n "Checking g++... "
-g++ --version > /dev/null 2> /dev/null
+echo -n "Checking CXX... "
+$CXX --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "g++ not found"
+ echo "$CXX not found"
exit;
fi
echo "found"
echo -n "Checking endianess... "
echo "int main() { int probe = 0x00000001; return *(char *)&probe; }" > build_check.c
-gcc $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
SHELL="/usr/local/bin/bash"
fi
-echo -n "Checking gcc... "
-gcc --version > /dev/null 2> /dev/null
+echo -n "Checking CC... "
+$CC --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "gcc not found"
+ echo "$CC not found"
exit;
fi
echo "found"
-echo -n "Checking g++... "
-g++ --version > /dev/null 2> /dev/null
+echo -n "Checking CXX... "
+$CXX --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "g++ not found"
+ echo "$CXX not found"
exit;
fi
echo "found"
echo -n "Checking endianess... "
echo "int main() { int probe = 0x00000001; return *(char *)&probe; }" > build_check.c
-gcc $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
SHELL="/usr/local/bin/bash"
fi
-echo -n "Checking gcc... "
-gcc --version > /dev/null 2> /dev/null
+echo -n "Checking CC... "
+$CC --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "gcc not found"
+ echo "$CC not found"
exit;
fi
echo "found"
-echo -n "Checking g++... "
-g++ --version > /dev/null 2> /dev/null
+echo -n "Checking CXX... "
+$CXX --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "g++ not found"
+ echo "$CXX not found"
exit;
fi
echo "found"
echo -n "Checking endianess... "
echo "int main() { int probe = 0x00000001; return *(char *)&probe; }" > build_check.c
-gcc $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
SHELL="/usr/local/bin/bash"
fi
-echo -n "Checking gcc... "
-gcc --version > /dev/null 2> /dev/null
+echo -n "Checking CC... "
+$CC --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "gcc not found"
+ echo "$CC not found"
exit;
fi
echo "found"
-echo -n "Checking g++... "
-g++ --version > /dev/null 2> /dev/null
+echo -n "Checking CXX... "
+$CXX --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "g++ not found"
+ echo "$CXX not found"
exit;
fi
echo "found"
echo -n "Checking endianess... "
echo "int main() { int probe = 0x00000001; return *(char *)&probe; }" > build_check.c
-gcc $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
rm -f build_check.c
echo -n "Checking for -lfbclient... "
-gcc $CXXFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_FBCLIENT=no
then
echo "no";
echo -n "Checking for -lmysqlclient... "
- gcc $CXXFLAGS $LDFLAGS build_check.c -lmysqlclient_r $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ $CC $CXXFLAGS $LDFLAGS build_check.c -lmysqlclient_r $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_MYSQLCLIENT=no
then
echo "no";
echo -n "Checking for -lpq... "
- gcc $CXXFLAGS $LDFLAGS build_check.c -lpq $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ $CC $CXXFLAGS $LDFLAGS build_check.c -lpq $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_PQ=no
SHELL="/usr/local/bin/bash"
fi
-echo -n "Checking gcc... "
-gcc --version > /dev/null 2> /dev/null
+echo -n "Checking CC... "
+$CC --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "gcc not found"
+ echo "$CC not found"
exit;
fi
echo "found"
-echo -n "Checking g++... "
-g++ --version > /dev/null 2> /dev/null
+echo -n "Checking CXX... "
+$CXX --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "g++ not found"
+ echo "$CXX not found"
exit;
fi
echo "found"
echo -n "Checking endianess... "
echo "int main() { int probe = 0x00000001; return *(char *)&probe; }" > build_check.c
-gcc $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
echo -n "Checking for -lexpat... "
echo "int main() { return 0; }" > build_check.c
-gcc $CXXFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_EXPAT=no
SHELL="/usr/local/bin/bash"
fi
-echo -n "Checking gcc... "
-gcc --version > /dev/null 2> /dev/null
+echo -n "Checking CC... "
+$CC --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "gcc not found"
+ echo "$CC not found"
exit;
fi
echo "found"
-echo -n "Checking g++... "
-g++ --version > /dev/null 2> /dev/null
+echo -n "Checking CXX... "
+$CXX --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "g++ not found"
+ echo "$CXX not found"
exit;
fi
echo "found"
echo -n "Checking endianess... "
echo "int main() { int probe = 0x00000001; return *(char *)&probe; }" > build_check.c
-gcc $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
echo -n "Checking for -lexpat... "
echo "int main() { return 0; }" > build_check.c
-gcc $CXXFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_EXPAT=no
//-----------------------------------------------------------------------------
ADMIN_IMPL::ADMIN_IMPL()
- : conf(),
+ : ADMIN(),
+ conf(),
ip(0),
WriteServLog(GetStgLogger())
{
}
//-----------------------------------------------------------------------------
ADMIN_IMPL::ADMIN_IMPL(const ADMIN_CONF & ac)
- : conf(ac),
+ : ADMIN(),
+ conf(ac),
ip(0),
WriteServLog(GetStgLogger())
{
ADMIN_IMPL::ADMIN_IMPL(const PRIV & priv,
const std::string & login,
const std::string & password)
- : conf(priv, login, password),
+ : ADMIN(),
+ conf(priv, login, password),
ip(0),
WriteServLog(GetStgLogger())
{
//-----------------------------------------------------------------------------
ADMINS_IMPL::ADMINS_IMPL(STORE * st)
- : stg(0xFFFF, "@stargazer", ""),
+ : ADMINS(),
+ stg(0xFFFF, "@stargazer", ""),
noAdmin(0xFFFF, "NO-ADMIN", ""),
data(),
store(st),
SHELL="/usr/local/bin/bash"
fi
-echo -n "Checking gcc... "
-gcc --version > /dev/null 2> /dev/null
+echo -n "Checking CC... "
+$CC --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "gcc not found"
+ echo "$CC not found"
exit;
fi
echo "found"
-echo -n "Checking g++... "
-g++ --version > /dev/null 2> /dev/null
+echo -n "Checking CXX... "
+$CXX --version > /dev/null 2> /dev/null
if [ $? != 0 ]
then
echo "FAIL!"
- echo "g++ not found"
+ echo "$CXX not found"
exit;
fi
echo "found"
echo -n "Checking endianess... "
echo "int main() { int probe = 0x00000001; return *(char *)&probe; }" > build_check.c
-gcc $CXXFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -o fake
if [ $? != 0 ]
then
echo "FAIL!"
echo -n "Checking for -lexpat... "
echo "int main() { return 0; }" > build_check.c
-gcc $CXXFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_EXPAT=no
rm -f fake
echo -n "Checking for -lfbclient... "
-gcc $CXXFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
+$CC $CXXFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_FBCLIENT=no
then
echo "no";
echo -n "Checking for -lmysqlclient... "
- gcc $CXXFLAGS $LDFLAGS build_check.c -lmysqlclient_r $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ $CC $CXXFLAGS $LDFLAGS build_check.c -lmysqlclient_r $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_MYSQLCLIENT=no
then
echo "no";
echo -n "Checking for -lpq... "
- gcc $CXXFLAGS $LDFLAGS build_check.c -lpq $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ $CC $CXXFLAGS $LDFLAGS build_check.c -lpq $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_PQ=no
then
echo "no";
echo -n "Checking for -lxmlrpc... "
- gcc $CXXFLAGS $LDFLAGS build_check.c -lxmlrpc $LIB_THREAD -o fake > /dev/null 2> /dev/null
+ $CC $CXXFLAGS $LDFLAGS build_check.c -lxmlrpc $LIB_THREAD -o fake > /dev/null 2> /dev/null
if [ $? != 0 ]
then
CHECK_XMLRPC=no
# Parameter: required
# Value: IP address or DNS name
# Default: localhost
- server = localhost
+ Server = localhost
# Path to the database on the server or its alias
# Parameter: required
# Value: file path
# Default: /var/stg/stargazer.fdb
- database = /var/stg/stargazer.fdb
+ Database = /var/stg/stargazer.fdb
# Database username
# Parameter: required
# Value: any, supported by database
# Default: stg
- user = stg
+ User = stg
# Database password
# Parameter: required
# Value: any, supported by database
# Default: 123456
- password = 123456
+ Password = 123456
# The transaction isolation level
# Parameter: optional
# Values: concurrency, dirtyread, readcommitted, consistency
# Defalt: concurrency
- isolationLevel = concurrency
+ IsolationLevel = concurrency
# Responding to lock (optional, defaults to wait):
# Parameter: optional
# Values: wait, nowait
# Defalt: wait
- lockResolution = wait
-</StoreModule>
\ No newline at end of file
+ LockResolution = wait
+</StoreModule>
# Parameter: required
# Value: IP address or DNS name
# Default: localhost
- server = localhost
+ Server = localhost
# Database name
# Parameter: required
# Value: any, supported by database
# Default: stg
- database = stg
+ Database = stg
# Database username
# Parameter: required
# Value: any, supported by database
# Default: stg
- user = stg
+ User = stg
# Database password
# Parameter: required
# Value: any, supported by database
# Default: 123456
- password = 123456
+ Password = 123456
</StoreModule>
# Parameter: required
# Value: IP address or DNS name
# Default: localhost
- server = localhost
+ Server = localhost
# Database name
# Parameter: required
# Value: any, supported by database
# Default: stargazer
- database = stargazer
+ Database = stargazer
# Database username
# Parameter: mandatory
# Value: any, supported by database
# Default: stg
- user = stg
+ User = stg
# Database password
# Parameter: required
# Value: any, supported by database
# Default: 123456
- password = 123456
+ Password = 123456
# Number of tries to reconnect
# Parameter: optional
# Value: positive integer
# Default: 3
- # retries = 3
+ # Retries = 3
</StoreModule>
# Parameter: required
# Value: IP address or DNS name
# Default: localhost
- server = localhost
+ Server = localhost
# Path to the database on the server or its alias
# Parameter: required
# Value: file path
# Default: /var/stg/stargazer.fdb
- database = /var/stg/stargazer.fdb
+ Database = /var/stg/stargazer.fdb
# Database username
# Parameter: required
# Value: any, supported by database
# Default: stg
- user = stg
+ User = stg
# Database password
# Parameter: required
# Value: any, supported by database
# Default: 123456
- password = 123456
+ Password = 123456
# The transaction isolation level
# Parameter: optional
# Values: concurrency, dirtyread, readcommitted, consistency
# Defalt: concurrency
- isolationLevel = concurrency
+ IsolationLevel = concurrency
# Responding to lock (optional, defaults to wait):
# Parameter: optional
# Values: wait, nowait
# Defalt: wait
- lockResolution = wait
-</StoreModule>
\ No newline at end of file
+ LockResolution = wait
+</StoreModule>
# Parameter: required
# Value: IP address or DNS name
# Default: localhost
- server = localhost
+ Server = localhost
# Database name
# Parameter: required
# Value: any, supported by database
# Default: stg
- database = stg
+ Database = stg
# Database username
# Parameter: required
# Value: any, supported by database
# Default: stg
- user = stg
+ User = stg
# Database password
# Parameter: required
# Value: any, supported by database
# Default: 123456
- password = 123456
+ Password = 123456
</StoreModule>
# Parameter: required
# Value: IP address or DNS name
# Default: localhost
- server = localhost
+ Server = localhost
# Database name
# Parameter: required
# Value: any, supported by database
# Default: stargazer
- database = stargazer
+ Database = stargazer
# Database username
# Parameter: mandatory
# Value: any, supported by database
# Default: stg
- user = stg
+ User = stg
# Database password
# Parameter: required
# Value: any, supported by database
# Default: 123456
- password = 123456
+ Password = 123456
# Number of tries to reconnect
# Parameter: optional
# Value: positive integer
# Default: 3
- # retries = 3
+ # Retries = 3
</StoreModule>
#include <csignal>
#include <cerrno>
#include <cstdio>
+#include <cstdlib> // srandom, exit
#include <fstream>
#include <vector>
#include <set>
+#include <unistd.h> // TODO: usleep
+
#include <cstdlib>
#include <csignal>
#include <csignal>
#include <cassert>
+#include <cstdlib>
#include <algorithm>
#include "stg/common.h"
//-----------------------------------------------------------------------------
SETTINGS_IMPL::SETTINGS_IMPL()
- : strError(),
+ : SETTINGS(),
+ strError(),
modulesPath("/usr/lib/stg"),
dirName(DIR_NUM),
confDir("/etc/stargazer"),
}
//-----------------------------------------------------------------------------
SETTINGS_IMPL::SETTINGS_IMPL(const std::string & cd)
- : strError(),
+ : SETTINGS(),
+ strError(),
modulesPath("/usr/lib/stg"),
dirName(DIR_NUM),
confDir(cd),
}
//-----------------------------------------------------------------------------
SETTINGS_IMPL::SETTINGS_IMPL(const SETTINGS_IMPL & rval)
- : strError(),
+ : SETTINGS(),
+ strError(),
modulesPath(rval.modulesPath),
dirName(rval.dirName),
confDir(rval.confDir),
class TARIFF_IMPL : public TARIFF {
public:
TARIFF_IMPL()
- : tariffData()
+ : TARIFF(),
+ tariffData()
{};
TARIFF_IMPL(const std::string & name)
- : tariffData(name)
+ : TARIFF(),
+ tariffData(name)
{};
TARIFF_IMPL(const TARIFF_DATA & td)
- : tariffData(td)
+ : TARIFF(),
+ tariffData(td)
{};
TARIFF_IMPL(const TARIFF_IMPL & t)
- : tariffData(t.tariffData)
+ : TARIFF(),
+ tariffData(t.tariffData)
{};
virtual ~TARIFF_IMPL() {};
//-----------------------------------------------------------------------------
TARIFFS_IMPL::TARIFFS_IMPL(STORE * st)
- : tariffs(),
+ : TARIFFS(),
+ tariffs(),
store(st),
WriteServLog(GetStgLogger()),
strError(),
#include <csignal>
#include <cassert>
#include <cstdio> // fopen and similar
+#include <cstdlib> // strtol
#include "stg/common.h"
#include "stg/locker.h"
//-----------------------------------------------------------------------------
TRAFFCOUNTER_IMPL::TRAFFCOUNTER_IMPL(USERS_IMPL * u, const std::string & fn)
- : WriteServLog(GetStgLogger()),
+ : TRAFFCOUNTER(),
+ WriteServLog(GetStgLogger()),
rulesFileName(fn),
monitoring(false),
users(u),
const TARIFFS * t,
const ADMIN * a,
const USERS * u)
- : users(u),
+ : USER(),
+ users(u),
property(s->GetScriptsDir()),
WriteServLog(GetStgLogger()),
login(),
const TARIFFS * t,
const ADMIN * a,
const USERS * u)
- : users(u),
+ : USER(),
+ users(u),
property(s->GetScriptsDir()),
WriteServLog(GetStgLogger()),
login(),
#endif
//-----------------------------------------------------------------------------
USER_IMPL::USER_IMPL(const USER_IMPL & u)
- : users(u.users),
+ : USER(),
+ users(u.users),
property(u.settings->GetScriptsDir()),
WriteServLog(GetStgLogger()),
login(u.login),
//-----------------------------------------------------------------------------
USERS_IMPL::USERS_IMPL(SETTINGS_IMPL * s, STORE * st, TARIFFS * t, const ADMIN * sa)
- : users(),
+ : USERS(),
+ users(),
usersToDelete(),
userIPNotifiersBefore(),
userIPNotifiersAfter(),
if (store->GetUsersList(&usersList) < 0)
{
WriteServLog(store->GetStrError().c_str());
- exit(1);
+ return -1;
}
user_iter ui;