За последние 24 часа нас посетили 55916 программистов и 1693 робота. Сейчас ищут 1037 программистов ...

Пните ногой в нужном направлении. . .

Тема в разделе "PHP для новичков", создана пользователем BlackJack, 10 мар 2009.

  1. BlackJack

    BlackJack Активный пользователь

    С нами с:
    30 янв 2009
    Сообщения:
    263
    Симпатии:
    4
    Адрес:
    Воскресенск
    я ZAPUTALSO (((
     
  2. BlackJack

    BlackJack Активный пользователь

    С нами с:
    30 янв 2009
    Сообщения:
    263
    Симпатии:
    4
    Адрес:
    Воскресенск
    в файле packet ваще неразбериха неподвластная мне (((
    PHP:
    1. <?php
    2.  
    3. class Packet {
    4.     var $version = 35;
    5.     var $code;
    6.     var $len;
    7.     var $iterator = 0;
    8.     var $attr=array();
    9.     var $sock = FALSE;
    10.     var $data=array();
    11.     function __construct($socket=FALSE) {
    12.     $this->clean();
    13.     if ($socket) {
    14.             $this->sock=$socket;
    15.         $this->read($socket);
    16.     }
    17.     }
    18.  
    19.     function read($socket=FALSE) {
    20.     if ($socket)
    21.         $this->sock=$socket;
    22.         $this->code = ord(fread($this->sock, 1));
    23.         if ($this->version != ord(fread($this->sock, 1))) {
    24.             print "Error code ".ord(fread($this->sock, 1))."\n";
    25.             exit();
    26.         } else {
    27.             list(,$this->len) = unpack("n",fread($this->sock, 2));
    28.             $this->parse_packet_data();
    29.         }
    30.     }
    31.  
    32.  
    33.     function parse_packet_data() {
    34.     $tmp_len=4;
    35.     while($tmp_len < $this->len) {
    36.             list(,$code) = unpack("s",fread($this->sock, 2));
    37.         list(,$length) = unpack("n",fread($this->sock, 2));
    38.             $tmp_len+=$length;
    39.         if ($length==4) {
    40.         $data=NULL;
    41.         } else {
    42.         $data = fread($this->sock, $length-4);
    43.         }
    44.         if ($code==5) {
    45.         $this->data[]=$data;
    46.         } else {
    47.         $this->attr[$code]['data']=$data;
    48.         $this->attr[$code]['len']=$length;
    49.         }
    50.     }
    51. //  print "done read packet\n";
    52.     }
    53.  
    54.     function clean() {
    55.     $this->code=0;
    56.     $this->len=4;
    57.     $this->iterator = 0;
    58.     $this->attr = array();
    59.     $this->data = array();
    60.     }
    61.  
    62.     function AttrSetString($str,$code) {
    63.     $x = array();
    64.     $this->attr[$code]['data']=$str;
    65.     $this->attr[$code]['len']=strlen($str)+4;
    66.     $this->len += strlen($str)+4;
    67.     }
    68.    
    69.     function AttrSetInt($attr,$code) {
    70.     $this->attr[$code]['data']=pack("N",$attr);
    71.     $this->attr[$code]['len']=8;
    72.     $this->len += 8;
    73.     }
    74.  
    75.  
    76.  
    77.     function AttrGetInt($code) {
    78.     if (isset($this->attr[$code]['data'])) {
    79.             $x = unpack("N",$this->attr[$code]['data']);
    80.         return $x[1];
    81.     } else return FALSE;
    82.     }
    83.  
    84.  
    85.     function DataSetInt($param) {
    86.     $this->data[]=pack("N",$param);
    87.     $this->len += 8;
    88.     }
    89.     function DataGetInt() {
    90.     $num = $this->iterator;
    91.     $this->iterator++;
    92.     return bin2int($this->data[$num]);
    93.     }
    94.  
    95.     function DataGetLong() {
    96.     $num = $this->iterator;
    97.     $this->iterator++;
    98.     return bin2long($this->data[$num]);
    99.     }
    100.  
    101.     function DataGetIPAddress() {
    102.     $num = $this->iterator;
    103.     $this->iterator++;
    104.     return long2ip(bin2int($this->data[$num])& 0xFFFFFFFF);
    105.     }
    106.  
    107.     function DataSetIPAddress($param) {
    108.     $this->data[]=pack("N",ip2long($param));
    109.     $this->len+=8;
    110.     }
    111.  
    112.     function DataGetDouble() {
    113.     $num = $this->iterator;
    114.     $this->iterator++;
    115.     return bin2double($this->data[$num]);
    116.     }
    117.  
    118.     function DataGetString() {
    119.     $num = $this->iterator;
    120.     $this->iterator++;
    121.     return $this->data[$num];
    122.     }
    123.  
    124.     function DataSetString($str) {
    125.     $this->data[]=$str;
    126.     $this->len += strlen($str)+4;
    127.     }
    128.  
    129.  
    130.  
    131.     function write($socket=FALSE) {
    132.     if ($socket)
    133.         $this->sock=$socket;
    134.     fwrite($this->sock,chr($this->code));
    135.     fwrite($this->sock,chr($this->version));
    136.     fwrite($this->sock,pack("n",$this->len));
    137.     foreach ($this->attr as $code => $value) {
    138.         fwrite($this->sock,pack("v",$code));
    139.         fwrite($this->sock,pack("n",$value['len']));
    140.         fwrite($this->sock,$value['data']);
    141.     }
    142.     foreach ($this->data as $code => $value) {
    143.         fwrite($this->sock,pack("v",5));
    144.         fwrite($this->sock,pack("n",strlen($value)+4));
    145.         fwrite($this->sock,$value);
    146.     }
    147.  
    148.     }
    149.  
    150.  
    151.  
    152.  
    153. }
    154.  
    155. ?>
     
  3. ATI

    ATI Активный пользователь

    С нами с:
    3 янв 2008
    Сообщения:
    254
    Симпатии:
    0
    Адрес:
    Москва
    Покажи код, где создаёшь экземпляр этого класса.
     
  4. BlackJack

    BlackJack Активный пользователь

    С нами с:
    30 янв 2009
    Сообщения:
    263
    Симпатии:
    4
    Адрес:
    Воскресенск
    имелось ввиду это? socket.php:
    PHP:
    1. <?php
    2.     require_once 'packet.php';
    3.  
    4. $socket=FALSE;
    5.  
    6. function urfa_connect($address,$port) {
    7.     global $socket;
    8.     $context = stream_context_create(array('ssl'=>array('ciphers'=> "ADH-RC4-MD5",)));
    9.     $address = gethostbyname($address);
    10.     $socket = stream_socket_client("tcp://$address:$port", $errno, $errstr, 30,STREAM_CLIENT_CONNECT, $context);
    11.     if (!$socket) {
    12.     echo "$errstr ($errno)\n";
    13.     }
    14.     return $socket;
    15. }
    16.  
    17.  
    18. function urfa_close() {
    19.     global $socket;
    20.     return stream_socket_shutdown($socket, STREAM_SHUT_WR);
    21. }
    22.  
    23.  
    24.  
    25. function urfa_login($login,$pass,$ssl=TRUE) {
    26.     global $socket;
    27.     $packet = new Packet();
    28.     while (!feof($socket)) {
    29.     $packet->clean();
    30.     $packet->read($socket);
    31.     switch ($packet->code) {
    32.         case 192:
    33.         urfa_auth($packet,$login,$pass,$ssl);
    34.         break;
    35.         case 194:
    36.         $ssl = $packet->AttrGetInt(10);
    37.         if ($ssl)
    38.             ssl_connect($ssl);
    39.         return TRUE;
    40.         case 195:
    41.         return FALSE;
    42.     }
    43.     }
    44. }
    45.  
    46.  
    47. function ssl_connect($ssl) {
    48.     global $socket;
    49.     stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv3_CLIENT);
    50. }
    51.  
    52.  
    53.  
    54. function urfa_call($code) {
    55.     global $socket;
    56.     $packet = new Packet();
    57.     $packet->clean();
    58.     $packet->code=201;
    59.     $packet->AttrSetInt($code,3);
    60.     $packet->write($socket);
    61.     if (!feof($socket)) {
    62.     $packet->clean();
    63.     $packet->read($socket);
    64.     switch ($packet->code) {
    65.         case 200:
    66.         if ($packet->AttrGetInt(3)==$code)
    67.             return TRUE;
    68.         else
    69.             return FALSE;
    70.     }
    71.     }
    72.     unset($packet);
    73. }
    74.  
    75.  
    76. function urfa_auth(&$packet,$uname,$upass,$ssl) {
    77.     if ($ssl==TRUE)
    78.     $ssl=2;
    79.     $digest = $packet->attr[6]['data'];
    80. //    print "Received ".bin2hex($digest)." digest\n";
    81.     $ctx = hash_init('md5');
    82.     hash_update($ctx, $digest);
    83.     hash_update($ctx, $upass);
    84.     $hash = hash_final($ctx,TRUE);
    85. //    print "Generate ".bin2hex($hash)." hash\n";
    86.     $packet->clean();
    87.     $packet->code=193;
    88.     $packet->AttrSetString($uname,2);
    89.     $packet->AttrSetString($digest,8);
    90.     $packet->AttrSetString($hash,9);
    91.     $packet->AttrSetInt($ssl,10);
    92.     $packet->AttrSetInt(2,1);
    93.     $packet->write();
    94. }
    95.  
    96.  
    97. function urfa_get_data($data=FALSE) {
    98.     global $socket;
    99.     $x = array();
    100.     if (!$data) {
    101.     $packet = new Packet();
    102.     if (!feof($socket)) {
    103.         $packet->clean();
    104.         $packet->read($socket);
    105.         switch ($packet->code) {
    106.                 case 200:
    107.                     if ($packet->AttrGetInt(4)) {
    108.             return NULL;
    109.             }
    110.             return $packet;
    111.             break;
    112.         }
    113.     }
    114.     }
    115. }
    116.  
    117.  
    118.  
    119.  
    120. function urfa_send_param($packet) {
    121.     global $socket;
    122.     $packet->code = 200;
    123.     $packet->write($socket);
    124. }
    125.  
    126.  
    127. function bin2int($data) {
    128.     $x = unpack("N",$data);
    129.     return $x[1];
    130. }
    131.  
    132.  
    133.  
    134. function bin2double($data) {
    135.     $x = unpack("d", strrev($data));
    136.     return (double)$x[1];
    137. }
    138.  
    139.  
    140. function bin2long($data) {
    141.    $arr = unpack('N2', $data);
    142.     if (PHP_INT_SIZE == 4) {
    143.       $hi = $arr[1];
    144.       $lo = $arr[2];
    145.       $isNeg = $hi  < 0;
    146.       if ($isNeg) {
    147.         $hi = ~$hi & (int)0xffffffff;
    148.         $lo = ~$lo & (int)0xffffffff;
    149.  
    150.         if ($lo == (int)0xffffffff) {
    151.           $hi++;
    152.           $lo = 0;
    153.         } else {
    154.           $lo++;
    155.         }
    156.       }
    157.       if ($hi & (int)0x80000000) {
    158.         $hi &= (int)0x7fffffff;
    159.         $hi += 0x80000000;
    160.       }
    161.       if ($lo & (int)0x80000000) {
    162.         $lo &= (int)0x7fffffff;
    163.         $lo += 0x80000000;
    164.       }
    165.       $value = bcmul($hi,4294967296);
    166.       $value = bcadd($value,$lo);
    167.       if ($isNeg) {
    168.         $value = bcsub(0,$value);
    169.       }
    170.     } else {
    171.       if ($arr[2] & 0x80000000) {
    172.         $arr[2] = $arr[2] & 0xffffffff;
    173.       }
    174.       if ($arr[1] & 0x80000000) {
    175.         $arr[1] = $arr[1] & 0xffffffff;
    176.         $arr[1] = $arr[1] ^ 0xffffffff;
    177.         $arr[2] = $arr[2] ^ 0xffffffff;
    178.     $arr[2] = $arr[2]-1;
    179. //        $value = 0 - $arr[1]*4294967296 - $arr[2] - 1;
    180.     $value = bcmul($arr[1],4294967296);
    181.     $value = bcsub(0,$value);
    182.     $value = bcsub($value,$arr[2]);
    183.  
    184.       } else {
    185. //        $value = $arr[1]*4294967296 + $arr[2];
    186.     $value = bcmul($arr[1],4294967296);
    187.         $value = bcadd($value,$arr[2]);
    188.       }
    189.     }
    190.     return $value;
    191. }
    192.  
    193. ?>
     
  5. BlackJack

    BlackJack Активный пользователь

    С нами с:
    30 янв 2009
    Сообщения:
    263
    Симпатии:
    4
    Адрес:
    Воскресенск
  6. BlackJack

    BlackJack Активный пользователь

    С нами с:
    30 янв 2009
    Сообщения:
    263
    Симпатии:
    4
    Адрес:
    Воскресенск
    что же я не так делаю то . . . весь запутался блин (((