urfaclient на php

Вопросы по сопутствующим продуктам производства партнеров
Ответить
drag0mir
Сообщения: 64
Зарегистрирован: Сб ноя 24, 2007 13:46
Откуда: Нижний Новгород

Сообщение drag0mir » Вс дек 01, 2013 00:09

Всем привет!
Народ, гуру, помогите пожалуйста!
Обновился до utm5.3.1-update3
а там функцию rpcf_get_free_ips_for_house(0x2813) заменили на новую rpcf_get_free_ips_for_house(0x15101).
Функция нужна, чтобы искать свободные ip-адреса в пуле по ID дома.
вот старая функция на php

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

    function rpcf_get_free_ips_for_house($house_id) { //0x2813
            $ret=array();
            if (!$this->connection->urfa_call(0x2813)) {
                print "Error calling function ". __FUNCTION__ ."\n";
                return FALSE;
            }
            $packet = $this->connection->getPacket();
            $packet->DataSetInt($house_id);
            $this->connection->urfa_send_param($packet);
            if ($x = $this->connection->urfa_get_data()){
                   $ret['ips_size']=$x->DataGetInt();
                   for &#40;$i=0;$i<$ret&#91;'ips_size'&#93;;$i++&#41; &#123;
                        $set&#91;'ips_ip'&#93;=$x->DataGetIPAddress&#40;&#41;;
                        $set&#91;'zone_name'&#93;=$x->DataGetString&#40;&#41;;
                        $ret&#91;'free_ips'&#93;&#91;&#93;=$set;
                   &#125;
            &#125;
            return $ret;
а вот, что я нашел в новом xml/api.xml
(добавилась маска)

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

  <function name="rpcf_get_free_ips_for_house" id="0x15101">
    <input>
      <integer name="house_id" />
    </input>
    <output>
      <integer name="ips_size" />
      <for name="i" from="0" count="ips_size">
        <ip_address name="ips_ip" array_index="i" />
        <integer name="mask" array_index="i" />
        <string name="zone_name" array_index="i" />
      </for>
      <string name="error" />
    </output>
  </function>
Не долго думая я решил подправить старую функцию на php и выглядеть она стала так:

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

   function rpcf_get_free_ips_for_house&#40;$house_id&#41; &#123; //0x15101
            $ret=array&#40;&#41;;
            if &#40;!$this->connection->urfa_call&#40;0x15101&#41;&#41; &#123;
                print "Error calling function ". __FUNCTION__ ."\n";
                return FALSE;
            &#125;
            $packet = $this->connection->getPacket&#40;&#41;;
            $packet->DataSetInt&#40;$house_id&#41;;
            $this->connection->urfa_send_param&#40;$packet&#41;;
            if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41;&#123;
                   $ret&#91;'ips_size'&#93;=$x->DataGetInt&#40;&#41;;
                   for &#40;$i=0;$i<$ret&#91;'ips_size'&#93;;$i++&#41; &#123;
                        $set&#91;'ips_ip'&#93;=$x->DataGetIPAddress&#40;&#41;;
                        $set&#91;'mask'&#93;=$x->DataGetInt&#40;&#41;;
                        $set&#91;'zone_name'&#93;=$x->DataGetString&#40;&#41;;
                        $ret&#91;'free_ips'&#93;&#91;&#93;=$set;

                   &#125;
            &#125;
            return $ret;
    &#125;
И вроде бы почти правильно работает, но криво
получается вот такая байда:

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

Array &#40; &#91;ips_size&#93; => 30 &#91;free_ips&#93; => Array &#40; &#91;0&#93; => Array &#40; &#91;ips_ip&#93; => 4.172.16.0 &#91;mask&#93; => 32 &#91;zone_name&#93; => ННГАСУ &#41; &#91;1&#93; => Array &#40; &#91;ips_ip&#93; => 4.172.16.0 &#91;mask&#93; => 32 &#91;zone_name&#93; => ННГАСУ &#41; &#91;2&#93; => Array &#40; &#91;ips_ip&#93; => 4.172.16.0 &#91;mask&#93; => 32 &#91;zone_name&#93; => ННГАСУ &#41; &#91;3&#93; => Array &#40; &#91;ips_ip&#93; => 4.172.16.0 &#91;mask&#93; => 32 &#91;zone_name&#93; => ННГАСУ &#41;
хотя должны получаться адреса типа 172.16.0.152 172.16.0.153 172.16.0.154 и так далее...
как-то криво преобразует. последний октет пропал, а в начале добавилась 4-ка у всех адресов.
Соответственно залез в DataGetIPAddress()

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

    function DataGetIPAddress&#40;&#41;
    &#123;
                $num = $this->iterator;
                $this->iterator++;
                return long2ip&#40;$this->bin2int&#40;$this->data&#91;$num&#93;&#41; & 0xFFFFFFFF &#41;;
    &#125;
поэкспеременировав слегка понял что long2ip работает правильно, но она уже получает неверные значения....
Подскажите пожалуйста куда копнуть? Может быть гуру смогут подправить код? у меня не хватает ума совсем )

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

Сообщение ds » Вс дек 01, 2013 19:41

<ip_address name="ips_ip" array_index="i" />

Видимо тут поменяли формат для поддержки ipv6. Как минимум увеличили длину поля. Если будет время, попробую поковырять.

drag0mir
Сообщения: 64
Зарегистрирован: Сб ноя 24, 2007 13:46
Откуда: Нижний Новгород

Сообщение drag0mir » Вс дек 01, 2013 23:21

пока что обошел эту функцию кучей кривого кода ))

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

