Guest User

Untitled

a guest
Dec 14th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.15 KB | None | 0 0
  1. <?php
  2. $errNo = 0;
  3. $errMsg = '';
  4.  
  5. // throws WARNING if hostname is invalid. Add @.
  6. if ($res = @fsockopen($ipAddress, 1883, $errNo, $errMsg, 10)) {
  7. //var_dump(chr(63>>8));
  8. //var_dump(bin2hex('11110000'));
  9.  
  10. $packetType = '1';
  11. $flag = '0';
  12. $remainingChars = '00';
  13. $fixedHeader = $packetType . $flag . $remainingChars;
  14.  
  15. // variable header 10 bytes
  16. $msb = '00';
  17. $lsb = '04';
  18. $mByte = dechex(ord('M'));
  19. $qByte = dechex(ord('Q'));
  20. $tByte = dechex(ord('T')); // twice
  21. $protocollLevel = '04'; // Always 4
  22.  
  23. $useUsername = '0';
  24. $usePassword = '0';
  25. $willRetain = '0';
  26. $willQos = '00'; // 0, 1, 2, but never 3
  27. $willFlag = '0'; // if 0 QoS and Retain must be 0, too
  28. $cleanSession = '1'; // 0 = store session for reconnect; 1 = always create new connection
  29. $keepAliveMsb = '00'; // 0 = deactivate
  30. $keepAliveLsb = '00'; // 0 = deactivate
  31.  
  32. $connectFlag = dechex(bindec(
  33. $useUsername . $usePassword . $willRetain . $willQos . $willFlag . $cleanSession . '0'
  34. ));
  35.  
  36. $variableHeader = $msb . $lsb . $mByte . $qByte . $tByte . $tByte . $protocollLevel . $connectFlag . $keepAliveMsb . $keepAliveLsb;
  37.  
  38. $client = [];
  39. $client[] = dechex(ord('s'));
  40. $client[] = dechex(ord('f'));
  41. $client[] = dechex(ord('1'));
  42. $client[] = dechex(ord('7'));
  43. $client[] = dechex(ord('0'));
  44. $client[] = dechex(ord('1'));
  45. $client[] = dechex(ord('7'));
  46. $client[] = dechex(ord('9'));
  47. $clientId = implode('', $client);
  48.  
  49. $payLoad = dechex(count($client)) . $clientId;
  50.  
  51. fwrite($res, hex2bin($fixedHeader . $variableHeader . $payLoad));
  52. //$disconnect = hex2bin('F0');
  53. //fwrite($res, $disconnect);
  54.  
  55. while (!feof($res)) {
  56. $result = fgets($res, 1024);
  57. $splitResult = str_split(bin2hex($result));
  58. if (
  59. $splitResult[0] === dechex(2)
  60. && $splitResult[1] === dechex(0)
  61. && $splitResult[2] . $splitResult[3] === '02'
  62. ) {
  63. var_dump('CONNACK received');
  64. } else {
  65. var_dump('Disconnected');
  66. }
  67.  
  68. if ($splitResult[4] . $splitResult[5] === '00') {
  69. var_dump('No Session');
  70. } else {
  71. var_dump('Session created');
  72. }
  73.  
  74. switch ($splitResult[6] . $splitResult[7]) {
  75. case '00':
  76. var_dump('Connection accepted');
  77. break;
  78. case '01':
  79. var_dump('The Server does not support the level of the MQTT protocol requested by the Client');
  80. break;
  81. case '02':
  82. var_dump('The Client identifier is correct UTF-8 but not allowed by the Server');
  83. break;
  84. case '03':
  85. var_dump('The Network Connection has been made but the MQTT service is unavailable');
  86. break;
  87. case '04':
  88. var_dump('The data in the user name or password is malformed');
  89. break;
  90. case '05':
  91. var_dump('The Client is not authorized to connect');
  92. break;
  93. }
  94.  
  95. printf('%b', $result);
  96. }
  97. fclose($res);
  98. } else {
  99. var_dump($errNo);
  100. var_dump($errMsg);
  101. }
  102. die();
Add Comment
Please, Sign In to add comment