Модуль | Имя | Версия | Лицензия | Источник | Языки | Платформы | Тип | Автор | Описание |
---|---|---|---|---|---|---|---|---|---|
HTTP | HTTP-реализация | 3.6 | GPL2 | prot_HTTP.so | en,uk,ru,de | x86,x86_64,ARM | Протокол | Роман Савоченко | Предоставляет поддержку протокола HTTP для WWW-основанных пользовательских интерфейсов. |
Модуль транспортного протокола HTTP предназначен для реализации поддержки сетевого протокола HTTP(Hypertext Transfer Protocol) в OpenSCADA.
Протокол HTTP используется для передачи содержимого WWW. Так, через HTTP передаются следующие типы документов: html, xhtml, png, javascript и многие другие. Поддержка HTTP в OpenSCADA, в комплексе с транспортом Sockets, позволяет реализовывать различные пользовательские функции на основе WWW интерфейса. Модуль реализует два основных метода протокола HTTP: GET и POST. Модуль обеспечивает контроль целостности HTTP-запросов и, совместно с транспортом Sockets, позволяет "собирать" целостные запросы из их фрагментов, а также обеспечивать удержание соединения "живым" (Keep-Alive).
Для гибкого подключения пользовательских интерфейсов к данному модулю, используется модульный механизм в рамках самого этого модуля. В роли модулей используются модули подсистемы "Пользовательские интерфейсы" с дополнительным информационным полем "SubType", имеющим значение "WWW".
В запросах к Web ресурсам принято использовать URL(Universal Resource Locator). Следовательно, URL передаётся как основной параметр через HTTP. Первый элемент запрашиваемого URL используется для идентификации модуля UI. Например, URL "http://localhost:10002/WebCfg" означает обращение к модулю "WebCfg" на хосте "http://localhost:10002". В случае ошибочного указания идентификатора модуля, или при обращении вообще без идентификатора, модуль генерирует информационный диалог о входе и выбор одного из доступных пользовательских интерфейсов. Пример диалога показан на рисунке 1.
Модулем поддерживается многоязычность, которая включается динамическим переводом сообщений OpenSCADA.
Язык конечного пользователя интерфейса определяется путём и в последовательности:
Полученный таким образом язык используется для построения интерфейсов этого модуля и передаётся WWW под-модулям в HTTP свойстве "oscd_lang", через аргумент "vars" функций "GET" и "POST".
Для конфигурации и управления этим модулем, предоставляется конфигурационная страница интерфейса управления OpenSCADA (Рис.3) где Вы можете осуществлять:
Модулем поддерживается аутентификация в OpenSCADA при предоставлении доступа к модулям WEB-интерфейсов (рис.2).
Аутентификация этим модулем осуществляется "печеньем" (cookies) с динамическим названием и пространством ИД пользователя, где название "печенья" (cookie) "oscd_UID" и используется пространство ИД пользователя в работе с совместной таблицей сеансов аутентификации, и название "oscd_UID_{PrjNm}" в роботі без неё.
Для облегчения работы с Web-интерфейсами модуль предусматривает возможность автоматического входа от имени указанного пользователя. Конфигурация автоматического входа осуществляется на странице настройки модуля (рис.3). Автоматический вход осуществляется по совпадению адреса, указанного в колонке "Адреса", и от имени пользователя, указанного в колонке "Пользователь".
Для большей безопасности Вы можете определить только Web-пользователей, в перечне пользователей разрешённых к аутентификации.
Модули пользовательского интерфейса (UI), предназначенные для совместной работы с модулем HTTP, должны устанавливать информационное поле "SubType" значением "WWW" и поле "Auth" значением "1", если модуль требует аутентификации при входе. Для связи модуля HTTP и модулей UI используется расширенный механизм коммуникации. Этот механизм предусматривает экспорт интерфейсных функций. В данном случае, UI модули должны экспортировать функции:
Далее, в случае поступления HTTP запроса "GET" будет вызываться функция "HTTP_GET" или "HttpGet", а в случае запроса "POST" будет вызываться функция "HTTP_POST" или "HttpPost", в соответствующем модуле UI.
Функция исходящих запросов (messIO()) оперирует обменом содержимым HTTP-запросов, завёрнутыми в XML-пакеты. Структура запроса имеет вид:
<req Host="host" URI="uri"> <prm id="pId">pVal</prm> <cnt name="cName" filename="cFileName"> <prm id="cpId">cpVal</prm> cVal </cnt> reqVal </req>
Результатом запроса является ответ со структурой:
<req Host="host" URI="uri" err="err" Protocol="prt" RezCod="rCod" RezStr="rStr"> <prm id="pId">pVal</prm> respVal </req>
Приведём формирование GET и POST запросов на языке JavaLikeCalc.JavaScript, в качестве примера использования данной функции в пользовательских процедурах:
//GET запрос HTML страницы req = SYS.XMLNode("GET"); req.setAttr("URI","/"); SYS.Transport.Sockets.out_testHTTP.messIO(req,"HTTP"); test = req.text(); //GET запрос и сохранение файла req = SYS.XMLNode("GET"); req.setAttr("URI","/oscadaArch/Work/openscada-0.9-r2188.tar.lzma"); SYS.Transport.Sockets.out_testHTTP.messIO(req,"HTTP"); if(!req.attr("err").length) SYS.fileWrite("/var/tmp/recvFile.tmp", req.text()); //POST запрос req = SYS.XMLNode("POST"); req.setAttr("URI","/WebUser/FlowTec.txt"); cntNode = req.childAdd("cnt").setAttr("name","pole0").setAttr("filename","Object2-k001-100309-17.txt"); cntNode.childAdd("prm").setAttr("id","Content-Type").setText("text/plain"); cntText = "Object2-k001\r\n"; cntText += "\r\n"; cntText += "v002\r\n"; cntText += " n1\r\n"; cntText += " 09.03.10 16 Polnyj 7155.25 216.0 32.000 17.5\r\n"; cntText += "v005\r\n"; cntText += " n1\r\n"; cntText += " 09.03.10 16 Polnyj 188.81 350.0 4.000 40.0\r\n"; cntText += "\r\n"; cntNode.setText(cntText); SYS.Transport.Sockets.out_testHTTP.messIO(req,"HTTP"); //POST запрос с одиночным содержимым req = SYS.XMLNode("POST"); req.setAttr("URI","/WebUser/FlowTec.txt"); req.childAdd("prm").setAttr("id","Content-Type").setText("text/plain"); cntText = "Object2-k001\r\n"; cntText += "\r\n"; cntText += "v002\r\n"; cntText += " n1\r\n"; cntText += " 09.03.10 16 Polnyj 7155.25 216.0 32.000 17.5\r\n"; cntText += "v005\r\n"; cntText += " n1\r\n"; cntText += " 09.03.10 16 Polnyj 188.81 350.0 4.000 40.0\r\n"; cntText += "\r\n"; req.setText(cntText); SYS.Transport.Sockets.out_testHTTP.messIO(req,"HTTP");
Входная часть объекта модуля (SYS.Protocol.HTTP.{In})
Modules/HTTP/ru - GFDL | July 2021 | OpenSCADA 0.9.4 |