<?PHP

  // Setup test-environment
  error_reporting (E_ALL);
  set_include_path (dirname (__FILE__) . '/../../' . PATH_SEPARATOR . get_include_path ());
  
  echo 'Started at ', $s = microtime (true), "\n";
  
  // Create a new event-base for the test
  require_once ('qcEvents/Base.php');
  
  $Base = new qcEvents_Base;
  
  // Hack in DNS64-Prefix
  require_once ('qcEvents/Client/DNS.php');
  
  qcEvents_Client_DNS::$DNS64_Prefix = '64:ff9b::';
  
  // Create a new HTTP-Pool and a single request
  // At creation of the test the given URL would redirect twice
  require_once ('qcEvents/Client/HTTP.php');
  
  # qcEvents_Client_HTTP::$debugHooks = true;
  
  qcEvents_Socket::registerHook ('socketResolve', function ($Socket, $Hostnames, $Types) {
    echo '[RESOLVE] Resolving ', implode (', ', $Hostnames), ' Types ', implode (', ', $Types), "\n";
  });
  
  qcEvents_Socket::registerHook ('socketResolved', function ($Socket, $Hostname, $Addresses) {
    echo '[RESOLVE] Resolved ', $Hostname, ' to ', implode (', ', $Addresses), "\n";
  });
  
  qcEvents_Socket::registerHook ('socketTryConnect', function ($Socket, $Host, $Addr, $Port) {
    echo '[CONNECT] Try to connect to ', $Host, ' via ', $Addr, ' on port ', $Port, "\n";
  });
  
  qcEvents_Socket::registerHook ('socketTryConnectFailed', function ($Socket, $Host, $Addr, $Port) {
    echo '[CONNECT] Connection to ', $Host, ' via ', $Addr, ' on port ', $Port, " failed\n";
  });
  
  qcEvents_Socket::registerHook ('socketConnected', function ($Socket) {
    echo '[CONNECT] Socket connected to ', $Socket->getRemoteName (), "\n";
  });
  
  $Pool = new qcEvents_Client_HTTP ($Base);
  $Pool->addHook ('httpRequestRediect', function (qcEvents_Client_HTTP $Pool, qcEvents_Stream_HTTP_Request $Request, $Location) {
    echo '[HTTP   ] Redirecting HTTP-Request for ', $Request->getURL (), ' to ', $Location, "\n";
  });
  $Pool->addHook ('httpRequestResult', function (qcEvents_Client_HTTP $Pool, qcEvents_Stream_HTTP_Request $Request, qcEvents_Stream_HTTP_Header $Header = null, $Body = null) use ($s) {
    echo '[HTTP   ] Received HTTP-Response for ', $Request->getURL (), ': ';
    
    if ($Header)
      echo "\n", $Header;
    else
      echo 'FAILED', "\n";
    
    $e = microtime (true);
    echo '[HTTP   ] Result after ', number_format (($e - $s) * 1000, 2), " ms\n";
  });
  
  if ($argc > 1) 
    for ($i = 1; $i < $argc; $i++)
      $Pool->addNewRequest ($argv [$i]);
  else
    $Request = $Pool->addNewRequest ('https://www.tiggerswelt.net/hosting');
  
  // Enter main-loop
  $Base->loop ();
  
  echo 'Finished at ', $e = microtime (true), "\n";
  echo 'Test took ', number_format (($e - $s) * 1000, 2), " ms\n";

?>