Конвенція PAC, яка використовується основними веб-браузерами, а також браузерним рушієм, полягає у використанні зміненого синтаксису регулярних виразів. Донині інструмент PAC manager застосовував звичайні регулярні вирази для зіставлення. Ми змінюємо функцію shExpMatch з метою використання зіставлення, механізм якого схожий на браузерний.

Ця зміна означає, що RoomOS буде працювати з тими ж зіставленнями PAC-файлів, що й інші веб-клієнти в мережі. Файли PAC, спеціально написані для RoomOS, можливо, доведеться оновити, щоб вони продовжувати працювати за призначенням.

Оцінка файлу PAC проводиться у двох окремих місцях у програмному забезпеченні RoomOS:

  • Браузерний рушій для власного трафіку.

  • Pacmanager для решти HTTP-трафіку: HttpFeedback, виділення ресурсів для Webex, передавання сигналів викликів тощо.

PAC-файл може використовувати цю функцію: shExpMatch (рядок, шаблон)

Він повертає true, якщо рядок відповідає шаблону; інакше повертає false.

Основні відмінності між двома конвенціями наведені нижче, серед яких «REGEX» означає традиційні регулярні вирази, а «BROWSER» означає конвенцію веббраузера.

Знак крапки «.»

  • REGEX: . відповідає одному символу, який можна повторити за допомогою квантора

  • BROWSER: . відповідає лише буквальному символу крапки

Зірочка «*»:

  • REGEX: * є квантором, що відповідає нулю або більше символів, після елемента, але не відповідає жодному символу окремо

  • BROWSER: * відповідає нулю або більше символів

Знак питання «?»:

  • REGEX: ? є квантором нульового або одного символа після елемента; також він може модифікувати квантор * як нежадібний, але сам по собі не позначає жоден символ

  • BROWSER: квантор ? відповідає одному символу

Чи має відповідати весь вираз:

  • REGEX: без використання початкового символа ˆ та кінцевого $, PATTERN не повинен відповідати всьому STRING (достатньо, щоб STRING містив підрядок, що збігається).

  • BROWSER: завжди вимагається, щоб STRING точно відповідав PATTERN

Приклади

Ми хочемо зіставити всі імена хостів у розділі «provider.domain», але не в розділі «otherprovider.domain», «provider.domain.tld» або «providersdomain»:

REGEX:

shExpMatch(url, "ˆ.*\\.provider\\.domain$")

BROWSER:

shExpMatch(url, "*.provider.domain")

Ми прагнемо відповідності з «proxy1.domain», «proxy2.domain» тощо, але не з «proxytest.domain»:

REGEX:

shExpMatch(url, "ˆproxy.\\.domain$")

BROWSER:

shExpMatch(url, "proxy?.domain")

Інші ресурси

Щоб дізнатися більше про формат файлів PAC, див.: https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file.