Merge "add htmlform-no and htmlform-yes messages for generic yes-no questions"
[lhc/web/wiklou.git] / includes / HttpFunctions.php
index 27b1749..acf9baa 100644 (file)
@@ -58,6 +58,8 @@ class Http {
         */
        public static function request( $method, $url, $options = array() ) {
                wfDebug( "HTTP: $method: $url\n" );
+               wfProfileIn( __METHOD__ . "-$method" );
+
                $options['method'] = strtoupper( $method );
 
                if ( !isset( $options['timeout'] ) ) {
@@ -67,11 +69,12 @@ class Http {
                $req = MWHttpRequest::factory( $url, $options );
                $status = $req->execute();
 
+               $content = false;
                if ( $status->isOK() ) {
-                       return $req->getContent();
-               } else {
-                       return false;
+                       $content = $req->getContent();
                }
+               wfProfileOut( __METHOD__ . "-$method" );
+               return $content;
        }
 
        /**
@@ -302,7 +305,7 @@ class MWHttpRequest {
 
        /**
         * Set the parameters of the request
-
+        *
         * @param $args Array
         * @todo overload the args param
         */
@@ -335,7 +338,7 @@ class MWHttpRequest {
        }
 
        /**
-        * Set the refererer header
+        * Set the referrer header
         */
        public function setReferer( $url ) {
                $this->setHeader( 'Referer', $url );
@@ -427,6 +430,8 @@ class MWHttpRequest {
        public function execute() {
                global $wgTitle;
 
+               wfProfileIn( __METHOD__ );
+
                $this->content = "";
 
                if ( strtoupper( $this->method ) == "HEAD" ) {
@@ -446,14 +451,18 @@ class MWHttpRequest {
                if ( !isset( $this->reqHeaders['User-Agent'] ) ) {
                        $this->setUserAgent( Http::userAgent() );
                }
+
+               wfProfileOut( __METHOD__ );
        }
 
        /**
         * Parses the headers, including the HTTP status code and any
-        * Set-Cookie headers.  This function expectes the headers to be
+        * Set-Cookie headers.  This function expects the headers to be
         * found in an array in the member variable headerList.
         */
        protected function parseHeader() {
+               wfProfileIn( __METHOD__ );
+
                $lastname = "";
 
                foreach ( $this->headerList as $header ) {
@@ -470,6 +479,8 @@ class MWHttpRequest {
                }
 
                $this->parseCookies();
+
+               wfProfileOut( __METHOD__ );
        }
 
        /**
@@ -552,8 +563,8 @@ class MWHttpRequest {
                        $this->parseHeader();
                }
 
-               if ( isset( $this->respHeaders[strtolower ( $header ) ] ) ) {
-                       $v = $this->respHeaders[strtolower ( $header ) ];
+               if ( isset( $this->respHeaders[strtolower( $header )] ) ) {
+                       $v = $this->respHeaders[strtolower( $header )];
                        return $v[count( $v ) - 1];
                }
 
@@ -603,6 +614,8 @@ class MWHttpRequest {
         * Parse the cookies in the response headers and store them in the cookie jar.
         */
        protected function parseCookies() {
+               wfProfileIn( __METHOD__ );
+
                if ( !$this->cookieJar ) {
                        $this->cookieJar = new CookieJar;
                }
@@ -613,6 +626,8 @@ class MWHttpRequest {
                                $this->cookieJar->parseCookieResponseHeader( $cookie, $url['host'] );
                        }
                }
+
+               wfProfileOut( __METHOD__ );
        }
 
        /**
@@ -631,17 +646,17 @@ class MWHttpRequest {
                $headers = $this->getResponseHeaders();
 
                //return full url (fix for incorrect but handled relative location)
-               if ( isset( $headers[ 'location' ] ) ) {
-                       $locations = $headers[ 'location' ];
+               if ( isset( $headers['location'] ) ) {
+                       $locations = $headers['location'];
                        $domain = '';
                        $foundRelativeURI = false;
                        $countLocations = count( $locations );
 
                        for ( $i = $countLocations - 1; $i >= 0; $i-- ) {
-                               $url = parse_url( $locations[ $i ] );
+                               $url = parse_url( $locations[$i] );
 
                                if ( isset( $url['host'] ) ) {
-                                       $domain = $url[ 'scheme' ] . '://' . $url[ 'host' ];
+                                       $domain = $url['scheme'] . '://' . $url['host'];
                                        break; //found correct URI (with host)
                                } else {
                                        $foundRelativeURI = true;
@@ -650,15 +665,15 @@ class MWHttpRequest {
 
                        if ( $foundRelativeURI ) {
                                if ( $domain ) {
-                                       return $domain . $locations[ $countLocations - 1 ];
+                                       return $domain . $locations[$countLocations - 1];
                                } else {
                                        $url = parse_url( $this->url );
-                                       if ( isset($url[ 'host' ]) ) {
-                                               return $url[ 'scheme' ] . '://' . $url[ 'host' ] . $locations[ $countLocations - 1 ];
+                                       if ( isset( $url['host'] ) ) {
+                                               return $url['scheme'] . '://' . $url['host'] . $locations[$countLocations - 1];
                                        }
                                }
                        } else {
-                               return $locations[ $countLocations - 1 ];
+                               return $locations[$countLocations - 1];
                        }
                }
 
@@ -681,11 +696,6 @@ class MWHttpRequest {
 class CurlHttpRequest extends MWHttpRequest {
        const SUPPORTS_FILE_POSTS = true;
 
-       static $curlMessageMap = array(
-               6 => 'http-host-unreachable',
-               28 => 'http-timed-out'
-       );
-
        protected $curlOptions = array();
        protected $headerText = "";
 
@@ -700,9 +710,12 @@ class CurlHttpRequest extends MWHttpRequest {
        }
 
        public function execute() {
+               wfProfileIn( __METHOD__ );
+
                parent::execute();
 
                if ( !$this->status->isOK() ) {
+                       wfProfileOut( __METHOD__ );
                        return $this->status;
                }
 
@@ -746,6 +759,7 @@ class CurlHttpRequest extends MWHttpRequest {
                $curlHandle = curl_init( $this->url );
 
                if ( !curl_setopt_array( $curlHandle, $this->curlOptions ) ) {
+                       wfProfileOut( __METHOD__ );
                        throw new MWException( "Error setting curl options." );
                }
 
@@ -761,13 +775,7 @@ class CurlHttpRequest extends MWHttpRequest {
                }
 
                if ( false === curl_exec( $curlHandle ) ) {
-                       $code = curl_error( $curlHandle );
-
-                       if ( isset( self::$curlMessageMap[$code] ) ) {
-                               $this->status->fatal( self::$curlMessageMap[$code] );
-                       } else {
-                               $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
-                       }
+                       $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
                } else {
                        $this->headerList = explode( "\r\n", $this->headerText );
                }
@@ -777,6 +785,8 @@ class CurlHttpRequest extends MWHttpRequest {
                $this->parseHeader();
                $this->setStatus();
 
+               wfProfileOut( __METHOD__ );
+
                return $this->status;
        }
 
@@ -811,6 +821,8 @@ class PhpHttpRequest extends MWHttpRequest {
        }
 
        public function execute() {
+               wfProfileIn( __METHOD__ );
+
                parent::execute();
 
                if ( is_array( $this->postData ) ) {
@@ -903,18 +915,19 @@ class PhpHttpRequest extends MWHttpRequest {
 
                if ( $fh === false ) {
                        $this->status->fatal( 'http-request-error' );
+                       wfProfileOut( __METHOD__ );
                        return $this->status;
                }
 
                if ( $result['timed_out'] ) {
                        $this->status->fatal( 'http-timed-out', $this->url );
+                       wfProfileOut( __METHOD__ );
                        return $this->status;
                }
 
                // If everything went OK, or we received some error code
                // get the response body content.
-               if ( $this->status->isOK()
-                               || (int)$this->respStatus >= 300) {
+               if ( $this->status->isOK() || (int)$this->respStatus >= 300 ) {
                        while ( !feof( $fh ) ) {
                                $buf = fread( $fh, 8192 );
 
@@ -930,6 +943,8 @@ class PhpHttpRequest extends MWHttpRequest {
                }
                fclose( $fh );
 
+               wfProfileOut( __METHOD__ );
+
                return $this->status;
        }
 }