<?php
################## Определяем свободные ip-адреса в зонах ########################

$ip_zone_query = mysql_query&#40;"SELECT id,ip_zone_id,connect_date,post_code,country,region,city,street,number,building,additional_ip_zones_key FROM houses WHERE id='&#123;$user&#91;'house_id'&#93;&#125;'"&#41;;
$user_ip&#91;'ip_zone'&#93;&#91;&#93; = mysql_result&#40;$ip_zone_query,0,"ip_zone_id"&#41;;
$user_ip&#91;'house_key'&#93; = mysql_result&#40;$ip_zone_query,0,"additional_ip_zones_key"&#41;;
$name_ip_zone_query = mysql_query&#40;"SELECT name FROM ip_zones WHERE id='&#123;$user_ip&#91;'ip_zone'&#93;&#91;0&#93;&#125;'"&#41;;
$user_ip&#91;'name_ip_zone'&#93;&#91;&#93; = mysql_result&#40;$name_ip_zone_query,0,"name"&#41;;

$additional_ip_zone_query = mysql_query&#40;"SELECT ip_zone_id FROM additional_ip_zones2houses WHERE house_key='&#123;$user_ip&#91;'house_key'&#93;&#125;'"&#41;;
$y_ip_zone = mysql_numrows&#40;$additional_ip_zone_query&#41;;

$detail_ip_zone_query = mysql_query&#40;"SELECT net,ext_net,mask,ext_mask,gateway,ext_gateway,ip_type FROM ip_zones_detail WHERE ip_zone_id='&#123;$user_ip&#91;'ip_zone'&#93;&#91;0&#93;&#125;'"&#41;;
$user_ip&#91;'net_ip_zone'&#93;&#91;&#93; = mysql_result&#40;$detail_ip_zone_query,0,"net"&#41;;
$user_ip&#91;'mask_ip_zone'&#93;&#91;&#93; = mysql_result&#40;$detail_ip_zone_query,0,"mask"&#41;;

