protected function callbackWriteHeader($ch, $string)
    {
        // we may receive a second set of headers if doing e.g. digest auth
        if ($this->eventReceivedHeaders || !$this->eventSentHeaders) {
            // don't bother with 100-Continue responses (bug #15785)
            if (!$this->eventSentHeaders
                || $this->response->getStatus() >= 200
            ) {
                $this->request->setLastEvent(
                    'sentHeaders', curl_getinfo($ch, CURLINFO_HEADER_OUT)
                );
            }
            $upload = curl_getinfo($ch, CURLINFO_SIZE_UPLOAD);
            // if body wasn't read by a callback, send event with total body size
            if ($upload > $this->position) {
                $this->request->setLastEvent(
                    'sentBodyPart', $upload - $this->position
                );
                $this->position = $upload;
            }
            if ($upload && (!$this->eventSentHeaders
                            || $this->response->getStatus() >= 200)
            ) {
                $this->request->setLastEvent('sentBody', $upload);
            }
            $this->eventSentHeaders = true;
            // we'll need a new response object
            if ($this->eventReceivedHeaders) {
                $this->eventReceivedHeaders = false;
                $this->response             = null;
            }
        }
        if (empty($this->response)) {
            $this->response = new HTTP_Request2_Response(
                $string, false, curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)
            );
        } else {
            $this->response->parseHeaderLine($string);
            if ('' == trim($string)) {
                // don't bother with 100-Continue responses (bug #15785)
                if (200 <= $this->response->getStatus()) {
                    $this->request->setLastEvent('receivedHeaders', $this->response);
                }

                if ($this->request->getConfig('follow_redirects') && $this->response->isRedirect()) {
                    $redirectUrl = new Net_URL2($this->response->getHeader('location'));

                    // for versions lower than 5.2.10, check the redirection URL protocol
                    if (!defined('CURLOPT_REDIR_PROTOCOLS') && $redirectUrl->isAbsolute()
                        && !in_array($redirectUrl->getScheme(), array('http', 'https'))
                    ) {
                        return -1;
                    }

                    if ($jar = $this->request->getCookieJar()) {
                        $jar->addCookiesFromResponse($this->response, $this->request->getUrl());
                        if (!$redirectUrl->isAbsolute()) {
                            $redirectUrl = $this->request->getUrl()->resolve($redirectUrl);
                        }
                        if ($cookies = $jar->getMatching($redirectUrl, true)) {
                            curl_setopt($ch, CURLOPT_COOKIE, $cookies);
                        }
                    }
                }
                $this->eventReceivedHeaders = true;
            }
        }
        return strlen($string);
    }
protected function callbackWriteHeader($ch, $string)
    {
        // we may receive a second set of headers if doing e.g. digest auth
        if ($this->eventReceivedHeaders || !$this->eventSentHeaders) {
            // don't bother with 100-Continue responses (bug #15785)
            if (!$this->eventSentHeaders
                || $this->response->getStatus() >= 200
            ) {
                $this->request->setLastEvent(
                    'sentHeaders', curl_getinfo($ch, CURLINFO_HEADER_OUT)
                );
            }
            $upload = curl_getinfo($ch, CURLINFO_SIZE_UPLOAD);
            // if body wasn't read by a callback, send event with total body size
            if ($upload > $this->position) {
                $this->request->setLastEvent(
                    'sentBodyPart', $upload - $this->position
                );
                $this->position = $upload;
            }
            if ($upload && (!$this->eventSentHeaders
                            || $this->response->getStatus() >= 200)
            ) {
                $this->request->setLastEvent('sentBody', $upload);
            }
            $this->eventSentHeaders = true;
            // we'll need a new response object
            if ($this->eventReceivedHeaders) {
                $this->eventReceivedHeaders = false;
                $this->response             = null;
            }
        }
        if (empty($this->response)) {
            $this->response = new HTTP_Request2_Response(
                $string, false, curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)
            );
        } else {
            $this->response->parseHeaderLine($string);
            if ('' == trim($string)) {
                // don't bother with 100-Continue responses (bug #15785)
                if (200 <= $this->response->getStatus()) {
                    $this->request->setLastEvent('receivedHeaders', $this->response);
                }

                if ($this->request->getConfig('follow_redirects') && $this->response->isRedirect()) {
                    $redirectUrl = new Net_URL2($this->response->getHeader('location'));

                    // for versions lower than 5.2.10, check the redirection URL protocol
                    if (!defined('CURLOPT_REDIR_PROTOCOLS') && $redirectUrl->isAbsolute()
                        && !in_array($redirectUrl->getScheme(), array('http', 'https'))
                    ) {
                        return -1;
                    }

                    if ($jar = $this->request->getCookieJar()) {
                        $jar->addCookiesFromResponse($this->response, $this->request->getUrl());
                        if (!$redirectUrl->isAbsolute()) {
                            $redirectUrl = $this->request->getUrl()->resolve($redirectUrl);
                        }
                        if ($cookies = $jar->getMatching($redirectUrl, true)) {
                            curl_setopt($ch, CURLOPT_COOKIE, $cookies);
                        }
                    }
                }
                $this->eventReceivedHeaders = true;
            }
        }
        return strlen($string);
    }
