/**
* Gets the host information
* @param string $hostname Hostname
* @param callable $cb Callback
* @callback $cb ( )
* @return void
*/
public function get($hostname, $cb)
{
$this->onResponse->push($cb);
$this->setFree(false);
$e = explode(':', $hostname, 3);
$hostname = $e[0];
$qtype = isset($e[1]) ? $e[1] : 'A';
$qclass = isset($e[2]) ? $e[2] : 'IN';
$QD = [];
$qtypeInt = array_search($qtype, Pool::$type, true);
$qclassInt = array_search($qclass, Pool::$class, true);
if ($qtypeInt === false || $qclassInt === false) {
call_user_func($cb, false);
return;
}
$q = Binary::labels($hostname) . Binary::word($qtypeInt) . Binary::word($qclassInt);
$QD[] = $q;
$packet = Binary::word(++$this->seq) . Binary::bitmap2bytes('0' . '0000' . '0' . '0' . '1' . '0' . '000' . '0000', 2) . Binary::word(sizeof($QD)) . Binary::word(0) . Binary::word(0) . Binary::word(0) . implode('', $QD);
if ($this->type === 'udp') {
$this->write($packet);
} else {
$this->write(Binary::word(strlen($packet)) . $packet);
}
}