urfaclient на C

Технические вопросы по UTM 5.0
Ответить
lexab
Сообщения: 21
Зарегистрирован: Пт сен 17, 2010 11:52

Re: rpcf_edit_user_new

Сообщение lexab »

Спасибо, похоже что то перепутано.
т.к.

Код: Выделить всё

'unknown_code' => 10001,

это похоже на user_id, а

Код: Выделить всё

'user_id' => 0,
по видимому error_code.
что значит сам error_code, можно только догадываться...

Ради любопытства разобрал utm_admin.jar от 008u4
в нем тоже есть api.xml идентичный серверному, там все по старому.

Код: Выделить всё

    <output>
      <integer name="user_id"/>
      <if variable="user_id" value="0" condition="eq">
          <integer name="error_code"/>
	  <string name="error_description"/>
      </if>
    </output>
Может быть будет корректнее, что бы парсер просто игнорировал поля не описанные в схеме без критической ошибки ?

Аватара пользователя
ds
Сообщения: 380
Зарегистрирован: Пн сен 18, 2006 14:06

Re: rpcf_edit_user_new

Сообщение ds »

Код: Выделить всё

    <output>
      <integer name="user_id"/>
      <if variable="user_id" value="0" condition="eq">
          <integer name="error_code"/>
	  <string name="error_description"/>
      </if>
    </output>
Тут получается: если ошибки не было, в результате только одно поле.
Если же произошла ошибка, т.е. user_id=0, добавляются еще два поля, т.е. полей в результате будет 3, а не одно. И это надо учитывать в парсере.

littlesavage
Сообщения: 120
Зарегистрирован: Вс ноя 22, 2009 02:41
Откуда: Чебоксары

Сообщение littlesavage »

ds, на самом деле 4, UTM их 4 возвращает :)

Я тоже сначала думал, что лишние параметры лучше отбрасывать. А потом что-то решил, что с более жесткими проверками будет проще искать ошибки, да и надежнее.

Где взять описание кода ошибки 74, действительно непонятно.

VeroLom
Сообщения: 6
Зарегистрирован: Ср июн 15, 2011 15:30
Откуда: Санкт-Петербург
Контактная информация:

Сообщение VeroLom »


lexab
Сообщения: 21
Зарегистрирован: Пт сен 17, 2010 11:52

recv_pkt_hdr BIO_read: Ресурс временно недоступен

Сообщение lexab »

