/zklib/zkuser.php
PHP | 269 lines | 194 code | 40 blank | 35 comment | 11 complexity | 357ca3a8cd7622cece063d68c12da0c5 MD5 | raw file
- <?php
- function getSizeUser($self) {
- /*Checks a returned packet to see if it returned CMD_PREPARE_DATA,
- indicating that data packets are to be sent
- Returns the amount of bytes that are going to be sent*/
- $u = unpack('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6/H2h7/H2h8', substr( $self->data_recv, 0, 8 ) );
- $command = hexdec( $u['h2'].$u['h1'] );
-
- if ( $command == CMD_PREPARE_DATA ) {
- $u = unpack('H2h1/H2h2/H2h3/H2h4', substr( $self->data_recv, 8, 4 ) );
- $size = hexdec($u['h4'].$u['h3'].$u['h2'].$u['h1']);
- return $size;
- } else
- return FALSE;
- }
-
- function zksetuser($self, $uid, $userid, $name, $password, $role) {
- $command = CMD_SET_USER;
- //$command_string = str_pad(chr( $uid ), 2, chr(0)).chr($role).str_pad($password, 8, chr(0)).str_pad($name, 28, chr(0)).str_pad(chr(1), 9, chr(0)).str_pad($userid, 8, chr(0)).str_repeat(chr(0),16);
- $byte1 = chr((int)($uid % 256));
- echo "<br>byte1=<br>";
- print_r(unpack("H*",$byte1));
- $byte2 = chr((int)($uid >> 8));
- echo "<br>byte1=<br>";
- print_r(unpack("H*",$byte2));
- echo "<br>strpad pass=<br>";
- print_r(str_pad($password, 8, chr(0)));
- echo "<br>strpad pass unpackd=<br>";
- print_r(unpack("H*",str_pad($password, 8, chr(0))));
- $command_string = $byte1.$byte2.chr($role).str_pad($password, 8, chr(0)).str_pad($name, 28, chr(0)).str_pad(chr(1), 9, chr(0)).str_pad($userid, 8, chr(0)).str_repeat(chr(0),16);
- echo "<br>unpacked cmd str<br>";
- print_r(unpack("H*",$command_string));
- $chksum = 0;
- $session_id = $self->session_id;
-
- $u = unpack('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6/H2h7/H2h8', substr( $self->data_recv, 0, 8) );
- $reply_id = 00;//hexdec( $u['h3'].$u['h7'] )+1;
- $buf = $self->createHeader($command, $chksum, $session_id, $reply_id, $command_string);
- echo "<br>unpacked buffer<br>";
- print_r(unpack("H*",$buf));
- socket_sendto($self->zkclient, $buf, strlen($buf), 0, $self->ip, $self->port);
-
- try {
- @socket_recvfrom($self->zkclient, $self->data_recv, 1024, 0, $self->ip, $self->port);
-
- $u = unpack('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6', substr( $self->data_recv, 0, 8 ) );
-
- $self->session_id = hexdec( $u['h6'].$u['h5'] );
- return substr( $self->data_recv, 8 );
- } catch(ErrorException $e) {
- return FALSE;
- } catch(exception $e) {
- return False;
- }
- }
-
- function zkgetuser($self) {
- $command = CMD_USERTEMP_RRQ;
- $command_string = chr(5);
- $chksum = 0;
- $session_id = $self->session_id;
- echo "<br><br>sid".$session_id." cmd".$command."data_recv= ".($self->data_recv)."<br>";
- $u = unpack('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6/H2h7/H2h8', substr( $self->data_recv, 0, 8) );
- //echo substr($self->data_recv,0,8)." ";
- print_r( unpack("H*",substr($self->data_recv,0,8)));
- echo gettype($u);
- print_r($u);
- //echo gettype($u['h8']);
- //echo "substr";
- //echo chr(5);
- //echo "substr";
- //echo substr( $self->data_recv, 0, 8);
- $reply_id = hexdec( $u['h8'].$u['h7'] );
- echo "reply_id = ".$reply_id."<br>";
- echo "before createheader<br>"."command = ".dechex($command)." chksum= ".dechex($chksum)." session id = ".dechex($session_id)." reply_id = ".dechex($reply_id) . "<br>";
- $buf = $self->createHeader($command, $chksum, $session_id, $reply_id, $command_string);
- echo "buf = ";
- print_r(unpack("H*",$buf));
- //echo decbin(52);
- //echo "<br>";
-
- socket_sendto($self->zkclient, $buf, strlen($buf), 0, $self->ip, $self->port);
-
- try {
- @socket_recvfrom($self->zkclient, $self->data_recv, 1024, 0, $self->ip, $self->port);
- echo "<br><br>first recvfrm<br>";
- print_r(unpack("H*",$self->data_recv));
- $u = unpack('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6', substr( $self->data_recv, 0, 8 ) );
- echo "<br><br>\$u taken from data_recv <br>";
- print_r($u);
- if ( getSizeUser($self) ) {
- $bytes = getSizeUser($self);
- echo "<br><br>entering while loop-bytes = ".$bytes."<br>";
- while ( $bytes > 0 ) {
- @socket_recvfrom($self->zkclient, $data_recv, 1032, 0, $self->ip, $self->port);
- array_push( $self->userdata, $data_recv);
- echo "<br>in loop<br>";
- $value = unpack('H*', $data_recv);
- print_r($value);
- echo "<br><br>";
- /*
- for($i=0;$i<count($value);$i++)
- {
- $c = chr($value[$i+1]);
- $utf8 = utf8_decode(chr($value[$i+1]));
- $iso88591_1 = utf8_decode($utf8);
- $iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $utf8);
- //$iso88591_2 = mb_convert_encoding($utf8, 'ISO-8859-1', 'UTF-8');
- $iso88591 = chr($value[$i+1]);
- $utf8_1 = utf8_encode($iso88591);
- $utf8_2 = iconv('ISO-8859-1', 'UTF-8', $iso88591);
- //$utf8_2 = mb_convert_encoding($iso88591, 'UTF-8', 'ISO-8859-1');
- echo "char val-> ".$value[$i+1]."char-> ".chr($value[$i+1])." utf-8 enc-> ".chr(utf8_encode($value[$i+1]))." utf-8 dec-> ".chr(utf8_decode($value[$i+1]));
- echo "<br>";
- echo $utf8_1;
- }
- */
- //$binary = base_convert($value[1], 16, 2);
- //echo pack('H*', base_convert($binary, 2, 16));
- $bytes -= 1024;
- }
- echo "<br>while loop ends. total userdata(*showing [0] only edit later)->";
- print_r(unpack("H*",$self->userdata[0]));
- $self->session_id = hexdec( $u['h6'].$u['h5'] );
- @socket_recvfrom($self->zkclient, $data_recv, 1024, 0, $self->ip, $self->port);
- echo "<br><br>last data received<br>";
- print_r(unpack("H*",$data_recv));
- echo "<br><br>";
- }
-
-
- $users = array();
- if ( count($self->userdata) > 0 ) {
- //The first 4 bytes don't seem to be related to the user
- for ( $x=0; $x<count($self->userdata); $x++) {
- if ( $x > 0 ){
- echo "<br>";
- print_r(unpack("H*",$self->userdata[$x]));
- $self->userdata[$x] = substr( $self->userdata[$x], 8 );
- echo "<br>";
- print_r(unpack("H*",$self->userdata[$x]));
- }
- }
-
- $userdata = implode( '', $self->userdata );
- echo "<br><br>after imploding userdata<br>";
- print_r(unpack("H*",$userdata));
- echo "<br>";
- echo "<br><br>strlen userdata<br>";
- echo strlen($userdata);
- echo "<br>userdata<br>";
- $userdata = substr($userdata,11);
- echo "<br><br>rejecting first 11 bytes<br>";
- print_r(unpack("H*",$userdata));
- echo "<br>userdata<br>";
- echo "<br><br>strlen userdata after removing 11<br>";
- echo strlen($userdata);
- echo "<br>userdata<br>";
- while ( strlen($userdata) > 72 ) {
-
- $u = unpack( 'H144', substr( $userdata, 0, 72) );
- echo "<br>unpacked first 72 bytes h144 ".strlen($u[1])."<br>";
- print_r($u);
- echo "<br>";
- //$uid = hexdec( substr($u[1], 0, 4) ).' ';
- $u1 = hexdec( substr($u[1], 2, 2) );
- echo "<br> \$u1= ". $u1;
- echo "<br>";
- $u2 = hexdec( substr($u[1], 4, 2) );
- echo "<br> \$u2= ". $u2;
- echo "<br>";
- $uid = $u1+($u2*256);
- echo "<br> \$uid= ". $uid;
- echo "<br>";
- $cardno = hexdec( substr($u[1], 78, 2).substr($u[1], 76, 2).substr($u[1], 74, 2).substr($u[1], 72, 2) ).' ';
- $role = hexdec( substr($u[1], 4, 4) ).' ';
- $password = hex2bin( substr( $u[1], 8, 16 ) ).' ';
- $name = hex2bin( substr( $u[1], 24, 74 ) ). ' ';
- $userid = hex2bin( substr( $u[1], 98, 72) ).' ';
-
- //Clean up some messy characters from the user name
- $password = explode( chr(0), $password, 2 );
- $password = $password[0];
- $userid = explode( chr(0), $userid, 2);
- $userid = $userid[0];
- $name = explode(chr(0), $name, 3);
- $name = utf8_encode($name[0]);
- $cardno = str_pad($cardno,11,'0',STR_PAD_LEFT);
-
- if ( $name == "" )
- $name = $uid;
-
- $users[$uid] = array($userid, $name, $cardno, $uid,intval( $role ), $password);
-
- $userdata = substr( $userdata, 72 );
- }
- }
-
- return $users;
- } catch(ErrorException $e) {
- return FALSE;
- } catch(exception $e) {
- return False;
- }
- }
-
- function zkclearuser($self) {
- $command = CMD_CLEAR_DATA;
- $command_string = '';
- $chksum = 0;
- $session_id = $self->session_id;
-
- $u = unpack('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6/H2h7/H2h8', substr( $self->data_recv, 0, 8) );
- $reply_id = hexdec( $u['h8'].$u['h7'] );
- $buf = $self->createHeader($command, $chksum, $session_id, $reply_id, $command_string);
-
- socket_sendto($self->zkclient, $buf, strlen($buf), 0, $self->ip, $self->port);
-
- try {
- @socket_recvfrom($self->zkclient, $self->data_recv, 1024, 0, $self->ip, $self->port);
-
- $u = unpack('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6', substr( $self->data_recv, 0, 8 ) );
-
- $self->session_id = hexdec( $u['h6'].$u['h5'] );
- return substr( $self->data_recv, 8 );
- } catch(ErrorException $e) {
- return FALSE;
- } catch(exception $e) {
- return False;
- }
- }
-
- function zkclearadmin($self) {
- $command = CMD_CLEAR_ADMIN;
- $command_string = '';
- $chksum = 0;
- $session_id = $self->session_id;
-
- $u = unpack('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6/H2h7/H2h8', substr( $self->data_recv, 0, 8) );
- $reply_id = hexdec( $u['h8'].$u['h7'] );
- $buf = $self->createHeader($command, $chksum, $session_id, $reply_id, $command_string);
-
- socket_sendto($self->zkclient, $buf, strlen($buf), 0, $self->ip, $self->port);
-
- try {
- @socket_recvfrom($self->zkclient, $self->data_recv, 1024, 0, $self->ip, $self->port);
-
- $u = unpack('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6', substr( $self->data_recv, 0, 8 ) );
-
- $self->session_id = hexdec( $u['h6'].$u['h5'] );
- return substr( $self->data_recv, 8 );
- } catch(ErrorException $e) {
- return FALSE;
- } catch(exception $e) {
- return False;
- }
- }
- ?>