urfaclient на C
Пацаны вообще ребята
)
В общем понял идеологию, заходим в api.xml и подсматриваем функции.
Затем по аналогии создаем xml файлы и запускаем.
Для моего случая понадобились функции:
1. get_all_services_for_user - уже есть в xml, необходимо узнать id сервисных связок slink_id
2. rpcf_set_recalc_type - задаем recalc_type, при чем надо успеть до первого списания, что-бы применялось именно в действующий расчетный период.
<?xml version="1.0"?>
<urfa>
<call function="rpcf_set_recalc_type">
<parameter name="slink_id" comment="slink_id"/>
<parameter name="recalc_type" comment="recalc_type"/>
<parameter name="recalc_traffic" comment="recalc_traffic"/>
</call>
</urfa>

В общем понял идеологию, заходим в api.xml и подсматриваем функции.
Затем по аналогии создаем xml файлы и запускаем.
Для моего случая понадобились функции:
1. get_all_services_for_user - уже есть в xml, необходимо узнать id сервисных связок slink_id
2. rpcf_set_recalc_type - задаем recalc_type, при чем надо успеть до первого списания, что-бы применялось именно в действующий расчетный период.
<?xml version="1.0"?>
<urfa>
<call function="rpcf_set_recalc_type">
<parameter name="slink_id" comment="slink_id"/>
<parameter name="recalc_type" comment="recalc_type"/>
<parameter name="recalc_traffic" comment="recalc_traffic"/>
</call>
</urfa>
У меня функция rpcf_set_recalc_type задаёт только следующий тип перерасчёта, а текущий так и остаётся 0 ("Ничего не делать")...
Я попытался подсмотреть, какие функции вызываются программой utm_admin при создании сервисной связки с нужным типом... в файле console.log вызывается только add_hotspot_slink_ex, но параметры в этом файле не указаны. В списке параметров этой функции в api.xml нет ничего похожего на тип перерасчёта, есть только параметр unabon, который, как я понял, аналогичен галке "Пересчитать при добавлении" при использовании GUI...
Кто подскажет, как задать текущий тип сервисной связки через URFA?
Я попытался подсмотреть, какие функции вызываются программой utm_admin при создании сервисной связки с нужным типом... в файле console.log вызывается только add_hotspot_slink_ex, но параметры в этом файле не указаны. В списке параметров этой функции в api.xml нет ничего похожего на тип перерасчёта, есть только параметр unabon, который, как я понял, аналогичен галке "Пересчитать при добавлении" при использовании GUI...
Кто подскажет, как задать текущий тип сервисной связки через URFA?
Вопрос по функции <function name="rpcf_edit_user_new" id="0x2126">.
Меняю доп.параметры, а в ответ
При этом доп.параметры меняются, в логах никаких ошибок, UTM5 5.2.1-008-update6.
upd 1. Через функцию rpcf_add_user доп.параметры меняются без ошибок:
upd 2. Если через админку менять доп.параметры, то видно, что вызывается функция rpcf_edit_user_new
Меняю доп.параметры, а в ответ
Код: Выделить всё
{ 'error_description' => 'Unknown error',
'user_id' => 0,
'error_code' => 74
};
upd 1. Через функцию rpcf_add_user доп.параметры меняются без ошибок:
Код: Выделить всё
{ 'error_msg' => '',
'user_id' => user_id
};
C urfa клиентом вообще все обстоит "очень весело".
Если очень надо, то вот http://jd.benow.ca/ и на файл utm_admin.jar.
Если очень надо, то вот http://jd.benow.ca/ и на файл utm_admin.jar.
-
- Сообщения: 77
- Зарегистрирован: Пн сен 14, 2009 13:53
- Откуда: Екатеринбург
- Контактная информация:
Добрый день!
Кто-нибудь успешно использовал функции работы с RADIUS сессиями, а именно rpcf_radius_get_active_sessions, rpcf_radius_disconnect_session и
rpcf_radius_drop_session ?
При их использовании всегда возникает ошибка, например:
Пробуем теперь попросить disconnect (c drop все точно так же)
Кто-нибудь успешно использовал функции работы с RADIUS сессиями, а именно rpcf_radius_get_active_sessions, rpcf_radius_disconnect_session и
rpcf_radius_drop_session ?
При их использовании всегда возникает ошибка, например:
Код: Выделить всё
[root@utm5test utm5]# ourfa/ourfa_client -S rsa_cert -a rpcf_radius_get_active_sessions -l bras -P *****
Loading config file ./utm5_urfaclient.cfg
Loading API XML: ./xml/api.xml
<?xml version="1.0"?>
<urfa>
<session key="66a5c054000000001747a76aee3a5a1f"/>
<call function="rpcf_radius_get_active_sessions">
<output>
<integer name="traffic_sessions_count" value="160"/>
<array name="i">
<item>
<integer name="traf_id" value="7524"/>
<string name="traf_acct_session_id" value="010FFFFFD8001632-54B79638"/>
<string name="traf_user_name" value="192.168.64.24"/>
Can not get ip_address value
Function `rpcf_radius_get_active_sessions` node `ip_address`. Cannot get ip_address value for node traf_nas_ip(i)
<error>Function `rpcf_radius_get_active_sessions` node `ip_address`. Cannot get ip_address value for node traf_nas_ip(i)</error>
</item>
</array>
</output>
</call>
</urfa>
Код: Выделить всё
[root@utm5test utm5]# ourfa/ourfa_client -S rsa_cert -l bras -P **** -a rpcf_radius_disconnect_session -acct_session_id 010FFFFFD8001632-54B79638 -nas_ip '192.168.9.11'
Loading config file ./utm5_urfaclient.cfg
Loading API XML: ./xml/api.xml
<?xml version="1.0"?>
<urfa>
<session key="81a7c054000000006642d93d5301def5"/>
<call function="rpcf_radius_disconnect_session">
<output>
Received ATTR_TERMINATION instead of ATTR_DATA attribute
Function `rpcf_radius_disconnect_session` node `integer`. Can not get integer value for node 'error_code(0)'
<error>Function `rpcf_radius_disconnect_session` node `integer`. Can not get integer value for node 'error_code(0)'</error>
</output>
</call>
</urfa>
А кто нибудь может подсказать по использованию пользовательских функций? Которые с "-" вначале.
Например, rpcf_user5_get_promised_payment.
Понятно, говорит, из под рута нельзя. Как я понял, надо указать -u имя_пользователя ?
Но, когда так указываешь, начинает ругаться на
Наверное, что-то я не так делаю?
Например, rpcf_user5_get_promised_payment.
Код: Выделить всё
root@kv3:# ourfa_client -S rsa_cert -a rpcf_user5_get_promised_payment -account_id 154
Loading config file /netup/utm5/utm5_urfaclient.cfg
Loading API XML: /netup/utm5/xml/api.xml
Access denied
Function `rpcf_user5_get_promised_payment` node `ROOT`. Access denied
Но, когда так указываешь, начинает ругаться на
Код: Выделить всё
Wrong parameter '154': can not parse value
В 5.3.003 в api.xml
поменяли
<function name="rpcf_get_accountinfo" id="0x2030">
<input>
<integer name="account_id"/>
</input>
<output>
<integer name="unused"/>
<integer name="is_blocked"/>
<integer name="dealer_account_id"/>
<integer name="is_dealer"/>
<double name="vat_rate"/>
<double name="sale_tax_rate"/>
<double name="comission_coefficient"/>
<double name="default_comission_value"/>
<double name="credit"/>
<double name="balance"/>
<integer name="int_status"/>
<integer name="block_recalc_abon"/>
<integer name="block_recalc_prepaid"/>
<integer name="unlimited"/>
</output>
</function>
на
<function name="rpcf_get_accountinfo" id="0x15109">
<input>
<integer name="account_id"/>
</input>
<output>
<integer name="is_blocked"/>
<double name="vat_rate"/>
<double name="sale_tax_rate"/>
<double name="credit"/>
<double name="balance"/>
<integer name="int_status"/>
<integer name="unlimited"/>
<integer name="auto_enable_inet"/>
<string name="external_id"/>
</output>
</function>
Если в api.xml добавить обе эти функции для нормальный работы с 5.2.008 и 5.3.003 ничего плохого не случится?
p.s. Да там у многих функций в 5.3.003 id-шники поменяли. "Склеивать" новый и старый api.xml?
поменяли
<function name="rpcf_get_accountinfo" id="0x2030">
<input>
<integer name="account_id"/>
</input>
<output>
<integer name="unused"/>
<integer name="is_blocked"/>
<integer name="dealer_account_id"/>
<integer name="is_dealer"/>
<double name="vat_rate"/>
<double name="sale_tax_rate"/>
<double name="comission_coefficient"/>
<double name="default_comission_value"/>
<double name="credit"/>
<double name="balance"/>
<integer name="int_status"/>
<integer name="block_recalc_abon"/>
<integer name="block_recalc_prepaid"/>
<integer name="unlimited"/>
</output>
</function>
на
<function name="rpcf_get_accountinfo" id="0x15109">
<input>
<integer name="account_id"/>
</input>
<output>
<integer name="is_blocked"/>
<double name="vat_rate"/>
<double name="sale_tax_rate"/>
<double name="credit"/>
<double name="balance"/>
<integer name="int_status"/>
<integer name="unlimited"/>
<integer name="auto_enable_inet"/>
<string name="external_id"/>
</output>
</function>
Если в api.xml добавить обе эти функции для нормальный работы с 5.2.008 и 5.3.003 ничего плохого не случится?
p.s. Да там у многих функций в 5.3.003 id-шники поменяли. "Склеивать" новый и старый api.xml?
Народ а кто нибудь собирал на 8-ом дебиане?
что то у меня не собирается
что то у меня не собирается
Код: Выделить всё
# make
cc -DNDEBUG -s -fPIC `xml2-config --cflags` -I/usr/local/include \
-o ourfa_client \
client.o client_dump.o client_datafile.o \
-L/usr/local/lib -L. -lourfa -lssl -lcrypto `xml2-config --libs` -L/usr/local/lib -liconv
/usr/bin/ld: cannot find -liconv
collect2: error: ld returned 1 exit status
Makefile:36: ошибка выполнения рецепта для цели «ourfa_client»
make: *** [ourfa_client] Ошибка 1
Код: Выделить всё
# dpkg -l | grep iconv
ii libiconv-hook-dev 0.0.20021209-10 amd64 header files of libiconv-hook
ii libiconv-hook1 0.0.20021209-10 amd64 extension of iconv for libapache-mod-encoding
ii libtext-iconv-perl 1.7-5+b2 amd64 converts between character sets in Perl
littlesavage, а тут что может быть не так?
Код: Выделить всё
Received ATTR_TERMINATION instead of ATTR_DATA attribute at /usr/local/lib/x86_64-linux-gnu/perl/5.20.2/Ourfa.pm line 406.
Function `rpcf_add_iptraffic_service_link_ipv6` node `integer`. Can not get integer value for node 'slink_id(0)'
Код: Выделить всё
NetUP UTM billing system core. Compile date: Oct 6 2016 10:04:49
Version:5.3-004-update1-debian_jessie_x64 Rev #15958
Copyright (c) 2001-2016 NetUP Inc. www.netup.ru
Вывод с дебагом:
Код: Выделить всё
RECVD HANDSHAKE PKT...
pkt: PKT_SESSION_INIT v: 0x23 size: 0x0018 attrs_cnt: 1
attr: ATTR_MD5_SESSION_ID size: 0x0010 data: ''..X.......P....'
SENDING LOGIN PACKET ...
pkt: PKT_ACCESS_REQUEST v: 0x23 size: 0x004b attrs_cnt: 5
attr: ATTR_CHAP_CHALLENGE size: 0x0010 data: ''..X.......P....'
attr: ATTR_LOGIN_TYPE size: 0x0004 data: 0x00000000
attr: ATTR_LOGIN size: 0x000b data: 'admin'
attr: ATTR_CHAP_RESPONSE size: 0x0010 data: '9%....]....;...k'
attr: ATTR_SSL_REQUEST size: 0x0004 data: 0x00000002
RECVD LOGIN RESPONSE PKT ...
pkt: PKT_ACCESS_ACCEPT v: 0x23 size: 0x0014 attrs_cnt: 2
attr: ATTR_LOGIN_TYPE size: 0x0004 data: 0x00000001
attr: ATTR_SSL_REQUEST size: 0x0004 data: 0x00000002
Peer requested SSL 0x2
SEND START FUNC CALL PKT ...
pkt: PKT_SESSION_CALL v: 0x23 size: 0x000c attrs_cnt: 1
attr: ATTR_CALL size: 0x0004 data: 0x0000293e
RECVD START FUNC CALL RESPONSE PKT ...
pkt: PKT_SESSION_DATA v: 0x23 size: 0x000c attrs_cnt: 1
attr: ATTR_CALL size: 0x0004 data: 0x0000293e
SEND DATA ...
pkt: PKT_SESSION_DATA v: 0x23 size: 0x00f8 attrs_cnt: 32
attr: ATTR_DATA size: 0x0004 data: 0x0000908e
attr: ATTR_DATA size: 0x0004 data: 0x00009133
attr: ATTR_DATA size: 0x0004 data: 0x000000e2
attr: ATTR_DATA size: 0x0004 data: 0x0000d271
attr: ATTR_DATA size: 0x0004 data: 0x00000b30
attr: ATTR_DATA size: 0x0004 data: 0x5808c627
attr: ATTR_DATA size: 0x0004 data: 0x77359400
attr: ATTR_DATA size: 0x0004 data: 0x00000001
attr: ATTR_DATA size: 0x0004 data: 0x00000001
attr: ATTR_DATA size: 0x0008 data: 0x3ff0000000000000
attr: ATTR_DATA size: 0x0004 data: 0x00000001
attr: ATTR_DATA size: 0x0004 data: 0x00000001
attr: ATTR_DATA size: 0x0004 data: 0x00000000
attr: ATTR_DATA size: 0x0004 data: 0x01010101
attr: ATTR_DATA size: 0x0004 data: 0x00000020
attr: ATTR_DATA size: 0x0004 data: 0x32323232
attr: ATTR_DATA size: 0x0000
attr: ATTR_DATA size: 0x0000
attr: ATTR_DATA size: 0x0000
attr: ATTR_DATA size: 0x0000
attr: ATTR_DATA size: 0x0004 data: 0x00000000
attr: ATTR_DATA size: 0x0004 data: 0x00000000
attr: ATTR_DATA size: 0x0004 data: 0x00000000
attr: ATTR_DATA size: 0x0004 data: 0x00000000
attr: ATTR_DATA size: 0x0004 data: 0x00000000
attr: ATTR_DATA size: 0x0004 data: 0x00000000
attr: ATTR_DATA size: 0x0004 data: 0x00000000
attr: ATTR_DATA size: 0x0004 data: 0x00000000
attr: ATTR_DATA size: 0x0004 data: 0x00000000
attr: ATTR_DATA size: 0x0004 data: 0x00000000
attr: ATTR_DATA size: 0x0004 data: 0x00000000
attr: ATTR_TERMINATION size: 0x0004 data: 0x00000004
RECEIVED FUNC OUTPUT PKT ...
pkt: PKT_SESSION_DATA v: 0x23 size: 0x000c attrs_cnt: 1
attr: ATTR_TERMINATION size: 0x0004 data: 0x00000004
Received ATTR_TERMINATION instead of ATTR_DATA attribute at /usr/local/lib/x86_64-linux-gnu/perl/5.20.2/Ourfa.pm line 406.
Function `rpcf_add_iptraffic_service_link_ipv6` node `integer`. Can not get integer value for node 'slink_id(0)'
Ourfa::ScriptCall::call: Function `rpcf_add_iptraffic_service_link_ipv6` node `integer`. Can not get integer value for node 'slink_id(0)'
at ./testourfa.pl line 329.
SENDING TERM PKT ...
pkt: PKT_SESSION_TERMINATE v: 0x23 size: 0x0004 attrs_cnt: 0
*** Error in `/usr/bin/perl': free(): corrupted unsorted chunks: 0x00000000017441b0 ***