Пользователь
Регистрация: 04.11.2013
Ресивер: Openbox S4 HD
Сообщений: 52
Сказал(а) спасибо: 8
Поблагодарили 18 раз(а) в 12 сообщениях
Вес репутации: 12
|
#----------------------------------------------------------------------------------------
# Фильтры.
#----------------------------------------------------------------------------------------
[filter]
type = pre|post|both|emm
rule = [условие];[условие];[присвоение];[присвоение];[функция];[условие];[действие]
debug = 0
операторы присвоения:
:= присвоить
+= прибавить
-= вычесть
/= разделить
%= модуль
*= умножить
|= ИЛИ
&= И
^= исключающее ИЛИ
операторы отношения
= равны
!= не равны
>= больше или равно
<= меньше или равно
&&= истенно если результат (A & B) не равен нулю
[] индексация данных начиная с 0, адрес задается в десятичной системе ecm[0] = 80,81
переменные:
gvar[] глобальные, доступны для всех фильтров
lvar[] локальные, привязаны к цепочке фильтров секций account, dvb, tuner
rvar[] переменные запроса, доступны для всех фильтров через которыее проходит запрос
EMM
emm[] доступ к содержимому EMM, emm[0] - номер таблицы, emm[2] - младший байт размера EMM
caid
pid
rlen
ip ip = 127.0.0.1/32,10.0.0.1/8 проверить принадлежность к IP адресу
service_type тип:
SERVICE_TYPE_NEWCAMD = 4
SERVICE_TYPE_CS357 = 5
SERVICE_TYPE_CS378 = 6
SERVICE_TYPE_CCCAM = 7
service_id номер порта сервера на который пришел запрос
timeframe
rvar[]
lvar[]
gvar[]
client имя клиента отправившего запрос client=DVB*,test_account,tuner*
dump вывод содержимого ECM/EMM в лог
reset
accept
reject
next
skip
ECM pre/post/both
caid
provid
ident
sid
pid
chid
group
demux
status : ECM_REQ = 0,
ECM_PENDING = 1,
ECM_DECODED = 2,
ECM_DECODED_CACHE = 3,
ECM_DECODED_FAKE = 4,
ECM_NOT_DECODED = 5,
ECM_REJECTED = 6,
ECM_DECODE_ERROR = 7,
ECM_TIMEOUT = 8
ecm_delay
service_type
service_id
ecm[]
rlen
class
overcrypt
banned
limit
geo
timeframe
ip
privdata
rvar[]
lvar[]
gvar[]
client
betawrap
betaunwrap
hash вывести в лог хеш сигнатуру запроса
ban
dump
reset
accept
reject
next
skip
fakecw
обход фильтров:
pre-фильтр источника запроса -> [балансировщик или ридер] -> pre-фильтр ридера ->
-> [декодирование] -> post-фильтр ридера -> post-фильтр источника
источником запросов являются server/account, dvb, tuner
список pre/post/both/emm фильтров задаются ключем filter в секциях конфигурации account, dvb, tuner, reader
в процесе обхода, последовательно, выбираются нужные pre/post/both/emm фильтры из списка
пример:
[filter]
name = fRpre #pre-фильтр ридера
type = pre
rule = accept
[filter]
name = fRpost #post-фильтр ридера
type = post
rule = accept
[filter]
name = fRemm #EMM-фильтр ридера
type = emm
rule = accept
[reader]
filter = fRpre,fRpost, fRemm
[filter]
name = fSpre #pre-фильтр источника
type = pre
rule = accept
[filter]
name = fSpost #post-фильтр источника
type = post
rule = accept
[filter]
name = fSemm #EMM-фильтр источника
type = emm
rule = accept
[dvb]
filter = fSemm,fSpost,fSpre
при поступлении ECM от DVBAPI, запрос пройдет по цепочке фильтров: fSpre->fRpre->fRpost->fSpost
при поступлении ЕММ от DVBAPI, запрос пройдет по цепочке фильтров: fSemm->fRemm
rule = lvar[0]+=1;lvar[0]>=100;lvar[0]:=0;lvar[1]+=1;lvar[1]>=2;lvar[1]:=0
rule = sid=123;lvar[1]=0;accept
rule = sid=456;lvar[1]=1;accept
примем lvar[0] за счетчик запросов, а lvar[1] - счетчик состояний
получается, что по поступлению запроса мы увеличиваем счетчик на 1, проверяем на переполнение (>=100), обнуляем его, увеличиваем на один счетчик состояния, проверяем его на переполнение (>=2), сбрасываем
# [filter]
# rule = [условие];[условие];[присвоение];[присвоение];[действие]
# условия:
# rlen - длинна тела ECM/EMM 80 7[0 12] 12, задается в hex
# caid, ident, class, sid, chid, group
# caid=0500,0B00 - положительно, если caid запроса один из перечисленных
# overcrypt - проверка флага оверкрипта (GS9300)
# geo - прверка на гео, задается в hex(VIA)
# limit n,s,b,m - n колличество запросов за s секунд, (b) бонусных запросов за (m) минут.
# то есть: limit=1,10,15,10 означает, что за десять минут можно послать 600/10 + 15 = 75 запросов
# banned - проверить на бан
# uniq = (0,1,2) | (8,16) TCP: 0 - не проверять, 1 - проверять только IP, 2 - проверять IP и source port
UDP: 0 - не проверять, 8 - проверять только IP, 16 - проверять IP и source port
# entrust = 0|1 "доверенный" все запросы
# timeframe = hhmm,HHMM проверить текущее время на попадение во временные рамки с hhmm по HHMM
# timeframe = hhmm,HHMM,0,1,2 через запятую указаны дни недели, 0 - вс., 1 - пн., 6 - сб., 7 - вс.
# demux = 0,1,2 номер демультиплексора (demux_id в DVB)
#
# для всех условий поддерживается логическое NOT
# caid!=0500,0B00 - положительно, если caid запроса отличается от перечисленных
#
# присвоение:
# caid := N
# ident := N
# chid := N
# group := N
# banned := N
#
# так же почти для всех условий вожно задавать - больше или равно, меньше или равно
# caid >= N
# ident <= N
#
#
# действия:
# accept - отработать запрос используя балансировщик по умолчанию
# accept = balancer name - отработать запрос используя балансировщик запросов
# accept = reader name - отработать запрос используя указанный ридер
# reject - отвергнуть запрос и прервать проверку условий
# next - перейти к следующему фильтру (по умолчанию)
# skip=N - пропустить N правил
# ban=N - забанить на N минут
# fakecw=N - вернуть пустой CW при N = 0, случайный при N > 0
# betawrap - тунерирование запроса
# betaunwrap - детунерирование запроса
# reset = balancer name обнулить состояние балансировщика
# reset = reader namе сбросить ридер
[filter]
name = name
debug = 3
rule = caid=500;ident=030600;reject
rule = caid=500;ident=023700;accept
rule = caid=4ae0;ident=0;caid:=4ae1;ident:=11;accept
rule = fakecw
#-----------------------------------------------------------------------------------------
#
#-----------------------------------------------------------------------------------------
[balancer]
name = name #уникальное имя
name = default #в случае переопределения настроек для балансировщика, который используется поумолчанию
chain = 0,1;2;3 #цепочка ридеров задается имя ридера
#chain = card_1, сard_2; card_3
#что означает - запрос будет сбалансирован (по степени загрузки ридера) между двумя ридерами card_1 и card_2 и в случае,
#если не будет декодирован, то будет передан в следующую по цепочке группу в которой только один ридер card_3
mode = 0 #0 - выбирать ридер с наименьшим временем декодирования запроса (кол-во запросов в очереди * среднее время декодирования)
#1 - выбирать ридер с наименьшим кол-вом запросов в очереди
#2 - выбирать первый ридер в группе
#3 - round-robin
# chain = cardA/3, сardB/5, cardC/123
# через косую черту задается кол-во запросов, которые можно отдать в ридер, если порядковый номер поступившего запроса больше,
# то запрос отправляется в следующий по цепочке ридер, если это последний ридер и кол-во запросов превышено,
# обнуляются счетчики запросов всех ридеров и запрос передается в начало цепочки
#4 - параллельное декодирование несколькими ридерами
debug = 3
[exmlog]
log_path = /tmp/
queue_size = 10
log_ecm = 1 #логировать ECM запросы
log_emm = 1 #логировать EMM запросы
exm_flush_delay = 30 #задается в секундах
ecmlog_mode = 0 #
skip_fakecw = 0 #не сохранять в логе запросы с фейковыми ответами
skip_rejected = 0 #не сохранять в логе отвергнутые запросы
[discovery]
active = 1
debug = 0
reader_debug = 0 #уровень логирования для создаваемых ридеров
request_ad = 0 #запрашивать тестовые настройки с сервера wicard.tv
bind = 1 #22339
|