$ip_groups_query = mysql_query&#40;"SELECT ip,ip_ext,mask,mask_ext,ip_type FROM ip_groups WHERE is_deleted='0' AND &#40;ip_type&256&#41;=0 AND &#40;&#40;&#40;ip&mask&#41;=&#40;&#123;$user_ip&#91;'net_ip_zone'&#93;&#91;0&#93;&#125;&mask&#41; AND &#40;ip_ext&mask_ext&#41;=&#40;0&mask_ext&#41;&#41; OR &#40;&#40;&#40;ip&&#40;&#123;$user_ip&#91;'mask_ip_zone'&#93;&#91;0&#93;&#125;&#41;&#41;=&#40;&#40;&#123;$user_ip&#91;'net_ip_zone'&#93;&#91;0&#93;&#125;&#41;&&#40;&#123;$user_ip&#91;'mask_ip_zone'&#93;&#91;0&#93;&#125;&#41;&#41;&#41; AND &#40;ip_ext&&#40;0&#41;&#41;=&#40;&#40;0&#41;&&#40;0&#41;&#41;&#41;&#41; ORDER by ip"&#41;;
$y_ip_groups = mysql_numrows&#40;$ip_groups_query&#41;;
for &#40;$j = 0; $j < $y_ip_groups; $j++&#41;&#123;
  $user_ip&#91;'ip_ip_groups'&#93;&#91;0&#93;&#91;&#93; = mysql_result&#40;$ip_groups_query,$j,"ip"&#41;;
&#125;

// Формируем массив из возможных ip-адресов в зоне
$count_hosts&#91;0&#93;=$user_ip&#91;'mask_ip_zone'&#93;&#91;0&#93;*-1;
for &#40;$k = 1; $k < $count_hosts&#91;0&#93;; $k++&#41;&#123;
  $ip_zone_hosts&#91;0&#93;&#91;&#93;=$user_ip&#91;'net_ip_zone'&#93;&#91;0&#93;+$k;
&#125;
// Сравниваем массив из возможных ip с массивом из занятых
$diff&#91;0&#93; = array_diff&#40;$ip_zone_hosts&#91;0&#93;,$user_ip&#91;'ip_ip_groups'&#93;&#91;0&#93;&#41;;
$diff_len&#91;0&#93; = count&#40;$diff&#91;0&#93;&#41;;

$free_ip&#91;0&#93;=current&#40;$diff&#91;0&#93;&#41;;

for &#40;$h = 0; $h < $y_ip_zone; $h++&#41;&#123;  
  $user_ip&#91;'ip_zone'&#93;&#91;&#93; = mysql_result&#40;$additional_ip_zone_query,$h,"ip_zone_id"&#41;;

  $name_ip_zone_query = mysql_query&#40;"SELECT name FROM ip_zones WHERE id='&#123;$user_ip&#91;'ip_zone'&#93;&#91;$h+1&#93;&#125;'"&#41;;
  $user_ip&#91;'name_ip_zone'&#93;&#91;&#93; = mysql_result&#40;$name_ip_zone_query,0,"name"&#41;;

  $detail_ip_zone_query = mysql_query&#40;"SELECT net,ext_net,mask,ext_mask,gateway,ext_gateway,ip_type FROM ip_zones_detail WHERE ip_zone_id='&#123;$user_ip&#91;'ip_zone'&#93;&#91;$h+1&#93;&#125;'"&#41;;
  $user_ip&#91;'net_ip_zone'&#93;&#91;&#93; = mysql_result&#40;$detail_ip_zone_query,0,"net"&#41;;
  $user_ip&#91;'mask_ip_zone'&#93;&#91;&#93; = mysql_result&#40;$detail_ip_zone_query,0,"mask"&#41;;

  $ip_groups_query = mysql_query&#40;"SELECT ip,ip_ext,inet_ntoa&#40;mask&0xffffffff&#41; as mask,mask_ext,ip_type FROM ip_groups WHERE is_deleted='0' AND &#40;ip_type&256&#41;=0 AND &#40;&#40;&#40;ip&mask&#41;=&#40;&#123;$user_ip&#91;'net_ip_zone'&#93;&#91;$h+1&#93;&#125;&mask&#41; AND &#40;ip_ext&mask_ext&#41;=&#40;0&mask_ext&#41;&#41; OR &#40;&#40;&#40;ip&&#40;&#123;$user_ip&#91;'mask_ip_zone'&#93;&#91;$h+1&#93;&#125;&#41;&#41;=&#40;&#40;&#123;$user_ip&#91;'net_ip_zone'&#93;&#91;$h+1&#93;&#125;&#41;&&#40;&#123;$user_ip&#91;'mask_ip_zone'&#93;&#91;$h+1&#93;&#125;&#41;&#41;&#41; AND &#40;ip_ext&&#40;0&#41;&#41;=&#40;&#40;0&#41;&&#40;0&#41;&#41;&#41;&#41; ORDER by ip"&#41;;
  $y_ip_groups = mysql_numrows&#40;$ip_groups_query&#41;;
  for &#40;$j = 0; $j < $y_ip_groups; $j++&#41;&#123;
    $user_ip&#91;'ip_ip_groups'&#93;&#91;$h+1&#93;&#91;&#93; = mysql_result&#40;$ip_groups_query,$j,"ip"&#41;;
  &#125;

  // Формируем массив из возможных ip-адресов в зоне
  $count_hosts&#91;$h+1&#93;=$user_ip&#91;'mask_ip_zone'&#93;&#91;$h+1&#93;*-1;
  for &#40;$m = 1; $m < $count_hosts&#91;$h+1&#93;; $m++&#41;&#123;
    $ip_zone_hosts&#91;$h+1&#93;&#91;&#93;=$user_ip&#91;'net_ip_zone'&#93;&#91;$h+1&#93;+$m;
  &#125;
  // Сравниваем массив из возможных ip с массивом из занятых
  $diff&#91;$h+1&#93; = array_diff&#40;$ip_zone_hosts&#91;$h+1&#93;,$user_ip&#91;'ip_ip_groups'&#93;&#91;$h+1&#93;&#41;;
  $diff_len&#91;$h+1&#93; = count&#40;$diff&#91;$h+1&#93;&#41;;

  $free_ip&#91;$h+1&#93;=current&#40;$diff&#91;$h+1&#93;&#41;;
