public function __construct($url, $callback = null)
 {
     register_shutdown_function(array(&$this, "__destruct"));
     $options = array(CURLOPT_USERAGENT => sfConfig::get('app_version_name') . ' (' . sfConfig::get('app_version_rev') . ' ' . sfConfig::get('app_version_comment') . ') ' . sfConfig::get('app_version_url'));
     // todo abstact this out
     $this->original_url = $url;
     $original_name = preg_replace('#^.*/#', '', $this->original_url);
     // we'll need to do this for redirects fixme
     $this->b = $b = new disconnectedCurl($url, $options);
     // probably want to have a way to gather statistics here
     try {
         $b->run($callback);
         // we should HEAD this first
     } catch (Exception $e) {
         throw limeException::createFromException($e, 'curl');
     }
     if ($b->isRunning()) {
         throw new limeException('curl', 'still running');
     }
     $mime_type = $b->getHeader('Content-Type');
     // of course we shouldn't trust people to have their servers configured right; sigh todo
     $mime_type = preg_replace('/;.*$/', '', $mime_type);
     // remove stuff after the semicolon delimiter "charset=UTF-8" etc
     parent::__construct($original_name, $mime_type, $b->getFile(), filesize($b->getFile()));
 }
 public function testSideload()
 {
     if (!function_exists('curl_init')) {
         throw new limeException('curl', 'CURL support is not compiled/loaded in PHP.');
     }
     $request = sfContext::getInstance()->getRequest();
     $url = 'http://' . $request->getHost() . $request->getRelativeUrlRoot() . '/' . 'robots.txt';
     // fixme
     $b = new disconnectedCurl($url);
     try {
         $b->run();
         return true;
     } catch (Exception $e) {
         throw limeException::createFromException($e, 'sideload');
     }
 }
 public static function createFromException(Exception $e, $token = null)
 {
     $exception = new limeException($token, sprintf('Wrapped %s: %s', get_class($e), $e->getMessage()));
     $exception->setWrappedException($e);
     return $exception;
 }