Предоставляет поддержку протокола 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 c параметрами:
url — адрес запроса; page — страница с ответом; sender — адрес отправителя; vars — переменные запроса; user — пользователь системы; iprt — ссылка на объект входной части протокола.
void HttpPost( const string &url, string &page, const string &sender, vector<string> &vars, const string &user ); — метод POST c параметрами:
url — адрес запроса; page — страница с ответом и содержимым тела запроса POST; sender — адрес отправителя; vars — переменные запроса; user — пользователь системы; iprt — ссылка на объект входной части протокола.
Далее, в случае поступления HTTP запроса "GET" будет вызываться функция "HTTP_GET" или "HttpGet", а в случае запроса "POST" будет вызываться функция "HTTP_POST" или "HttpPost" в соответствующем модуле UI.
3. API функции исходящих запросов
Функция исходящих запросов (messIO()) оперирует обменом содержимым HTTP-запросов, завёрнутыми в XML-пакеты. Структура запроса имеет вид:
req — метод запроса, поддерживаются методы "GET" и "POST".
host — адрес узла http-сервера в формате [HostAddr]:[HostIp]. Если данное поле опущено то используется адрес узла, указанный в поле адреса транспорта.
uri — адрес ресурса, обычно файл или директория, на http-сервере.
pId, pVal — идентификатор и значение дополнительного http-параметра. Http-параметров может быть указано множество, отдельными prm тегами.
cName, cFileName, cVal — имя, имя-файла и значение элемента содержимого POST-запроса. Элементов содержимого может быть указано множество, отдельными cnt тегами.
cpId, cpVal — идентификатор и значение дополнительного параметра содержимого. Параметров содержимого может быть указано множество, отдельными prm тегами;
err — ошибка, возникшая во время запроса. В случае успешного запроса это поле пустое.
RezCod, RezStr — результат запроса в виде кода и текста.
pId, pVal — идентификатор и значение дополнительного http-параметра, ответа. Http-параметров может быть множество, определённые отдельными prm тегами.
respVal — содержимое ответа.
В качестве примера использования данной функции в пользовательских процедурах приведём формирование GET и POST запросов на языке JavaLikeCalc.JavaScript:
//GET запрос HTML страницы req = SYS.XMLNode("GET"); req.setAttr("URI","/"); SYS.Transport.Sockets.out_testHTTP.messIO(req,"HTTP"); test = req.text();
Именно этот объект модуля "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.
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 — файл прямо определённого шаблона для перекрытия внутреннего/сервисного шаблоном главной страницы или другим.