&#125;

echo "IP&#58;<br><select name='ip' size='1'> ";
$count_free_ip=count&#40;$free_ip&#41;;
for &#40;$ind = 0; $ind < $count_free_ip; $ind++&#41;&#123;
  $ip = long2ip&#40;$free_ip&#91;$ind&#93;&#41;." ".$user_ip&#91;'name_ip_zone'&#93;&#91;$ind&#93;;
  echo "<option value='$ip'> $ip </option>";
&#125;
echo "</select><br>";

##################################################################################

?>

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

Сообщение ds » Пн дек 02, 2013 20:43

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

    function DataGetIP46Address&#40;&#41;
    &#123;
                $ret = array&#40;&#41;;
                $num = $this->iterator;
                $this->iterator++;
                $type = unpack&#40;"C",$this->data&#91;$num&#93;&#41;;
                $rawStr="";
                for&#40;$i = 1; $i <= 4; $i++&#41; &#123;
                    $j = unpack&#40;"C",$this->data&#91;$num&#93;&#91;$i&#93;&#41;;
                    $rawStr .= chr&#40;$j&#91;1&#93;&#41;;
                &#125;
                inet_ntop&#40;$rawStr&#41;;
                $ret&#91;'addr'&#93; = inet_ntop&#40;$rawStr&#41;;
                $ret&#91;'type'&#93; = $type&#91;1&#93;;
                return $ret;
    &#125;
>rpcf_get_free_ips_for_house заработала вроде. Пока ipv4. Возможно и v6 тоже, не проверял.

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

Оффтоп:

Сообщение ds » Вт дек 03, 2013 00:27

Профиль свой могу посмотреть profile.php?mode=viewprofile&u=1702, а свои темы не вижу search.php?search_author=ds.
Почините пожалуйста :)

drag0mir
Сообщения: 64
Зарегистрирован: Сб ноя 24, 2007 13:46
Откуда: Нижний Новгород

Сообщение drag0mir » Вт дек 03, 2013 11:58

