Интересно почему именно эти цифры

Типы блокировок
Код: Выделить всё
rpcf_add_user
Код: Выделить всё
rpcf_add_account
Код: Выделить всё
@ini_set("display_errors", "1");
error_reporting(E_ALL);
require_once("./URFAClient.php");
echo "<pre>";
$urfa_admin = new URFAClient_Admin("123", "123");
$urfa_user5 = $urfa_admin->getURFAClient_User5("user", "321");
$traffic = $urfa_user5->rpcf_user5_traffic_report(mktime(0,0,0,1,1,2009), date('U'));
print_r ($traffic);
echo "</pre>";
?>
Код: Выделить всё
<function name="rpcf_add_discount_period" id="0x2603">
<input>
<integer name="id" />
<integer name="start" />
<integer name="expire" />
<integer name="periodic_type_t" />
<integer name="cd" />
<integer name="di" />
</input>
<output>
</output>
</function>
Код: Выделить всё
function rpcf_add_discount_period($id,$start,$expire,$periodic_type_t,$cd,$di) { //0x2603
$ret=0;
if (!$this->connection->urfa_call(0x2603)) {
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = $this->connection->getPacket();
$packet->DataSetInt($id);
$packet->DataSetString($start);
$packet->DataSetInt($expire);
$packet->DataSetInt($periodic_type_t);
$packet->DataSetInt($cd);
$packet->DataSetInt($di);
$this->connection->urfa_send_param($packet);
$this->connection->urfa_get_data();
}
Код: Выделить всё
$urfa_admin = new URFAClient_Admin($UTMCore_Login, $UTMCore_Password);
$id = 60719;
$start = 1242504000;
$expire = strtotime("+1 day");
$periodic_type_t = 3;
$cd = 0;
$di = 0;
$urfa_admin->rpcf_add_discount_period($id,$start,$expire,$periodic_type_t,$cd,$di); //0x2603
Код: Выделить всё
?Debug : May 26 13:23:44 RPCConn<web@127.0.0.1>: Call: 0x2603 (rpcf_add_discount_period)
?Debug : May 26 13:23:44 RPCConn<web@127.0.0.1>: Real Call: 0x2603 (rpcf_add_discount_period)
ERROR : May 26 13:23:44 RPCServer@0.0.0.0: Exception in rpcf_add_discount_period: #22
?Debug : May 26 13:23:44 RPCConn<web@127.0.0.1>: Call 0x2603 (rpcf_add_discount_period) finished...
Ну то, что заметил на первый взглядKayfolom писал(а):Какая то проблема с вызовом
Я в тупике. Глянте свежим взглядом, где я накосячил?
Код: Выделить всё
<integer name="start" />
Код: Выделить всё
$packet->DataSetString($start);
Код: Выделить всё
function urfa_call($code)
{
$packet = $this->getPacket();
$packet->clean();
$packet->code = 201;
$packet->AttrSetInt($code, 3);
$packet->write();
if (!feof($this->socket)) {
$packet->clean();
$packet->read();
switch ($packet->code) {
case 200:
if ($packet->AttrGetInt(3) == $code) // Вот здесь!!!!
return true;
else
return false;
}
}
}
Код: Выделить всё
function AttrGetInt($code)
{
if (isset($this->attr[$code]['data'])) {
$x = unpack("N", $this->attr[$code]['data']);
return $x[1];
} else {
return FALSE;
}
}
N не зависит от машины.h Hex-строка, сначала нижний разряд
H Hex-строка, сначала высший разряд
c знаковый char
C беззнаковый char
s знаковый short (всегда 16 бит, машинный байтовый порядок)
S беззнаковый short (всегда 16 бит, машинный байтовый порядок)
n беззнаковый short (всегда 16 бит, байтовый порядок big endian)
v беззнаковый short (всегда 16 бит, байтовый порядок little endian)
i signed integer (машиннозависимый размер и байтовый порядок)
I беззнаковый integer (машиннозависимый размер и байтовый порядок)
l signed long (всегда 32 бита, машинный байтовый порядок)
L беззнаковый long (всегда 32 бита, машинный байтовый порядок)
N беззнаковый long (всегда 32 бита, байтовый порядок big endian)
V беззнаковый long (всегда 32 бита, байтовый порядок little endian)
f float (машиннозависимый размер и представление)
d double (машиннозависимый размер и представление)
x NUL байт
X обратно на один байт
@ NUL-заполнение до абсолютной позиции
Код: Выделить всё
function AttrGetInt($code)
{
if (isset($this->attr[$code]['data'])) {
$x = unpack("N", $this->attr[$code]['data']);
echo bin2hex($this->attr[$code]['data']);
return $x[1];
} else {
return FALSE;
}
}
Я проверю в понедельник. На Fedora 8 64bit работало вроде.Kayfolom писал(а):Настраиваю новый сервак. Софт - копия рабочего (билинг 005, php 5.1.6), разница разве что в битности - новая операционка 64бит (CentOS 5.3).
Функции Admin в urfaphp работают преврсходно. А вот функции user5 выдают "Error calling function". После глубокого копания выяснил, что функции всеже корректно работают и возвращают правильные значения. Затык в следующем коде:Если закоментить проверку if ($packet->AttrGetInt(3) == $code), то все работает отлично.Код: Выделить всё
function urfa_call($code) { $packet = $this->getPacket(); $packet->clean(); $packet->code = 201; $packet->AttrSetInt($code, 3); $packet->write(); if (!feof($this->socket)) { $packet->clean(); $packet->read(); switch ($packet->code) { case 200: if ($packet->AttrGetInt(3) == $code) // Вот здесь!!!! return true; else return false; } } }
Может я как то криво php собрал?
Но функция AttrGetInt вроде ничего экстраординарного не использует:В чем может быть дело?Код: Выделить всё
function AttrGetInt($code) { if (isset($this->attr[$code]['data'])) { $x = unpack("N", $this->attr[$code]['data']); return $x[1]; } else { return FALSE; } }