Добрый день.
Не подскажите, есть ли какие ограничения по количеству запросов через ourfa`у
На двух функциях rpcf_add_house и rpcf_edit_ip_slink_ex

получаю сообщения

Код: Выделить всё

recv_pkt_hdr BIO_read&#58; Ресурс временно недоступен at /usr/local/lib/perl/5.10.1/Ourfa.pm line 383.
No data received at /usr/local/lib/perl/5.10.1/Ourfa.pm line 383.
Function `rpcf_add_house` node `ROOT`. Can not receive termination attribute
Ourfa&#58;&#58;ScriptCall&#58;&#58;call&#58; Function `rpcf_add_house` node `ROOT`. Can not receive termination attribute
или

Код: Выделить всё

recv_pkt_hdr BIO_read&#58; Ресурс временно недоступен at /usr/local/lib/perl/5.10.1/Ourfa.pm line 383.
No data received at /usr/local/lib/perl/5.10.1/Ourfa.pm line 383.
Function `rpcf_edit_ip_slink_ex` node `integer`. Can not get integer value for node 'slink_id&#40;0&#41;'
Ourfa&#58;&#58;ScriptCall&#58;&#58;call&#58; Function `rpcf_edit_ip_slink_ex` node `integer`. Can not get integer value for node 'slink_id&#40;0&#41;'
В обоих случаях функции
rpcf_add_house и rpcf_edit_ip_slink_ex вызываются в цикле 150-300 итераций.

В debug логе UTM есть подобные сообщения:

Код: Выделить всё

?Debug &#58; Jun 27 18&#58;34&#58;36 b4255b70 RPCConn&#91;SSL&#93;<lexab@127.0.0.1>&#58; Call&#58; 0x2929 &#40;rpcf_edit_iptraffic_service_link_ex&#41;
?Debug &#58; Jun 27 18&#58;34&#58;36 b4255b70 RPCConn&#91;SSL&#93;<lexab@127.0.0.1>&#58; Real Call&#58; 0x2929 &#40;rpcf_edit_iptraffic_service_link_ex&#41;
?Debug &#58; Jun 27 18&#58;34&#58;36 b4255b70 UTM5 DBA&#58; DBAccess instance created
?Debug &#58; Jun 27 18&#58;34&#58;36 b4255b70 DBA&#58;Ctx&#58; Looking for free context &#40;system=0&#41;
?Debug &#58; Jun 27 18&#58;34&#58;47 b4255b70 DBA&#58;Ctx&#58; Pushing back free context &#40;system=0&#41;
-Stats &#58; Jun 27 18&#58;34&#58;47 b4255b70 UTM5 DBA&#58;     Stats&#58; Uptime&#58; 00&#58;00&#58;11. Events&#58; 0; Errors&#58; 0
 ERROR &#58; Jun 27 18&#58;34&#58;47 b4255b70 RPCServer@0.0.0.0&#58; Exception in void* rpcf_edit_iptraffic_service_link_ex&#40;void*&#41;&#58; #22
?Debug &#58; Jun 27 18&#58;34&#58;47 b4255b70 RPCConn&#91;SSL&#93;<lexab@127.0.0.1>&#58; Call 0x2929 &#40;rpcf_edit_iptraffic_service_link_ex&#41; finished...
?Debug &#58; Jun 27 18&#58;34&#58;47 b4255b70 RPCConn&#91;SSL&#93;<lexab@127.0.0.1>&#58; Stream cleared
 Warn  &#58; Jun 27 18&#58;34&#58;47 b4255b70 RPCConn&#91;SSL&#93;<lexab@127.0.0.1>&#58; Session closed
?Debug &#58; Jun 27 18&#58;34&#58;47 b4255b70 RPCConn&#91;SSL&#93;<lexab@127.0.0.1>&#58; Session Key <fb94084e6a35612a77627ae041072a43> stored for UID -34 from <127.0.0.1>
?Debug &#58; Jun 27 18&#58;34&#58;47 b4255b70 StreamManager&#58; connection <23> closed
?Debug &#58; Jun 27 18&#58;34&#58;47 b4255b70 RPCConn&#91;SSL&#93;<lexab@127.0.0.1>&#58; Session closed...
Честно говоря не уверен что это проблема ourfa. Возможно что где то , не хватает буферов.
Посоветуйте плз что покрутить?

littlesavage
Сообщения: 120
Зарегистрирован: Вс ноя 22, 2009 02:41
Откуда: Чебоксары

Re: recv_pkt_hdr BIO_read: Ресурс временно недоступен

Сообщение littlesavage »

lexab писал(а):Добрый день.
Не подскажите, есть ли какие ограничения по количеству запросов через ourfa`у
На двух функциях rpcf_add_house и rpcf_edit_ip_slink_ex
Посоветуйте плз что покрутить?
Возможно, просто таймаут слишком маленький. -timeout 3000

Rav
Сообщения: 70
Зарегистрирован: Пт июн 29, 2007 17:02

Сообщение Rav »

Решил попробовать библиотеку ourfa на 5.2.1-008-update6.

Скачал admin.crt и положил в /netup/utm5/

Далее делаю:

Код: Выделить всё

#! /usr/bin/perl
use strict;
use Ourfa;
use Data&#58;&#58;Dumper;

my $ourfa = Ourfa->new&#40;
      api_xml_file=>"/netup/utm5/xml/api.xml",
      server=>'127.0.0.1',
      login=>'user',
      password=>'password',
      login_type=>0,
      ssl => 'rsa_cert',
    &#41;;

my $res = $ourfa->rpcf_user5_brief_report_for_wintray&#40;&#41;;

print Dumper&#40;$res&#41;;
Запускаю:
./scriptname.pl

Код: Выделить всё

$VAR1 = &#123;
          'balance' => '27',
          'user_int_status' => 1
        &#125;;
Все нормально..

Этот же скрипт запускаю через URL: https://10.10.10.10/perl-cgi/script.pl (Apache+mod_ssl+mod_perl), в error.log apache ошибка:

Код: Выделить всё

BIO_do_handshake&#40;&#41; error at /usr/local/lib/perl5/site_perl/5.8.8/mach/Ourfa.pm line 380.
&#91;error&#93; PerlRun&#58; `Ourfa&#58;&#58;Connection&#58;&#58;open&#58; SSL error at /usr/local/lib/perl5/site_perl/5.8.8/mach/Ourfa.pm line 380.\n at /www/test_site/public_html/perl-cgi/scriptname.pl line 15\n'
В main.log биллинга:

