urfaclient на php

Вопросы по сопутствующим продуктам производства партнеров
Ответить
gil
Сообщения: 355
Зарегистрирован: Вт ноя 11, 2008 14:28

Сообщение gil »

Товарищи, а где можно получить последний релиз??
А то в первом сообщении вроде не он лежит..
Если можно - намыльте на mr.tapac [at] gmail.com

Systemnick
Сообщения: 14
Зарегистрирован: Пт янв 30, 2009 16:10
Откуда: Россия

Сообщение Systemnick »

gil писал(а):Товарищи, а где можно получить последний релиз??
А то в первом сообщении вроде не он лежит..
Если можно - намыльте на mr.tapac [at] gmail.com
Присоединяюсь :) p1 [на] nm (тчк) ru

hcube
Сообщения: 14
Зарегистрирован: Вт фев 10, 2009 16:33

Сообщение hcube »

Логично ;-) Проблема была в 3017 функции, там не было лишнего вызова $x = urfa_get_data();

Systemnick
Сообщения: 14
Зарегистрирован: Пт янв 30, 2009 16:10
Откуда: Россия

Сообщение Systemnick »

Попытался написать rpcf_add_service_to_user...
Чувствую накосячил :)
Взял только три типа услуг:
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&#40;$i=0;$i<$ip_groups_count;$i++&#41; &#123;
					$packet->DataSetIPAddress&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'ip_address'&#93;&#41;;
					$packet->DataSetIPAddress&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'mask'&#93;&#41;;
					$packet->DataSetString&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'mac'&#93;&#41;;
					$packet->DataSetString&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'iptraffic_login'&#93;&#41;;
					$packet->DataSetString&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'iptraffic_allowed_cid'&#93;&#41;;
					$packet->DataSetString&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'iptraffic_password'&#93;&#41;;
					$packet->DataSetInt&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'ip_not_vpn'&#93;&#41;;
					$packet->DataSetInt&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'dont_use_fw'&#93;&#41;;
					$packet->DataSetInt&#40;$service&#91;'ip_groups'&#93;&#91;$i&#93;&#91;'router_id'&#93;&#41;;
				&#125;
				$quotas_count = count&#40;$service&#91;'quotas'&#93;&#41;;
				$packet->DataSetInt&#40;$quotas_count&#41;;
				for&#40;$i=0;$i<$quotas_count;$i++&#41; &#123;
					$packet->DataSetInt&#40;$service&#91;'quotas'&#93;&#91;$i&#93;&#91;'tclass_id'&#93;&#41;;
					$packet->DataSetLong&#40;$service&#91;'quotas'&#93;&#91;$i&#93;&#91;'quota'&#93;&#41;;
				&#125;
			case 4&#58; //hotspot service
				
			case 5&#58; //dialup service
				$packet->DataSetInt&#40;$service&#91;'slink_id'&#93;&#41;;
				$packet->DataSetInt&#40;$service&#91;'is_blocked'&#93;&#41;;
				$packet->DataSetInt&#40;$service&#91;'discount_period_id'&#93;&#41;;
				if&#40;$service&#91;'start_date'&#93; == 0&#41; $service&#91;'start_date'&#93; = now&#40;&#41;;
				$packet->DataSetInt&#40;$service&#91;'start_date'&#93;&#41;;
				if&#40;$service&#91;'expire_date'&#93; == 0&#41; $service&#91;'expire_date'&#93; = max_time&#40;&#41;;
				$packet->DataSetInt&#40;$service&#91;'expire_date'&#93;&#41;;
				$packet->DataSetString&#40;$service&#91;'dialup_login'&#93;&#41;;
				$packet->DataSetString&#40;$service&#91;'dialup_password'&#93;&#41;;
				$packet->DataSetString&#40;$service&#91;'dialup_allowed_cid'&#93;&#41;;
				$packet->DataSetString&#40;$service&#91;'dialup_allowed_csid'&#93;&#41;;
				$packet->DataSetInt&#40;$service&#91;'callback_enabled'&#93;&#41;;
				$packet->DataSetInt&#40;$service&#91;'unabon'&#93;&#41;;
				$packet->DataSetInt&#40;$service&#91;'unprepay'&#93;&#41;;
			case 6&#58; //telephony service
				
		&#125;
		$this->connection->urfa_send_param&#40;$packet&#41;;
		if&#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41; &#123;
			$this->connection->urfa_get_data&#40;&#41;;
			if&#40;$service&#91;'return_type'&#93; == "integer_return"&#41; &#123;
				$ret&#91;'slink_id'&#93;=$x->DataGetInt&#40;&#41;;
				if&#40;$ret&#91;'slink_id'&#93; == -1&#41; return -1;
			&#125; else &#123;
				$error_msg=$x->DataGetString&#40;&#41;;
				if&#40;$error_msg != ""&#41; &#123;
					$ret&#91;'error_msg'&#93;=$error_msg;
					return -1;
				&#125;
			&#125;
		&#125; else &#123;
			return -1;
		&#125;
		return $ret;
	&#125;
