10.4 Конфиг динамических инжектов - это текстовый XML-файл в стандартной кодировке ANSI, в котором прописаны правила обработки HTTP-ответов серверов. Конфиг описывает список масок http(s)-ссылок которые надо обработать, адрес обработчика и дополнительные флаги. 
Конфиг организован в виде массива элементов в тегах <igroup>.  Каждый <igroup> содержит неограниченное количество элементов в тегах <dinj>.  Каждый элемент <dinj> описывает правило обработки HTTP-ответа в нём содержится маска ссылки, адрес обработчика и допольнельные флаги: отправлять ли искомый http-запрос и приоритет. Маска ссылки находится в теге <lm> в атрибуте "value", адрес обработчика в теге <hl>, отправлять ли искомый http-запрос в тегах <sq> и приоритет <pri>. 
Параметр в теге <sq> содержит неотрицательное числовое значение. Если он равен нулю, то не надо отправлять искомый http-запрос обработчику, если он равен единице, то обработчику надо отправить только заголовок запроса, если он равен числу 2, то обработчику надо отправить весь запрос. Параметра в теге <sq> может и не быть вообще, в этом случае считается что он равен нулю.
Приоритет  в теге <pri>  содержит неотрицательное числовое значение. Если приоритет не указан, то его значение равно максимальному положительному 32-битному значению (signed int) - 2 147 483 647. Допускается значение приоритета равное нулю.
Адрес обработчика - это http-ссылка обработчика на удалённом сервере. Ссылка всегда оформлена с импользованием префиксов http:// или https://.  Если префикс https:// то следует использовать протокол HTTPS для взаимодействия с обработчиком.
Маска ссылки - это некоторое выражение содержащее символы звёздочка, вопросительный знак и квадратные скобки "[]". Звёздочка обозначает любую последовательность символов включая пустую. Вопросительный знак обозначает любой одиночный символ. Квадратные скобки перечисляют список одиночных символов, например, [jeu] - на его месте можеьт стоять только один из трёх символов "j" , "e" или "u", [?] - только символ вопросительного знака, [[] - только открывающая квадратная скобка, [*] - только символ звёздочка, [[*] - звёздочка или открывающая квадратная скобка.
Пример:   q[abc]erty[?]u[[]uu??88]88*
qaerty?u[uuzz88]88444 - подходит
qbertysu[uuzz88]88444 - не подходит
qcerty?u[uuz88]88 - не подходит
qaerty?u[uuz?88]88 - подходит
qrerty?u[uuz?88]88 -  не подходит
qaerty?u!uuz?88]8811 -  не подходит
В маску ссылки никогда не входит префикс http(s):// и при проверке искомая ссылка проверяется без данного префикса.
Пример конфига динамических инжектов:
<igroup>
<dinj> 
<lm value="*/logon/*"/>
<hl>http://14.25.36.47/test2.php</hl></dinj> 
</igroup>
<igroup>
<dinj> <lm>*test*.com/qwerty[?]*</lm>
<hl>https://1.2.3.4/test2.php</hl></dinj>
<dinj> 
<lm value="??site.net/cderfv.asp*">

<lm>
<hl>https://1.2.3.4/test2.php</hl>
<pri>1</pri>
<sq>1</sq>
</dinj>
<dinj> 
<lm>[abcdef]wert[1234567890].com/papka/userprofile.php</lm>
<hl>https://1.2.3.4/test.php</hl>
<pri>10</pri>
</dinj>
</igroup>
<igroup><dinj> 
<lm>*/sitelogin/*</lm>
<hl>http://41.24.53.64:8089/test.aspx</hl>
<pri>45</pri><sq>2</sq>
<dinj> </igroup>
В данном примере в одном igroup три dinj, в двух других по одному dinj.
Внутри тега lm могут быть указаны дополнительные теги, указывающие дополнительные условия для использования ссылки или игнорирования её.
ignore_mask - игнорировние если ссылка удовлетворяет маске указанной в атрибуте value. Если указано, несколько тегов ignore_mask, то ссылка игнорируется, если оно подошла хотя бы под одну из указанных.
ignore_header - игнорировние если ответ содержит хидер удовлетворяющийпараетрам из атрибутов header и value. Если указано, несколько тегов ignore_header , то ссылка игнорируется, если оно подошла хотя бы под один из указанных. Значения в атрибутах header и value могут быть указаны как маски.
require_header - дополнительная проверка на хидер, если ответ содержит хидер удовлетворяющийпараетрам из атрибутов header и value, то он будет отправлен на обработку. Если указано, несколько тегов require_header , то ссылка прнимается в обработку, только если подошла под каждый из указанных. Значения в атрибутах header и value могут быть указаны как маски.
<dinj> 
  <lm value="example.com/*">
    <ignore_mask value ="*.css"/>
    <ignore_mask value ="*.rar"/>
    <ignore_header header="content-type" value="text/plain"/>
   <require_header header="content-lang" value="*"/>
  </lm>
  <hl value="test.net/handler.php">
</dinj> 
В указанном отрывке конфига, ссылка example.com/assetst/test.css будет проигнорирована, а ссылка example.com/assetst/test.html будет обработана только если ответ сервера содержит хидер content-lang.
10.4.1 Обработка HTTP-ответа начинается только после полного получения его содержимого от сервера (в колбэке AfterReceiveResponse в коде браузерного перехватчика). Если ссылка запроса на который получен ответ, подходит под несколько элементов <dinj> нахоящихся в разных <igroup> (хотя бы один находящийся в отдельном <igroup>), то такая ссылка должна быть пропущена без обработки. 
После того как он полностью получен, необходимо отпраить POST-запрос на адрес обработчика. Если элементов <dinj> с маской удовлетворяющих данной ссылке несколько и они все находятся в одном <igroup>, то они все должны быть опрошены по очереди согласно их приоритетам в порядке возрастания (первым идёт обработчик с самым низким значением приоритета). Если в списке несколько обработчиков с одинаковым приоритетом, то данная ситуация должна быть разрешена на усмотрение разработчика. Подразумевается, что составитель конфига должен позаботиться о том, чтобы таких ситуаций не возникало.
Тело POST-запроса оформляется в формате nultipart/form-data. В нём должны быть следующие элементы:
sourcelink - полная искомая ссылка с префиксом https:// или http:// (если нет возможности узнать какой именно протокол, то ставить всегда  https://) в кодировке ANSI.
sourcequery - искомый http-запрос, зависит от значения в параметре sq в <dinj>. Параметр может отсутствовать, если значение в параметре sq равно нулю.
sourcehtml - искомый http-ответ. Полный ответ сервера от начала до конца со всеми хидерами, без изменений, в искомой кодировке.
Помимо параметров в теле, в URI запроса должны быть указаны следующие параметры в формате urlencode:
cid - идентификатор клиента, clientid в виде строки (см. пункт 2.1.2).
group - тег группы клиента в виде строки.
Ответ обработчика:
200 - обработчик изменил страницу и в теле ответа содержится новый изменённый ответ сервера со всеми хидерами, который должен быть подставлен браузеру. Никакие другие обработчики не должны вызываться.
303 - обработчик не изменил страницу и при этом разрешает обращение к другим обработчикам если таковые имеются.
304 - обработчик не изменил страницу и при этом запрещает обращение к другим обработчикам 
Все остальные коды необходимо расценивать как ответ 303, после чего данный элемент <dinj> (или какой-то объект или структура в памяти, который описывает данных элемент <dinj>) должен быть деактивирован на 30 минут и никак не учавствовать в обработке. Деактивация должна быть локальная только в текущем процессе.
10.5 Конфиг статических инжектов - это текстовый XML-файл в стандартной кодировке ANSI, в котором прописаны правила обработки HTTP-ответов серверов. Конфиг описывает список перенаправлений. 
В отличие от динамических инжектов, статические инжекты стоят на более низком уровне и блокируют отправку http-запросов на оригинальный сервер и полностью подменяют http-ответы (если они есть) оригинального сервера.
Конфиг описывает список статических инжектов. Список статических инжектов указывается в теге <slist>. В теге <slist> одержится список элементов в тегах <sinj>. Каждый элемент sinj содержит: маску срабатывания в теге <mm>, линк на котором включится инжект <sm>, наименование сервера-обработчика <srv>, новое значение поля host в заголовках запроса <nh>.  Тег sm является опциональным, в этом случае подразумевается, что он равен содержимому тега mm.
Каждый статический инжект может находиться в трёх состояниях: "готов", "включён" и "выключён". Изначально он находится в состоянии "готов" и находится в нём до тех пор пока не произойдёт переход на ссылку указанную в теге sm. Как только происходит переход на данную ссылку, статический инжект переходит в состояние "включён".  В состояние "включён" инжект может перейти только из состояния "готов". В состояние "готов" инжект может перейти только из состояния "выключен"
Подразумевается что решение о переходе инжекта из состояния "готов" в состояние "включён" происходит в колбеке CheckURL. Решение о переходе инжекта из состояния "включён" в состояние "выключен" происходит в колбеке AfterReceiveResponse. 
Маска срабатывания (тег mm) - маска идентичная маске в конфиге динамических инжектов. Все запросы подходящие под данную маску должны быть направлены на сервер-обработчик
Маска ссылки на котором включится инжект или просто маска включения (тег sm или тег mm) - маска ссылки при переходе на которую инжект переходит из состоянию "готов" в состояние "включён"
Сервер-обработчик (тег srv) - пара значений ip:port которая указывает на сервер обработчик. Если значение порта чётное, то работа идёт без шифрования (HTTP), если порт нечётный, то работа идёт поверх SSL/TLS (HTTPS).
Новое значение host (тег nh) - значение поля host которое должно будет заменить оригинальное значение поля host в заголовке исходящего запроса.
Пример конфига:
<slist> 
<sinj>
<mm>site.com/*</mm>
<sm>site.com/loginpage</sm>
<nh>othersite.com</nh>
<srv>11.22.33.44:80</srv>
</sinj> 
<sinj> 
<mm>qwerty1.net/papka2/*</mm>
<nh>zxc.org</nh>
<srv>1.2.3.4:443</srv>
</sinj>  
<slist> 

10.5.1 Как наиболее простую аналогию статическим инжектам следует рассматривать как перенаправление некоторых страниц. Итак, допустим мы находимся в колбэке BeforeSendRequest, и после проверки ссылки по всем инжектам которые находятся в состоянии "включён" стало понятно, что данная ссылка подходит под какой-то инжект, то необходимо произвести перенаправление запроса на сервер-обработчик. 
Для перенаправления  надо исходящий запрос надо скопировать, изменить в копии поле host на тот который указан в конфиге в теге "nh", добавить заголовок "X-Forwarded-for" с собственным внешним ip-адресом, и заголовок "clientinfo"  в котором будет указаны сначала тег группы клиента, а потом через пробел его полный clientid, о. После этих модификаций надо отправить запрос на сервер-обработчик. Если порт сервера чётный, то по без шифрования, если порт нечётный, то через SSL/TLS. Запрос рекомендуется отправить асинхронно или просто в отдельном потоке. 
Исходный запрос на оригинальный сервер надо изменить таким образом чтобы он превратился в запроса GET с URI равным "/", удалить заголовок с cookie и прочие специфичные теги, после этого отправить на оригинальный сервер.
После получения ответа от оригинального сервера, в колбэке AfterReceiveResponse необходимо дождаться когда придёт ответ от сервера-обработчика. После этого заменить ответ оригинального сервера (полностью заголовок и тело) ответом от сервера-обработчика.
Помимо прочего, в ответе сервера обработчика может находиться один специальный тег с именем "sinjdsto" в котором будек указано числовое значение. Начилие этого хидера в ответе сервера-обработчика означает что статический инжект должен быть переключен из состояния "включён" в состояние "выключен". Числовое значение указывает количество секунд через которое статический инжект будет автоматически переведён из состояния "выключен" в состояние "готов". При этом при замене ответа оригинального сервера ответом сервера-обработчика необходимо удалить заголовок "sinjdsto". 
Подразумевается что в конфиге статических инжектов все маски срабатывания (и, соответственно, маски вкючения) не пересекаются друг с другом. Подразумевается что ссылка колбэке CheckURL сработает только на одной  маске включения, а в колбэке BeforeSendRequest ссылка сработает только на одной  маске срабатывания. В противном случае разрешение ситуации зависит от разработчика. Подразумевается, что автор конфига позаботится об уникальности масок в тегах "sinj".
Если колбэке AfterReceiveResponse известно что запрос был обработан статическим инжектом, то он не должен быть обработан динамическим инжектом. Таким образом, статические инжекты имеют приоритет перед динамическими.