ds писал(а):

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

    function DataGetIP46Address&#40;&#41;
    &#123;
                $ret = array&#40;&#41;;
                $num = $this->iterator;
                $this->iterator++;
                $type = unpack&#40;"C",$this->data&#91;$num&#93;&#41;;
                $rawStr="";
                for&#40;$i = 1; $i <= 4; $i++&#41; &#123;
                    $j = unpack&#40;"C",$this->data&#91;$num&#93;&#91;$i&#93;&#41;;
                    $rawStr .= chr&#40;$j&#91;1&#93;&#41;;
                &#125;
                inet_ntop&#40;$rawStr&#41;;
                $ret&#91;'addr'&#93; = inet_ntop&#40;$rawStr&#41;;
                $ret&#91;'type'&#93; = $type&#91;1&#93;;
                return $ret;
    &#125;
>rpcf_get_free_ips_for_house заработала вроде. Пока ipv4. Возможно и v6 тоже, не проверял.

вот это я понимаю! :) вот это мозг! :)

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

Сообщение ds » Вт дек 03, 2013 12:12

drag0mir писал(а):
вместе с этой функцией?

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

  function rpcf_get_free_ips_for_house&#40;$house_id&#41; &#123; //0x15101                                                                                                                                              
            $ret=array&#40;&#41;;                                                                                                                                                                                    
            if &#40;!$this->connection->urfa_call&#40;0x15101&#41;&#41; &#123;                                                                                                                                                    
                print "Error calling function ". __FUNCTION__ ."\n";                                                                                                                                         
                return FALSE;                                                                                                                                                                                
            &#125;                                                                                                                                                                                                
            $packet = $this->connection->getPacket&#40;&#41;;                                                                                                                                                        
            $packet->DataSetInt&#40;$house_id&#41;;                                                                                                                                                                  
            $this->connection->urfa_send_param&#40;$packet&#41;;                                                                                                                                                     
            if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41;&#123;                                                                                                                                                    
                   $ret&#91;'ips_size'&#93;=$x->DataGetInt&#40;&#41;;                                                                                                                                                        
                   for &#40;$i=0;$i<$ret&#91;'ips_size'&#93;;$i++&#41; &#123;                                                                                                                                                     
                        $set&#91;'ips_ip'&#93;=$x->DataGetIP46Address&#40;&#41;;                                                                                                                                             
                        $set&#91;'mask'&#93;=$x->DataGetInt&#40;&#41;;                                                                                                                                                       
                        $set&#91;'zone_name'&#93;=$x->DataGetString&#40;&#41;;                                                                                                                                               
                        $ret&#91;'free_ips'&#93;&#91;&#93;=$set;                                                                                                                                                             
                   &#125;                                                                                                                                                                                         
            &#125;                                                                                                                                                                                                
            return $ret;                                                                                                                                                                                     
    &#125; 

у меня что-то выдает 0.0.0.0 в результате из каждой ip-зоны...
Да, всё так. php 5.2.13 x86

Первый inet_ntop($rawStr) нужно убрать, он бессмыссленный забыл почистить.

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

Array
&#40;
    &#91;ips_size&#93; => 2
    &#91;free_ips&#93; => Array
        &#40;
            &#91;0&#93; => Array
                &#40;
                    &#91;ips_ip&#93; => Array
                        &#40;
                            &#91;addr&#93; => 172.16.34.238
                            &#91;type&#93; => 4
                        &#41;

                    &#91;mask&#93; => 32
                    &#91;zone_name&#93; => Зона 1
                &#41;

            &#91;1&#93; => Array
                &#40;
                    &#91;ips_ip&#93; => Array
                        &#40;
                            &#91;addr&#93; => 172.16.35.31
                            &#91;type&#93; => 4
                        &#41;

                    &#91;mask&#93; => 32
                    &#91;zone_name&#93; =>  Зона 1
                &#41;
       &#41;
&#41;

drag0mir
Сообщения: 64
Зарегистрирован: Сб ноя 24, 2007 13:46
Откуда: Нижний Новгород

