Конвенція PAC, що використовується основними веб-браузерами, включаючи Web engine, полягає в використанні модифікованого синтаксису регулярних виразів. До цього часу pacmanager використовував звичайні регулярні вирази для зіставлення. Ми змінюємо функцію shExpMatch , щоб використовувати збіг, подібний до браузерів.
Ця зміна означає, що RoomOS працюватиме з тими самими файлами PAC, що й інші вебклієнти в мережі. Можливо, щоб файли PAC, спеціально написані для RoomOS, необхідно оновити, щоб вони продовжували працювати належним чином.
Оцінка файлу PAC виконується в двох окремих місцях у програмному забезпеченні RoomOS:
-
Веб-рушій для власного трафіку.
-
Менеджер пакунків для всього іншого HTTP-трафіку: HttpFeedback, підготовка Webex, передавання сигналів виклику тощо.
Файл PAC може використовувати цю функцію: shExpMatch(рядок, шаблон)
Якщо рядок відповідає шаблону, він повертає « True », в іншому випадку — « False ».
Нижче наведені основні відмінності між двома конвенціями: «REGEX» означає традиційні регулярні вирази, а «BROWSER» означає конвенцію про веб-браузер.
Крапка "."
-
REGEX: . відповідає одному символу, який можна повторити за допомогою квантора
-
БРАУЗЕР: . відповідає лише символу прямої крапки
Зірка «*»:
-
REGEX: * є нульовим або більшим квантором після елемента, але сам по собі нічого не відповідає
-
БРАУЗЕР: * відповідає нулю або більше символів
Знак запитання «?»:
-
REGEX: ? є нульовим або одиничним квантором після елемента, або може змінити квантор *, щоб бути нежадібним, але сам по собі не відповідає нічого
-
БРАУЗЕР: ? відповідає одному символу
Чи має збігатися весь вираз:
-
регекс: Без використання leading ^ і символу $, ШАБЛОН не має відповідати всьому РЯДКУ: Достатньо, щоб РЯДОК містив підрядок, який збігається.
-
браузер: Завжди вимагати точного зіставлення РЯДКА за ШАБЛОНОМ
Приклади
Ми хочемо зіставити всі імена хостів у розділі "provider.domain", але не "otherprovider.domain", "provider.domain.tld" чи "providersdomain":
регекс:
shExpMatch (url, "^.*\\.provider\\.domain$")
браузер:
shExpMatch (url, "*.provider.домен")
Ми хочемо зіставити "proxy1.домен", "proxy2.домен" тощо, але не "proxytest.домен":
регекс:
shExpMatch (url, "^proxy.\\.domain$")
браузер:
shExpMatch(url, "проксі?.домен")
Інші ресурси
Докладніше про формат файлу PAC див. в статті https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file .