Владимир, добрый день.
Возможно ли реализовать механизм для обработки HTTP запросов с помощью CG/PL программ? Например так:
1. В настройках HTTP модуля добавляется настройка "CG/PL Applications":
CG/PL Common URL Prefix: /cgpl
CG/PL Account URL Prefix: /cgpl
URL Task
acd/queuestate acd.ajaxui.getqueuestate
acd/queuecmd acd.ajaxui.issuequeuecmd
~/conf/userlist personalconference.ajaxui.getuserlist
...
2. При запросе на URL http://server/cgpl/acd/queuestate или
http://server/~username/cgpl/conf/userlist запускается соответствующая
задача, которая получает на вход словарь с запросом
(Vars().httpRequest). Задача запускается в специальном режиме, функции,
которые связаны с обработкой сигналов, будут возвращать ошибки, но при
этом задача можно стартовать другие задачи и участвовать в обмене
сообщениями и синхронизации.
3. В принципе, этот механизм нужен только для управления, понятно, что
закачивать/скачивать файлы таким образом никто не будет, у CGP есть для
этого более удобные механизмы. Поэтому можно ограничить размер входящего
запроса, и отдавать тело запроса в виде строки из словаря
(Vars().httpRequest.body).
4. Для выдачи информации обратно, тем не менее, хочется все-таки иметь возможность писать в поток, чанками.
Зачем это нужно:
- для решения задач управления приложением, когда мы не можем отдать
XIMSS. Например, это внешний абонент, который принимает участие в
конференции "нашего" абонента. Он авторизован (знанием пин-кода, который
дал ему "наш" абонент), но давать ему доступ по XIMSS мы не можем. Опять
же, это полностью решается внешним прокси (который к CGP уже может быть
подключен по XIMSS), но хотелось бы обойтись без него.
Я не буду описывать подробно функции, которые, на мой взгляд,
понадобятся, просто приведу кусок кода "как нам было бы удобно". Если
есть надежда, что такая возможность появится -- с удовольствием потрачу
время на проектирование api с т.з. разработчика.
entry main is
req = Vars().httpRequest;
query = TextToObject(req.body);
if query != null and then IsDictionary(query) then
res = newDictionary();
res.rc = 200;
...
res.body = ObjectToString(queryResult);
res.header.("Content-Type") = "text/cgp-dictionary";
HTTPSendResponse(res);
else
res = newDictionary();
res.rc = 500;
res.body = "<HTML><BODY>Error parsing query</BODY></HTML>";
HTTPSendResponse(res);
end if;
end entry;
entry main is
req = Vars().httpRequest;
confId = req.queryParam.("confId");
if RemoteAuthentication() != null then
res = newDictionary();
res.rc = 200; res.header.("Content-Type") = "text/html"; res.header.("Transfer-Encoding") = "chunked";HTTPSendResponseHeaders(res);
... HTTPWrite(....);
SY,
--
Alexey Naidyonov
ITooLabs
Получено Tue Nov 07 09:04:38 2006
Этот архив был сгенерирован hypermail 2.1.8 : Fri 24 Apr 2015 - 16:15:15 MSK