Сообщение drag0mir » Вт дек 03, 2013 12:25

не успел удалить прошлое сообщение просто ))
всё работает! это я просто запарил!
Спасибо большое!
Зря писал свой код кривой пол дня )

drag0mir
Сообщения: 64
Зарегистрирован: Сб ноя 24, 2007 13:46
Откуда: Нижний Новгород

Сообщение drag0mir » Ср дек 04, 2013 00:40

ctyz писал(а):в биллинге UTM5 update3 удалили старые функции rpcf_edit_ip_slink_ex земенив их новыми

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

rpcf_edit_iptraffic_service_link_ipv6 //0x292d
проблема что как-то по новому стал передаватся ip адресс в ядро, помогите решить или подскажите где посмотреть.

может кто знающий поможет, как праильно переделать передачу в ядро
уверен что их удалили?
у меня update3
вот вырезка из api.xml

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

  <function name="rpcf_edit_ip_slink_ex" id="0x2929">
    <input>
      <integer name="slink_id" default="0"/>
      <integer name="start_date" default="now&#40;&#41;"/>
      <integer name="expire_date" default="max_time&#40;&#41;"/>

      <integer name="ip_groups_count" default="size&#40;ip_address&#41;"/>
      <for name="i" from="0" count="size&#40;ip_address&#41;">
        <integer name="ip_address" array_index="i"/>
        <integer name="mask" array_index="i"/>
        <string name="mac" array_index="i" default=""/>
        <string name="iptraffic_login" array_index="i" default=""/>
        <string name="iptraffic_allowed_cid" array_index="i" default=""/>
        <string name="iptraffic_password" array_index="i" default=""/>
        <integer name="ip_not_vpn" array_index="i" default="0"/>
        <integer name="dont_use_fw" array_index="i" default="0"/>
        <integer name="router_id" array_index="i" default="0"/>
      </for>
      <integer name="quotas_count" default="size&#40;quota&#41;"/>
      <for name="i" from="0" count="size&#40;quota&#41;">
        <integer name="tclass_id" array_index="i"/>
        <long name="quota" array_index="i"/>
      </for>
    </input>
    <output>
      <integer name="slink_id" />
    </output>
  </function>

w0Lf
Сообщения: 13
Зарегистрирован: Пн окт 01, 2012 08:38
Откуда: 127.0.0.1

Сообщение w0Lf » Вт дек 10, 2013 15:35

биллинг 5.3
не работают вызовы юзер ф-ций. Помогите разобраться.