Код: Выделить всё

 Info  &#58; Nov 04 00&#58;28&#58;30 0c6cae00 RPCServer@0.0.0.0&#58; Client connecting&#58; 127.0.0.1&#58;65129
 Info  &#58; Nov 04 00&#58;28&#58;30 0c6cae00 RPCConn&#58; Connection from&#58; 127.0.0.1&#58;65129 new Session Key <9e23b34e88a2be434339e8dc996075ff>
 Info  &#58; Nov 04 00&#58;28&#58;30 0c6cae00 RPCConn&#91;SSL&#93;<user@127.0.0.1>&#58; Access granted to &#91;SSL&#93;<user@127.0.0.1> &#40;UID&#58; 2333&#41;
 ERROR &#58; Nov 04 00&#58;28&#58;30 0c6cae00 RPCConn&#91;SSL&#93;<user@127.0.0.1>&#58; SSL connection failed &#40;4&#41;, system errno <0>
ОС: FreeBSD 6.4-RELEASE-p11 #0

На 5.2.1-006-update5 без использования SSL, все работает отлично.

Подскажите пожалуйста где копать.

Rav
Сообщения: 70
Зарегистрирован: Пт июн 29, 2007 17:02

Сообщение Rav »

Нет ни у кого мыслей по вышеописанному?

littlesavage
Сообщения: 120
Зарегистрирован: Вс ноя 22, 2009 02:41
Откуда: Чебоксары

Сообщение littlesavage »

Покажи /proc/<pid рабочего процесса апача>map

Может, он какой-то другой libssl/libcrypto подхватывает.
Модно apache попробовать пересобрать

Rav
Сообщения: 70
Зарегистрирован: Пт июн 29, 2007 17:02

Сообщение Rav »

Не хочет показывать. Ругается.

Код: Выделить всё

cat /proc/<pid рабочего процесса апача>/map
cat&#58; /proc/<pid рабочего процесса апача>/map&#58; File too large
Я думаю, что пересборка не поможет. В Ourfa ведь используются свои (вшитые) функции подключения через SSL. Apache же в этом не участвует. Или я не прав?

littlesavage
Сообщения: 120
Зарегистрирован: Вс ноя 22, 2009 02:41
Откуда: Чебоксары

Сообщение littlesavage »

Весь SSL делается на библиотеках openssl. Желательно ее обновить до 1.0 и проследить, чтобы apache цеплял именно эту версию.

Rav
Сообщения: 70
Зарегистрирован: Пт июн 29, 2007 17:02

Сообщение Rav »

littlesavage писал(а):Весь SSL делается на библиотеках openssl. Желательно ее обновить до 1.0 и проследить, чтобы apache цеплял именно эту версию.
Обновил библиотеку, пересобрал Apache и mod_perl. Заработало! Спасибо за совет!

Rav
Сообщения: 70
Зарегистрирован: Пт июн 29, 2007 17:02

Сообщение Rav »

felix020 писал(а):Весь SSL делается на библиотеках openssl думаю так
А urfa на библиотеках urfa. :)
Последний раз редактировалось Rav Ср ноя 16, 2011 00:33, всего редактировалось 3 раза.

Rav
Сообщения: 70
Зарегистрирован: Пт июн 29, 2007 17:02

Сообщение Rav »

felix020 писал(а):Весь SSL делается на библиотеках openssl думаю так
Тут дело в том, что запуская скрипт из командной строки, библиотека Ourfa отрабатывала нормально, а вот то, что из mod_perl это делается Apache'вскими средствами, до меня не доходило! Я же компилировал ее как отдельное ПО. Предполагал, что раз откомпилировал, значит она всегда обращается к одной и той же библиотеке Openssl.

Теперь принцип работы понятен.

Аватара пользователя
marvin
Сообщения: 77
Зарегистрирован: Сб мар 24, 2007 11:18
Откуда: Нижняя Тура

Сообщение marvin »

Извиняюсь за глупый вопрос... Как сделать обработку возвращаемых значений в перл скрипте, чтобы он не останавливался, когда rpc функция возвращает ошибку?

upd: Уже нашёл! Надо использовать конструкцию eval { } :D

Ответить