/var/www/(Del)hsihk.com/wp-content/plugins/backupbuddy/destinations/_gdrive/Google/IO/Curl.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
/*
 * Copyright 2014 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * Curl based implementation of Google_IO.
 *
 * @author Stuart Langley <slangley@google.com>
 */

require_once 'Google/IO/Abstract.php';

class 
Google_IO_Curl extends Google_IO_Abstract
{
  
// cURL hex representation of version 7.30.0
  
const NO_QUIRK_VERSION 0x071E00;

  private 
$options = array();
  
/**
   * Execute an HTTP Request
   *
   * @param Google_HttpRequest $request the http request to be executed
   * @return Google_HttpRequest http request with the response http code,
   * response headers and response body filled in
   * @throws Google_IO_Exception on curl or IO error
   */
  
public function executeRequest(Google_Http_Request $request)
  {
    
$curl curl_init();

    if (
$request->getPostBody()) {
      
curl_setopt($curlCURLOPT_POSTFIELDS$request->getPostBody());
    }

    
$requestHeaders $request->getRequestHeaders();
    if (
$requestHeaders && is_array($requestHeaders)) {
      
$curlHeaders = array();
      foreach (
$requestHeaders as $k => $v) {
        
$curlHeaders[] = "$k$v";
      }
      
curl_setopt($curlCURLOPT_HTTPHEADER$curlHeaders);
    }

    
curl_setopt($curlCURLOPT_URL$request->getUrl());
    
    
curl_setopt($curlCURLOPT_CUSTOMREQUEST$request->getRequestMethod());
    
curl_setopt($curlCURLOPT_USERAGENT$request->getUserAgent());

    
curl_setopt($curlCURLOPT_FOLLOWLOCATIONfalse);
    
curl_setopt($curlCURLOPT_SSL_VERIFYPEERtrue);
    
curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
    
curl_setopt($curlCURLOPT_HEADERtrue);

    if (
$request->canGzip()) {
      
curl_setopt($curlCURLOPT_ENCODING'gzip,deflate');
    }

    foreach (
$this->options as $key => $var) {
      
curl_setopt($curl$key$var);
    }

    if (!isset(
$this->options[CURLOPT_CAINFO])) {
      
curl_setopt($curlCURLOPT_CAINFOdirname(__FILE__) . '/cacerts.pem');
    }

    
$response curl_exec($curl);
    if (
$response === false) {
      throw new 
Google_IO_Exception(curl_error($curl));
    }
    
$headerSize curl_getinfo($curlCURLINFO_HEADER_SIZE);

    list(
$responseHeaders$responseBody) = $this->parseHttpResponse($response$headerSize);

    
$responseCode curl_getinfo($curlCURLINFO_HTTP_CODE);

    return array(
$responseBody$responseHeaders$responseCode);
  }

  
/**
   * Set options that update the transport implementation's behavior.
   * @param $options
   */
  
public function setOptions($options)
  {
    
$this->options $options $this->options;
  }

  
/**
   * Set the maximum request time in seconds.
   * @param $timeout in seconds
   */
  
public function setTimeout($timeout)
  {
    
// Since this timeout is really for putting a bound on the time
    // we'll set them both to the same. If you need to specify a longer
    // CURLOPT_TIMEOUT, or a tigher CONNECTTIMEOUT, the best thing to
    // do is use the setOptions method for the values individually.
    
$this->options[CURLOPT_CONNECTTIMEOUT] = $timeout;
    
$this->options[CURLOPT_TIMEOUT] = $timeout;
  }

  
/**
   * Get the maximum request time in seconds.
   * @return timeout in seconds
   */
  
public function getTimeout()
  {
    return 
$this->options[CURLOPT_TIMEOUT];
  }

  
/**
   * Test for the presence of a cURL header processing bug
   *
   * {@inheritDoc}
   *
   * @return boolean
   */
  
protected function needsQuirk()
  {
    
$ver curl_version();
    
$versionNum $ver['version_number'];
    return 
$versionNum Google_IO_Curl::NO_QUIRK_VERSION;
  }
}