Лог биллинга:

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

Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 RPCServer&#58; Client connecting&#58; &#91;127.0.0.1&#93;&#58;59610
Dec 10 16&#58;32&#58;01  Info  &#58; f1cfdb70 RPC2Connection&#58; Connection from&#58; &#91;127.0.0.1&#93;&#58;59610 new Session Key <c109a752c910a679f81492e90b83e078>
Dec 10 16&#58;32&#58;01  Info  &#58; f1cfdb70 RPCConn&#58; Card user <rogakopyta@127.0.0.1> is connecting
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 ModTop&#58; connection <8> created
Dec 10 16&#58;32&#58;01  Info  &#58; f1cfdb70 RPCConn&#91;SSL&#93;<rogakopyta@127.0.0.1>&#58; Access granted to &#91;SSL&#93;<rogakopyta@127.0.0.1> &#40;UID&#58; 2&#41;
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 RPCConn&#91;SSL&#93;<rogakopyta@127.0.0.1>&#58; SSL type requested&#58; SSLv3&#40;2&#41;
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 RPCConn&#91;SSL&#93;<rogakopyta@127.0.0.1>&#58; Call&#58; 0xffffbffa &#40;__rpcs_get_user_info&#41;
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 RPCConn&#91;SSL&#93;<rogakopyta@127.0.0.1>&#58; Real Call&#58; 0xffffbffa &#40;__rpcs_get_user_info&#41;
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 DBConnectionPool&#58; DBConnectioManager pool &#91;Default&#93;&#58; connection is popped
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 DBConnection_mysql&#58; <0xf6831018> SQL SELECT query&#58; SELECT login, password, basic_account, create_date, last_change_date,who_create, who_change, is_juridical, full_name, juridical_address, actual_address,work_telephone, home_telephone, mobile_telephone, web_page, icq_number, tax_number,kpp_number, bank_id, bank_account, comments, email, house_id, flat_number, entrance,floor, district, building, passport, personal_manager, connect_date, is_send_invoice,advance_payment FROM users WHERE id='2' AND is_deleted=0
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 DBConnection_mysql&#58; <0xf6831018> SQL SELECT query&#58; 1 rows in 0 sec
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 DBConnection_mysql&#58; <0xf6831018> SQL SELECT query&#58; SELECT group_id FROM users_groups_link WHERE user_id='2'
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 DBConnection_mysql&#58; <0xf6831018> SQL SELECT query&#58; 1 rows in 0 sec
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 DBConnection_mysql&#58; <0xf6831018> SQL SELECT query&#58; SELECT paramid, value FROM user_additional_params WHERE userid='2'
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 DBConnection_mysql&#58; <0xf6831018> SQL SELECT query&#58; 3 rows in 0 sec
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 DBConnectionPool&#58; DBConnectionManager pool &#91;Default&#93;&#58; connection is pushed back
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 RPCConn&#91;SSL&#93;<rogakopyta@127.0.0.1>&#58; Call 0xffffbffa &#40;__rpcs_get_user_info&#41; finished in 0.00 sec
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 RPCConn&#91;SSL&#93;<rogakopyta@127.0.0.1>&#58; Stream cleared
Dec 10 16&#58;32&#58;01  Warn  &#58; f1cfdb70 RPCConn&#91;SSL&#93;<rogakopyta@127.0.0.1>&#58; Session closed
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 RPC2Connection&#58; Session Key <c109a752c910a679f81492e90b83e078> stored for UID 2 from <127.0.0.1>
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 RPCConn&#91;SSL&#93;<rogakopyta@127.0.0.1>&#58; SSL cleared
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 ModTop&#58; connection <8> closed
Dec 10 16&#58;32&#58;01 ?Debug &#58; f1cfdb70 RPCConn&#91;SSL&#93;<rogakopyta@127.0.0.1>&#58; Session closed...
вызов из php:

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

$urfa = new URFAClient_User5&#40;'rogakopyta', '12345', '127.0.0.1', '11758', true, false&#41;;
$r = $urfa->rpcf_user5_get_user_info&#40;&#41;;
var_dump&#40;$r&#41;;
результат php:

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

Error calling function rpcf_user5_get_user_info
bool&#40;false&#41;

drag0mir
Сообщения: 64
Зарегистрирован: Сб ноя 24, 2007 13:46
Откуда: Нижний Новгород

Сообщение drag0mir » Вт дек 10, 2013 17:01

насколько я знаю с вызовом юзерских функций всё сложнее.
нужно сначала обратиться к ядру под системным пользователем, а потом уже под обыкновенным пользователем.

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

Сообщение ds » Ср дек 11, 2013 07:09

drag0mir писал(а):насколько я знаю с вызовом юзерских функций всё сложнее.
нужно сначала обратиться к ядру под системным пользователем, а потом уже под обыкновенным пользователем.
Не надо под системным пользователем ничего делать. Вызов там корректный.
Проверил только что в 5.3, всё работает. Эта ошибка получиласть только при неправильном пароле.

