Надає підтримку HTTP для WWW базованих користувацьких інтерфейсів.
Ліцензія:
GPL
Вступ
Модуль транспортного протоколу HTTP призначено для реалізації підтримки мережевого протоколу HTTP(Hypertext Transfer Protocol) у системі OpenSCADA.
Протокол HTTP використовується для передачі вмісту WWW. Так, через HTTP передаються наступні типи документів: html, xhtml, png, java та багато інших. Додання підтримки HTTP до системи OpenSCADA у комплексі із транспортом Sockets дозволяє реалізовувати різні користувацькі функції на основі WWW інтерфейсу. Модуль HTTP реалізує два основних методи протоколу HTTP: GET та POST. Модуль HTTP забезпечує контроль цілісності HTTP-запитів та, спільно з транспортом Sockets, дозволяє "збирати" цілісні запити з їх фрагментів, а також забезпечувати збереження з'єднання живим (Keep-Alive).
Для гнучкого підключення користувацьких інтерфейсів до даного модуля використовується модульний механізм у межах самого модуля "HTTP". У ролі модулів використовуються модулі підсистеми "Користувацькі інтерфейси" з додатковим інформаційним полем "SubType", яке має значення "WWW".
У запитах до Web ресурсів прийнято використовувати URL(Universal Resource Locator), відповідно URL передається як основний параметр через HTTP. Перший елемент запитаного URL використовується для ідентифікації модуля UI. Наприклад URL "http://localhost:10002/WebCfg" означає звернення до модуля "WebCfg" на хості "http://localhost:10002". У випадку помилкового визначення ідентифікатору модуля або при звернені взагалі без ідентифікатору "HTTP" модуль генерує діалог інформації про вхід та з наданням вибору одного з доступних користувацьких інтерфейсів. Приклад діалогу показано на рисунку 1.
Мова кінцевого користувацького інтерфейсу визначається шляхом та у послідовності:
URL параметр "lang".
Мова користувача, що увійшов.
Мова Web-браузеру з HTTP властивості "Accept-Language".
Загальна мова процесу OpenSCADA.
Отримана таким чином мова використовується для побудови інтерфейсів цього модуля та передається WWW під-модулям у HTTP властивості "oscd_lang", через аргумент "vars" функцій "GET" та "POST".
Для конфігурації та керування цим модулем надається конфігураційна сторінка інтерфейсу керування OpenSCADA (Рис.3) де Ви можете здійснювати:
Контроль за активними сеансами автентифікації.
Конфігурацію:
Правила доступу для заборони та дозволу. Кожний рядок є окремим правилом та Ви можете використовувати шаблони (на кшталт "*/WebVision/*") або регулярні вирази (на кшталт "/[^/]+/WebVision/.+/").
HTML-шаблон користувацького інтерфейсу та користувацької головної сторінки. У полях HTML-шаблону має вказуватися адреса до файлу HTML/XHTML, який буде використано для формування внутрішніх/сервісних інтерфейсів та головної сторінки. Внутрішні/сервісні інтерфейси, це наприклад: обрання модулів, сторінки авторизації та подібне у WEB-модулів. Від шаблону вимагається коректність XHTML, яка дозволяє розібрати файл XML-парсером, а також наявність мітки "#####CONTEXT#####" у місці розташування динамічного вмісту, що обов'язково для внутрішніх/сервісних інтерфейсів. Ресурсні файли шаблонів представлено зображеннями, CSS та JavaScript файлами, та які шукаються від теки у якій вказано розташування файлу шаблону та від поточної теки. Для іншого файлу шаблону до мови Ви можете додати суфікс мови у кінець цього файлу "{Мій Шаблон}_{мова}.html" але обирати у конфигураційних полях основний-базовий файл шаблону "{Мій Шаблон}.html". У випадку виявлення у шаблоні помилок буде використано стандартний вбудований інтерфейс. У якості прикладу шаблонів Ви можете подивитися такі найбільш вживані:
Час життя, перелік користувачів дозволених до аутентифікації та встановлення автоматичного входу.
Рис.3. Сторінка налаштування модуля.
1. Аутентифікація
Модулем підтримується аутентифікація у системі OpenSCADA при надані доступу до модулів WEB-інтерфейсів (рис.2).
Рис.2. Діалог авторизації у системі OpenSCADA.
Для полегшення роботи з Web-інтерфейсами модуль передбачає можливість автоматичного входу від ім'я вказаного користувача. Конфігурація автоматичного входу здійснюється на сторінці налаштування модуля (рис.3). Автоматичний вхід здійснюється за збігом адреси, вказаній у стовпчику "Адреса", від ім'я користувача, вказаного у стовпчику "Користувач".
Для більшої безпеки Ви можете визначити тільки Web-користувачів, у переліку користувачів дозволених до аутентифікації.
2. Модулі користувацького WEB-інтерфейсу
Модулі користувацького інтерфейсу (UI), які призначені для спільної роботи з модулем HTTP, мають встановлювати інформаційне поле "SubType" значенням "WWW" та поле "Auth" значенням "1", якщо модуль потребує автентифікації при вході. Для зв'язування модуля HTTP та модулів UI використовується розширений механізм комунікації. Цей механізм має на увазі експорт інтерфейсних функцій. У даному випадку UI модулі мають експортувати функції:
void HttpGet( const string &url, string &page, const string &sender, vector<string> &vars, const string &user ); — Метод GET з параметрами:
url — адреса запиту; page — сторінка з відповіддю; sender — адреса відправника; vars — змінні запиту; user — користувач системи; iprt — посилання на об'єкт вхідної частини протоколу.
void HttpPost( const string &url, string &page, const string &sender, vector<string> &vars, const string &user ); — метод POST з параметрами:
url — адреса запиту; page — сторінка з відповіддю та вмістом тіла запиту POST; sender — адреса відправника; vars — змінні запиту; user — користувач системи; iprt — посилання на об'єкт вхідної частини протоколу.
Надалі, у випадку надходження HTTP запиту "GET" буде викликатися функція "HTTP_GET" або "HttpGet", а у випадку запиту "POST" буде викликатися функція "HTTP_POST" або "HttpPost" у відповідному модулі UI.
3. API функції вихідних запитів
Функція вихідних запитів (messIO()ENRU) оперує обміном вмістом HTTP-запитів, загорнутими у XML-пакети. Структура запиту має вигляд:
req — метод запиту, підтримується методи "GET" та "POST".
host — адреса вузла http-серверу у форматі [HostAddr]:[HostIp]. Якщо дане поле опущено то використовується адреса вузла, вказана у полі адреси транспорту.
uri — адреса ресурсу, зазвичай файл або тека, на http-сервері.
pId, pVal — ідентифікатор та значення додаткового http-параметру. Http-параметрів може бути вказано багато, окремими prm тегами.
cName, cFileName, cVal — ім'я, ім'я-файлу та значення елементу вмісту POST-запиту. Елементів вмісту може бути вказано багато, окремими cnt тегами.
cpId, cpVal — ідентифікатор та значення додаткового параметру вмісту. Параметрів вмісту може бути вказано багато, окремими prm тегами;
Саме цей об'єкт модуля "Protocol.HTTP" [SYS.Protocol.HTTP.pgCreator()]
bool pgAccess(string URL) — перевірка доступності сторінки визначеної у URL.
URL — URL сторінки що перевіряється.
string pgCreator(string cnt, string rcode = "200 OK", string httpattrs = "Content-Type: text/html;charset={SYS}", string htmlHeadEls = "", string forceTmplFile = "", string lang = "" ) — формування сторінки або ресурсу із вмісту cnt, загорнутого у HTTP з результатом rcode, із додатковими атрибутами HTTP httpattrs, додатковим елементом заголовку HTML htmlHeadEls та використанням файлу шаблону forceTmplFile та мова lang.
cnt — вміст сторінки або ресурсу (зображення, XML, CSS, JavaScript, ...);
rcode — результуючий код HTTP, на кшталт "200 OK"; порожнє значення вимикає додання HTTP заголовку;
httpattrs — додаткові атрибути HTTP, переважно це "Content-Type" із значенням по замовченню "text/html;charset={SYS}"; тільки для "Content-Type: text/html" буде здійснюватися загортання у внутрішній/сервісний або визначений forceTmplFile HTML-шаблон;
htmlHeadEls — додатковий тег заголовку HTML, переважно це META з "Refresh" для вказаного URL;
forceTmplFile — файл прямо визначеного шаблону для перекриття внутрішнього/сервісного шаблоном головної сторінки або іншим.