PS: Не разобрался с urfa_get_data(). Функция работает только если вызывать urfa_get_data() два раза подряд.
Последний раз редактировалось Systemnick Ср фев 18, 2009 19:35, всего редактировалось 1 раз.

hcube
Сообщения: 14
Зарегистрирован: Вт фев 10, 2009 16:33

Сообщение hcube »

urfa_getdata возвращает структурированный массив данных, который отдает обращение к URFA интерфейсу. Union, если по-сишному ;-) Структура данных описана вообще говоря в файле api.xml, входящему в комплект UTM. А потом просто работают функции get_что-то, которые из этого массива начиная с данного адреса читают то или иное значение.

Все это очень просто можно посмотреть, если после getdata() посмотреть структуру полученного массива функцией print_r()

Systemnick
Сообщения: 14
Зарегистрирован: Пт янв 30, 2009 16:10
Откуда: Россия

Сообщение Systemnick »

Вызываю 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]

)

)

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

Сообщение ds »

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().
Если очень надо, могу выслать на почту, но функции там будут не все.

AndrewE
Сообщения: 230
Зарегистрирован: Пн июл 17, 2006 07:38

Сообщение AndrewE »

киньте мне на почту shicoy () майл.pу
функции сами напишем, главное косяк.
спасибо!

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Сделал на wiki http://wiki.flintnet.ru/ всю библиотеку.
URFAClient_Admin.php и URFAClient_User5.php генерируются на лету из написанных функций.

Внимание! Новая функция urfa_get_data() здесь пока не используется. Завтра постараюсь включить и соответственно изменить функции.

[anomality]
Сообщения: 11
Зарегистрирован: Чт фев 19, 2009 09:48
Откуда: Абакан, Россия

Сообщение [anomality] »

можно и мне на мыло уже последнюю версию? anomality(at)alfatelplus(dot)ru

masis
Сообщения: 39
Зарегистрирован: Ср фев 18, 2009 13:30
Откуда: Н.Новгород

Сообщение masis »

Systemnick писал(а):Попытался написать rpcf_add_service_to_user...
Вот, чего не хватало! :) А то как раз надо добавить несколько сотен юзеров с диалап+ip-трафик для динамического vpn.

Аватара пользователя
Yasasha
Сообщения: 23
Зарегистрирован: Вт апр 22, 2008 13:44
Откуда: г. Тамбов

Сообщение Yasasha »

Тоже ждём :super: .
Вообще, спасибо всем, кто делает такую нужную штуку.

starchik
Сообщения: 461
Зарегистрирован: Сб ноя 22, 2008 22:07

Сообщение starchik »

и мне если не затруднить намыльте djstarchik@mail.ru

gil
Сообщения: 355
Зарегистрирован: Вт ноя 11, 2008 14:28

Сообщение gil »

Спасибо всем, решил проблему с помощью mysql + urfa_client из первого поста..

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

Сообщение ds »

gil писал(а):Спасибо всем, решил проблему с помощью mysql + urfa_client из первого поста..
Крута, тока что отправил на почту, опоздал :)

Ответить