Сама функция:

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

        function rpcf_user5_get_user_info&#40;&#41; &#123; //-0x4006
                $ret=array&#40;&#41;;
                if &#40;!$this->connection->urfa_call&#40;-0x4006&#41;&#41; &#123;
                        print "Error calling function ". __FUNCTION__ ."\n";
                        return FALSE;
                &#125;
                if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41; &#123;
                        $ret&#91;'user_id'&#93; = $x->DataGetInt&#40;&#41;;
                        $ret&#91;'login'&#93; = $x->DataGetString&#40;&#41;;
                        $ret&#91;'basic_account'&#93; = $x->DataGetInt&#40;&#41;;
                        $ret&#91;'balance'&#93; = $x->DataGetDouble&#40;&#41;;
                        $ret&#91;'credit'&#93; = $x->DataGetDouble&#40;&#41;;
                        $ret&#91;'is_blocked'&#93; = $x->DataGetInt&#40;&#41;;
                        $ret&#91;'create_date'&#93; = $x->DataGetInt&#40;&#41;;
                        $ret&#91;'last_change_date'&#93; = $x->DataGetInt&#40;&#41;;
                        $ret&#91;'who_create'&#93; = $x->DataGetInt&#40;&#41;;
                        $ret&#91;'who_change'&#93; = $x->DataGetInt&#40;&#41;;
                        $ret&#91;'is_juridical'&#93; = $x->DataGetInt&#40;&#41;;
                        $ret&#91;'full_name'&#93; = $x->DataGetString&#40;&#41;;
                        $ret&#91;'juridical_address'&#93; = $x->DataGetString&#40;&#41;;
                        $ret&#91;'actual_address'&#93; = $x->DataGetString&#40;&#41;;
                        $ret&#91;'work_telephone'&#93; = $x->DataGetString&#40;&#41;;
                        $ret&#91;'home_telephone'&#93; = $x->DataGetString&#40;&#41;;
                        $ret&#91;'mobile_telephone'&#93; = $x->DataGetString&#40;&#41;;
                        $ret&#91;'web_page'&#93; = $x->DataGetString&#40;&#41;;
                        $ret&#91;'icq_number'&#93; = $x->DataGetString&#40;&#41;;
                        $ret&#91;'tax_number'&#93; = $x->DataGetString&#40;&#41;;
                        $ret&#91;'kpp_number'&#93; = $x->DataGetString&#40;&#41;;
                        $ret&#91;'bank_id'&#93; = $x->DataGetInt&#40;&#41;;
                        $ret&#91;'bank_account'&#93; = $x->DataGetString&#40;&#41;;
                        $ret&#91;'int_status'&#93; = $x->DataGetInt&#40;&#41;;
                        $ret&#91;'vat_rate'&#93; = $x->DataGetDouble&#40;&#41;;
                &#125;
                return $ret;
        &#125;


w0Lf
Сообщения: 13
Зарегистрирован: Пн окт 01, 2012 08:38
Откуда: 127.0.0.1

Сообщение w0Lf » Ср дек 11, 2013 09:03

логин и пароль верные.
Если использовать урфу от нетапа, то юзер ф-ции нормально вызываются, но в ней не удается соединиться через системных юзеров, для юзанья админских ф-ций.

Поделитесь вашей урфой, проверю у себя.

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

Сообщение ds » Ср дек 11, 2013 10:22

w0Lf писал(а):логин и пароль верные.
Если использовать урфу от нетапа, то юзер ф-ции нормально вызываются, но в ней не удается соединиться через системных юзеров, для юзанья админских ф-ций.

Поделитесь вашей урфой, проверю у себя.
Напишите в почту. Перешлю.

drag0mir
Сообщения: 64
Зарегистрирован: Сб ноя 24, 2007 13:46
Откуда: Нижний Новгород

Сообщение drag0mir » Чт дек 12, 2013 12:51

w0Lf писал(а):логин и пароль верные.
Если использовать урфу от нетапа, то юзер ф-ции нормально вызываются, но в ней не удается соединиться через системных юзеров, для юзанья админских ф-ций.

Поделитесь вашей урфой, проверю у себя.
я на эту тему нашел в конфиге вот такой параметр

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

## plain_user
##  Description&#58; "yes" is set if for authorization it is used a login of a
##   common user. If 'yes' is set, only user functions are allowed to be called
##   &#40;functions with negative identifiers&#41;, in other case only system ones
##   &#40;with positive identifiers&#41;.
##  Default value&#58; unset

Ответить