Народ, гуру, помогите пожалуйста!
Обновился до 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 ($i=0;$i<$ret['ips_size'];$i++) {
$set['ips_ip']=$x->DataGetIPAddress();
$set['zone_name']=$x->DataGetString();
$ret['free_ips'][]=$set;
}
}
return $ret;
(добавилась маска)
Код: Выделить всё
<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>
Код: Выделить всё
function rpcf_get_free_ips_for_house($house_id) { //0x15101
$ret=array();
if (!$this->connection->urfa_call(0x15101)) {
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 ($i=0;$i<$ret['ips_size'];$i++) {
$set['ips_ip']=$x->DataGetIPAddress();
$set['mask']=$x->DataGetInt();
$set['zone_name']=$x->DataGetString();
$ret['free_ips'][]=$set;
}
}
return $ret;
}
получается вот такая байда:
Код: Выделить всё
Array ( [ips_size] => 30 [free_ips] => Array ( [0] => Array ( [ips_ip] => 4.172.16.0 [mask] => 32 [zone_name] => ННГАСУ ) [1] => Array ( [ips_ip] => 4.172.16.0 [mask] => 32 [zone_name] => ННГАСУ ) [2] => Array ( [ips_ip] => 4.172.16.0 [mask] => 32 [zone_name] => ННГАСУ ) [3] => Array ( [ips_ip] => 4.172.16.0 [mask] => 32 [zone_name] => ННГАСУ )
как-то криво преобразует. последний октет пропал, а в начале добавилась 4-ка у всех адресов.
Соответственно залез в DataGetIPAddress()
Код: Выделить всё
function DataGetIPAddress()
{
$num = $this->iterator;
$this->iterator++;
return long2ip($this->bin2int($this->data[$num]) & 0xFFFFFFFF );
}
Подскажите пожалуйста куда копнуть? Может быть гуру смогут подправить код? у меня не хватает ума совсем )