class CurlWrapper {
	
	static private $ch;
	
  function __construct($url)
  {
		self::$ch = curl_init($url); // todo: should set URL later with CURLOPT_URL
    curl_setopt($ch, CURLOPT_VERBOSE, false);
    curl_setopt($ch, CURLOPT_AUTOREFERER, false);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($ch, CURLOPT_COOKIESESSION, false);
    curl_setopt($ch, CURLOPT_CRLF, false);
    curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, true);
    curl_setopt($ch, CURLOPT_FAILONERROR, false);
    curl_setopt($ch, CURLOPT_NETRC, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_BUFFERSIZE, 16384);  // bigger?
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // Don't verify, 1=verify, 2=verify & match name
    curl_setopt($ch, CURLOPT_SSLVERSION, 3);
    curl_setopt($ch, CURLOPT_TIMEOUT, 0);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Edoceo phps3tk/0.4');
    // Set my CallBack functions
    //curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this,'_curl_head'));
    //curl_setopt($ch, CURLOPT_READFUNCTION, array(&$this,'_curl_read'));
    //curl_setopt($ch, CURLOPT_WRITEFUNCTION, array($this, '_curl_write'));
    return $ch;
  }

  // func: _curl_header($ch,$buf) - Curl Header Callback
  function _curl_head($ch,$buf)
  {
    // echo "S3Connection::_curl_head($ch,$buf)\n";
    $ret = strlen($buf);
                /*
    if (preg_match('/^HTTP\/1\.1 (\d{3}) (.+)/',$buf,$m))
    {
      $this->_status_code = $m[1];
      $this->_status_mesg = $m[2];
    }
    else
                */
                if (preg_match('/^(.+?):(.+)/',$buf,$m)) $this->_head[strtolower(trim($m[1]))] = trim($m[2]);
                // note: HTTP 1.1 (rfc2616) says that 404 and HEAD should not have response.
                // note:  CURL will hang if we don't force close by return 0 here
                // note: http://developer.amazonwebservices.com/connect/thread.jspa?messageID=40930
                // Last Line of Headers
                if (($ret==2) && ($this->_http_request_verb=='HEAD')) return 0;
    return $ret;
  }