urfaclient на php
-
- Сообщения: 14
- Зарегистрирован: Пт янв 30, 2009 16:10
- Откуда: Россия
-
- Сообщения: 14
- Зарегистрирован: Пт янв 30, 2009 16:10
- Откуда: Россия
Попытался написать rpcf_add_service_to_user...
Чувствую накосячил
Взял только три типа услуг:
2) Периодическая услуга;
3) Передача IP-трафика;
5) Коммутируемый доступ.
PS: Не разобрался с urfa_get_data(). Функция работает только если вызывать urfa_get_data() два раза подряд.
Чувствую накосячил

Взял только три типа услуг:
2) Периодическая услуга;
3) Передача IP-трафика;
5) Коммутируемый доступ.
Код: Выделить всё
function rpcf_add_service_to_user($service) { //0x2551
$ret = array();
if (!$this->connection->urfa_call(0x2551)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = $this->connection->getPacket();
$packet->DataSetInt($service['user_id']);
$packet->DataSetInt($service['account_id']);
$packet->DataSetInt($service['service_id']);
$packet->DataSetInt($service['service_type']);
$packet->DataSetString($service['return_type']);
$packet->DataSetInt($service['tariff_link_id']);
switch($service['service_type']) {
case 1: //once service
case 2: //periodic service
$packet->DataSetInt($service['slink_id']);
$packet->DataSetInt($service['is_blocked']);
$packet->DataSetInt($service['discount_period_id']);
if($service['start_date'] == 0) $service['start_date'] = now();
$packet->DataSetInt($service['start_date']);
if($service['expire_date'] == 0) $service['expire_date'] = max_time();
$packet->DataSetInt($service['expire_date']);
$packet->DataSetInt($service['unabon']);
$packet->DataSetInt($service['unprepay']);
case 3: //iptraffic service
$packet->DataSetInt($service['slink_id']);
$packet->DataSetInt($service['is_blocked']);
$packet->DataSetInt($service['discount_period_id']);
if($service['start_date'] == 0) $service['start_date'] = now();
$packet->DataSetInt($service['start_date']);
if($service['expire_date'] == 0) $service['expire_date'] = max_time();
$packet->DataSetInt($service['expire_date']);
$packet->DataSetInt($service['unabon']);
$packet->DataSetInt($service['unprepay']);
$ip_groups_count = count($service['ip_groups']);
$packet->DataSetInt($ip_groups_count);
for($i=0;$i<$ip_groups_count;$i++) {
$packet->DataSetIPAddress($service['ip_groups'][$i]['ip_address']);
$packet->DataSetIPAddress($service['ip_groups'][$i]['mask']);
$packet->DataSetString($service['ip_groups'][$i]['mac']);
$packet->DataSetString($service['ip_groups'][$i]['iptraffic_login']);
$packet->DataSetString($service['ip_groups'][$i]['iptraffic_allowed_cid']);
$packet->DataSetString($service['ip_groups'][$i]['iptraffic_password']);
$packet->DataSetInt($service['ip_groups'][$i]['ip_not_vpn']);
$packet->DataSetInt($service['ip_groups'][$i]['dont_use_fw']);
$packet->DataSetInt($service['ip_groups'][$i]['router_id']);
}
$quotas_count = count($service['quotas']);
$packet->DataSetInt($quotas_count);
for($i=0;$i<$quotas_count;$i++) {
$packet->DataSetInt($service['quotas'][$i]['tclass_id']);
$packet->DataSetLong($service['quotas'][$i]['quota']);
}
case 4: //hotspot service
case 5: //dialup service
$packet->DataSetInt($service['slink_id']);
$packet->DataSetInt($service['is_blocked']);
$packet->DataSetInt($service['discount_period_id']);
if($service['start_date'] == 0) $service['start_date'] = now();
$packet->DataSetInt($service['start_date']);
if($service['expire_date'] == 0) $service['expire_date'] = max_time();
$packet->DataSetInt($service['expire_date']);
$packet->DataSetString($service['dialup_login']);
$packet->DataSetString($service['dialup_password']);
$packet->DataSetString($service['dialup_allowed_cid']);
$packet->DataSetString($service['dialup_allowed_csid']);
$packet->DataSetInt($service['callback_enabled']);
$packet->DataSetInt($service['unabon']);
$packet->DataSetInt($service['unprepay']);
case 6: //telephony service
}
$this->connection->urfa_send_param($packet);
if($x = $this->connection->urfa_get_data()) {
$this->connection->urfa_get_data();
if($service['return_type'] == "integer_return") {
$ret['slink_id']=$x->DataGetInt();
if($ret['slink_id'] == -1) return -1;
} else {
$error_msg=$x->DataGetString();
if($error_msg != "") {
$ret['error_msg']=$error_msg;
return -1;
}
}
} else {
return -1;
}
return $ret;
}
Последний раз редактировалось Systemnick Ср фев 18, 2009 19:35, всего редактировалось 1 раз.
urfa_getdata возвращает структурированный массив данных, который отдает обращение к URFA интерфейсу. Union, если по-сишному
Структура данных описана вообще говоря в файле api.xml, входящему в комплект UTM. А потом просто работают функции get_что-то, которые из этого массива начиная с данного адреса читают то или иное значение.
Все это очень просто можно посмотреть, если после getdata() посмотреть структуру полученного массива функцией print_r()

Все это очень просто можно посмотреть, если после getdata() посмотреть структуру полученного массива функцией print_r()
-
- Сообщения: 14
- Зарегистрирован: Пт янв 30, 2009 16:10
- Откуда: Россия
Вызываю urfa_get_data() два раза, оба раза возвращается одно и то же. Например, если IP-адрес уже используется:
URFAClient_Packet Object
(
[version] => 35
[code] => 200
[len] => 54
[iterator] => 0
[attr] => Array
(
)
[sock] => Resource id #8
[data] => Array
(
[0] => [192.168.0.252/255.255.255.0 is already used]
)
)
URFAClient_Packet Object
(
[version] => 35
[code] => 200
[len] => 54
[iterator] => 0
[attr] => Array
(
)
[sock] => Resource id #8
[data] => Array
(
[0] => [192.168.0.252/255.255.255.0 is already used]
)
)
Systemnick писал(а):Вызываю urfa_get_data() два раза, оба раза возвращается одно и то же. Например, если IP-адрес уже используется:
URFAClient_Packet Object
(
[version] => 35Код: Выделить всё
=> 200 [len] => 54 [iterator] => 0 [attr] => Array ( ) [sock] => Resource id #8 [data] => Array ( [0] => [192.168.0.252/255.255.255.0 is already used] ) )[/quote] Ну возьмите вы вторую версию urfa_get_data(), и проблемы такого плана отпадут. Замените в классе вызов на новый. Вызываете ее один раз в функции и все, проблем никаких, я подробно уже расписал как это сделать. Сборку пока все функции не проверил, выкладывать не буду. От сборки, которую перевел на классы bobr (убедил меня что и для php ООП все таки лучше :) ) будет отличаться фактически только этой самой urfa_get_data(). Если очень надо, могу выслать на почту, но функции там будут не все.
Сделал на wiki http://wiki.flintnet.ru/ всю библиотеку.
URFAClient_Admin.php и URFAClient_User5.php генерируются на лету из написанных функций.
Внимание! Новая функция urfa_get_data() здесь пока не используется. Завтра постараюсь включить и соответственно изменить функции.
URFAClient_Admin.php и URFAClient_User5.php генерируются на лету из написанных функций.
Внимание! Новая функция urfa_get_data() здесь пока не используется. Завтра постараюсь включить и соответственно изменить функции.
-
- Сообщения: 11
- Зарегистрирован: Чт фев 19, 2009 09:48
- Откуда: Абакан, Россия
и мне если не затруднить намыльте djstarchik@mail.ru