urfaclient на C

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

Сообщение littlesavage »

adeep писал(а):есть желание поучаствовать.
сам делают тоже самое, но для python.
И как успехи? :)

adeep
Сообщения: 79
Зарегистрирован: Пт июн 24, 2005 18:59

Сообщение adeep »

нормально работает. есть правда одна нерешенная проблема. но тут не хватает знания о протоколе.

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

Сообщение ds »

adeep писал(а):нормально работает. есть правда одна нерешенная проблема. но тут не хватает знания о протоколе.
Объясни в чем проблема, поразбираемся

adeep
Сообщения: 79
Зарегистрирован: Пт июн 24, 2005 18:59

Сообщение adeep »

у сокетов в python нет понятия проверки на EOF, которая используется в пхп варианте, посколько знаний о протоколе недостаточно (я так понял, что неизвестно сколько и какой информации ядро выплевывает в клиента в некоторых случаях).
В таких ситуациях в питоне приходится спрыгивать через таймаут чтения, что либо тормозит обмен данными (если таймаут большой), либо может привести к потере связи (если таймаут меньше чем задержки в обмене данными)

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

Сообщение ds »

adeep писал(а):у сокетов в python нет понятия проверки на EOF, которая используется в пхп варианте, посколько знаний о протоколе недостаточно (я так понял, что неизвестно сколько и какой информации ядро выплевывает в клиента в некоторых случаях).
В таких ситуациях в питоне приходится спрыгивать через таймаут чтения, что либо тормозит обмен данными (если таймаут большой), либо может привести к потере связи (если таймаут меньше чем задержки в обмене данными)
Проверка на eof это просто дополнительная проверка на ошибки.
Поток же данных управляется атрибутами.

Например в функции

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

function urfa_get_data() {
    $packet = $this->getPacket();
    $packet->clean();
    while(true) {
       if (!feof($this->socket)) {
             $packet->read();
             if ($packet->AttrGetInt(4))
                 break;
             
       }
    }
    if (count($packet->data)==0)
          return FALSE;
    return $packet;
}
 
Конец принятых данных определяется по приходу атрибута (4).
А eof в данном случае просто проверка, что в соединение живое.
Можно конечно обойтись и без нее, если напрмер использовать исключения, или другим способом проверять наличие соединения. На тему питона и сокетов не могу ничего сказать, не силен.

banec
Сообщения: 269
Зарегистрирован: Вт сен 11, 2007 09:06

Сообщение banec »

littlesavage писал(а):
pingvin писал(а):Прошла неделя, и где документация??
Пока времени нет :) Да и, похоже, нам удастся отказаться от этого "биллинга".
А что именно не понятно?
гы а в пользу какого ? stopor()mail.by скиньте что рассматриваете плиз.

adeep
Сообщения: 79
Зарегистрирован: Пт июн 24, 2005 18:59

Сообщение adeep »

ds писал(а): Конец принятых данных определяется по приходу атрибута (4).
А eof в данном случае просто проверка, что в соединение живое.
Можно конечно обойтись и без нее, если напрмер использовать исключения, или другим способом проверять наличие соединения. На тему питона и сокетов не могу ничего сказать, не силен.
пока глубоко в протоколе не ковырялся.
но как показала практика - таймауты, выставленные вместо проверок на eof, все таки срабатывают.
тут месяц из жизни программистской выпал) на досуге продолжу ковыряться, посмотрю что и как.

ds если что
jid: adeep@jabber.ru
icq: 137063955

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

Сообщение littlesavage »

banec писал(а): гы а в пользу какого ? stopor()mail.by скиньте что рассматриваете плиз.
Рассматривали bgbilling, но что-то он дорогой какой-то.

PS: Написал примеры нескольких простейших скриптов на perl: https://sourceforge.net/apps/trac/ourfa ... rlExamples
Последний раз редактировалось littlesavage Ср мар 24, 2010 00:37, всего редактировалось 1 раз.

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

Сообщение littlesavage »

Написал небольшой кабиент клиента на базе Catalyst, с использоватем Ourfa для доступа к UTM: http://sourceforge.net/apps/trac/ourfa/wiki/InfaoClient

Volniy_Strelok
Сообщения: 13
Зарегистрирован: Ср мар 17, 2010 14:14

Сообщение Volniy_Strelok »

при выполнении make test получаю

cd ourfa && make
make[1]: Entering directory `/home/volniy/c_utm5/ourfa-0.2beta1/ourfa-perl/ourfa'
make[1]: Leaving directory `/home/volniy/c_utm5/ourfa-0.2beta1/ourfa-perl/ourfa'
make[1]: Entering directory `/home/volniy/c_utm5/ourfa-0.2beta1/ourfa-perl/ourfa'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/volniy/c_utm5/ourfa-0.2beta1/ourfa-perl/ourfa'
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/Ourfa....
# Failed test 'use Ourfa;'
# in t/Ourfa.t at line 9.
# Tried to use 'Ourfa'.
# Error: Can't load '/home/volniy/c_utm5/ourfa-0.2beta1/ourfa-perl/blib/arch/auto/Ourfa/Ourfa.so' for module Ourfa: /home/volniy/c_utm5/ourfa-0.2beta1/ourfa-perl/blib/arch/auto/Ourfa/Ourfa.so: undefined symbol: be64toh at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.
# at (eval 3) line 2
# Compilation failed in require at (eval 3) line 2.
# BEGIN failed--compilation aborted at t/Ourfa.t line 9.
# Looks like you failed 1 test of 1.
t/Ourfa....dubious
Test returned status 1 (wstat 256, 0x100)
DIED. FAILED test 1
Failed 1/1 tests, 0.00% okay
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/Ourfa.t 1 256 1 1 100.00% 1
Failed 1/1 test scripts, 0.00% okay. 1/1 subtests failed, 0.00% okay.
make: *** [test_dynamic] Error 1

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

Сообщение littlesavage »

Volniy_Strelok писал(а):при выполнении make test получаю
Какая версия glibc?

Volniy_Strelok
Сообщения: 13
Зарегистрирован: Ср мар 17, 2010 14:14

Сообщение Volniy_Strelok »

glibc-2.5-42.el5_4.3

Я правильно понимаю что устанавливать нужно только из директории ourfa-perl ?

Volniy_Strelok
Сообщения: 13
Зарегистрирован: Ср мар 17, 2010 14:14

Segmentation fault (core dumped)

Сообщение Volniy_Strelok »

C glibc разобрались.
При выполнении функции rpcf_add_to_ipgroup
получаю Segmentation fault (core dumped)
Как добавить сеть?

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

Re: Segmentation fault (core dumped)

Сообщение littlesavage »

Volniy_Strelok писал(а):C glibc разобрались.
При выполнении функции rpcf_add_to_ipgroup
получаю Segmentation fault (core dumped)
Как добавить сеть?
С glibc когда писал, думал что младше 2.9 уже не использется. ПРошу прощения :)

rpcf_add_to_ipgroup - скорее всего такой функции просто нет в api.xml (а ее там точно нет). Есть ф-я rpcf_add_ipgroup - добавление IP группы в список адресов IP -зоны.
Некорректое завершение программы при такой ошибке исправbk (в свн), спасибо.

Volniy_Strelok
Сообщения: 13
Зарегистрирован: Ср мар 17, 2010 14:14

rpcf_add_ipgroup

Сообщение Volniy_Strelok »

Немогли бы вы дать рабочий кусок кода для добавления IP группы в список адресов IP -зоны?
Ни как не получается добавить сеть с помощью rpcf_add_ipgroup.

Ответить