@@ -42,24 +42,31 @@ public static function connect(ZKTeco $self)
4242
4343 // If data is received, process it.
4444 if (strlen ($ self ->_data_recv ) > 0 ) {
45- // Unpack the received data to extract session ID.
4645 $ u = unpack ('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6 ' , substr ($ self ->_data_recv , 0 , 8 ));
4746
48- // Convert session ID from hex to decimal.
49- $ session = hexdec ($ u ['h6 ' ].$ u ['h5 ' ]);
50-
51- // If session ID is empty, return false.
47+ $ session = hexdec ($ u ['h6 ' ] . $ u ['h5 ' ]);
5248 if (empty ($ session )) {
5349 return false ;
5450 }
55-
56- // Set the session ID in the ZKTecoPhp instance.
5751 $ self ->_session_id = $ session ;
58-
59- // Check if the received data is valid.
60- return Util::checkValid ($ self ->_data_recv );
52+ $ result = Util::checkValid ($ self ->_data_recv );
53+ if ($ result == Util::CMD_ACK_UNAUTH ) {
54+ $ command_string = Util::makeCommKey ($ self ->_password , $ self ->_session_id );
55+ $ buf = Util::createHeader (Util::CMD_ACK_AUTH , 0 , $ self ->_session_id , $ reply_id , $ command_string );
56+ socket_sendto ($ self ->_zkclient , $ buf , strlen ($ buf ), 0 , $ self ->_ip , $ self ->_port );
57+ @socket_recvfrom ($ self ->_zkclient , $ self ->_data_recv , 1024 , 0 , $ self ->_ip , $ self ->_port );
58+ if (strlen ($ self ->_data_recv ) > 0 ) {
59+ $ u = unpack ('H2h1/H2h2/H2h3/H2h4/H2h5/H2h6 ' , substr ($ self ->_data_recv , 0 , 8 ));
60+ $ session = hexdec ($ u ['h6 ' ].$ u ['h5 ' ]);
61+ if (empty ($ session )) {
62+ return false ;
63+ }
64+ $ self ->_session_id = $ session ;
65+ return Util::checkValid ($ self ->_data_recv );
66+ }
67+ }
68+ return $ result ;
6169 } else {
62- // If no data is received, return false.
6370 return false ;
6471 }
6572 } catch (ErrorException $ e ) {
0 commit comments