Upstream patch: Remote updates to support sessions

This commit is contained in:
Deon George 2010-12-15 12:26:53 +11:00
parent ad5b674d22
commit 174b78800c

View File

@ -9,6 +9,8 @@
* @license http://kohanaphp.com/license * @license http://kohanaphp.com/license
*/ */
class Kohana_Remote { class Kohana_Remote {
// Store our curl session resource
static $remote = NULL;
// Default curl options // Default curl options
public static $default_options = array public static $default_options = array
@ -36,7 +38,7 @@ class Kohana_Remote {
* @return string * @return string
* @throws Kohana_Exception * @throws Kohana_Exception
*/ */
public static function get($url, array $options = NULL) public static function get($url, array $options = NULL, $session = FALSE)
{ {
if ($options === NULL) if ($options === NULL)
{ {
@ -52,8 +54,20 @@ class Kohana_Remote {
// The transfer must always be returned // The transfer must always be returned
$options[CURLOPT_RETURNTRANSFER] = TRUE; $options[CURLOPT_RETURNTRANSFER] = TRUE;
// If we have an old session, lets auto close it.
if (! $session AND Remote::$remote)
Remote::clear();
// Open a new remote connection // Open a new remote connection
$remote = curl_init($url); if (! $session OR is_null(Remote::$remote))
{
$remote = Remote::$remote = curl_init($url);
}
else
{
$remote = Remote::$remote;
curl_setopt($remote,CURLOPT_URL,$url);
}
// Set connection options // Set connection options
if ( ! curl_setopt_array($remote, $options)) if ( ! curl_setopt_array($remote, $options))
@ -77,9 +91,6 @@ class Kohana_Remote {
$error = curl_error($remote); $error = curl_error($remote);
} }
// Close the connection
curl_close($remote);
if (isset($error)) if (isset($error))
{ {
throw new Kohana_Exception('Error fetching remote :url [ status :code ] :error', throw new Kohana_Exception('Error fetching remote :url [ status :code ] :error',
@ -89,6 +100,17 @@ class Kohana_Remote {
return $response; return $response;
} }
/**
* Clear an existing curl session
*/
public static function clear()
{
if (is_resource(Remote::$remote))
curl_close(Remote::$remote);
Remote::$remote = NULL;
}
/** /**
* Returns the status code (200, 500, etc) for a URL. * Returns the status code (200, 500, etc) for a URL.
* *