protected function callbackWriteHeader ( $ ch , $ string ) { // we may receive a second set of headers if doing e.g. digest auth
 if ( $ this -> eventReceivedHeaders || ! $ this -> eventSentHeaders ) { // don't bother with 100-Continue responses (bug #15785)
 if ( ! $ this -> eventSentHeaders || $ this -> response -> getStatus ( ) >= 200 ) { $ this -> request -> setLastEvent ( 'sentHeaders' , curl_getinfo ( $ ch , CURLINFO_HEADER_OUT ) ) ; } $ upload = curl_getinfo ( $ ch , CURLINFO_SIZE_UPLOAD ) ; // if body wasn't read by a callback, send event with total body size
 if ( $ upload > $ this -> position ) { $ this -> request -> setLastEvent ( 'sentBodyPart' , $ upload - $ this -> position ) ; $ this -> position = $ upload ; } if ( $ upload && ( ! $ this -> eventSentHeaders || $ this -> response -> getStatus ( ) >= 200 ) ) { $ this -> request -> setLastEvent ( 'sentBody' , $ upload ) ; } $ this -> eventSentHeaders = true ; // we'll need a new response object
 if ( $ this -> eventReceivedHeaders ) { $ this -> eventReceivedHeaders = false ; $ this -> response = null ; } } if ( empty ( $ this -> response ) ) { $ this -> response = new HTTP_Request2_Response ( $ string , false , curl_getinfo ( $ ch , CURLINFO_EFFECTIVE_URL ) ) ; } else { $ this -> response -> parseHeaderLine ( $ string ) ; if ( '' == trim ( $ string ) ) { // don't bother with 100-Continue responses (bug #15785)
 if ( 200 <= $ this -> response -> getStatus ( ) ) { $ this -> request -> setLastEvent ( 'receivedHeaders' , $ this -> response ) ; } if ( $ this -> request -> getConfig ( 'follow_redirects' ) && $ this -> response -> isRedirect ( ) ) { $ redirectUrl = new Net_URL2 ( $ this -> response -> getHeader ( 'location' ) ) ; // for versions lower than 5.2.10, check the redirection URL protocol
 if ( ! defined ( 'CURLOPT_REDIR_PROTOCOLS' ) && $ redirectUrl -> isAbsolute ( ) && ! in_array ( $ redirectUrl -> getScheme ( ) , array ( 'http' , 'https' ) ) ) { return - 1 ; } if ( $ jar = $ this -> request -> getCookieJar ( ) ) { $ jar -> addCookiesFromResponse ( $ this -> response , $ this -> request -> getUrl ( ) ) ; if ( ! $ redirectUrl -> isAbsolute ( ) ) { $ redirectUrl = $ this -> request -> getUrl ( ) -> resolve ( $ redirectUrl ) ; } if ( $ cookies = $ jar -> getMatching ( $ redirectUrl , true ) ) { curl_setopt ( $ ch , CURLOPT_COOKIE , $ cookies ) ; } } } $ this -> eventReceivedHeaders = true ; } } return strlen ( $ string ) ; }
Callback function called by cURL for saving the response headers

@param resource $ch     cURL handle
@param string   $string response header (with trailing CRLF)

@return   integer     number of bytes saved
@see      HTTP_Request2_Response::parseHeaderLine()
Callback function called by cURL for saving the response headers