Ampache PHP Cross Reference Groupware Applications

Source: /modules/requests/Requests/Proxy/HTTP.php - 150 lines - 3379 bytes - Summary - Text - Print

Description: HTTP Proxy connection interface

   1  <?php
   2  /**
   3   * HTTP Proxy connection interface
   4   *
   5   * @package Requests
   6   * @subpackage Proxy
   7   * @since 1.6
   8   */
   9  
  10  /**
  11   * HTTP Proxy connection interface
  12   *
  13   * Provides a handler for connection via an HTTP proxy
  14   *
  15   * @package Requests
  16   * @subpackage Proxy
  17   * @since 1.6
  18   */
  19  class Requests_Proxy_HTTP implements Requests_Proxy {
  20      /**
  21       * Proxy host and port
  22       *
  23       * Notation: "host:port" (eg 127.0.0.1:8080 or someproxy.com:3128)
  24       *
  25       * @var string
  26       */
  27      public $proxy;
  28  
  29      /**
  30       * Username
  31       *
  32       * @var string
  33       */
  34      public $user;
  35  
  36      /**
  37       * Password
  38       *
  39       * @var string
  40       */
  41      public $pass;
  42  
  43      /**
  44       * Do we need to authenticate? (ie username & password have been provided)
  45       *
  46       * @var boolean
  47       */
  48      public $use_authentication;
  49  
  50      /**
  51       * Constructor
  52       *
  53       * @since 1.6
  54       * @throws Requests_Exception On incorrect number of arguments (`authbasicbadargs`)
  55       * @param array|null $args Array of user and password. Must have exactly two elements
  56       */
  57  	public function __construct($args = null) {
  58          if (is_string($args)) {
  59              $this->proxy = $args;
  60          }
  61          elseif (is_array($args)) {
  62              if (count($args) == 1) {
  63                  list($this->proxy) = $args;
  64              }
  65              elseif (count($args) == 3) {
  66                  list($this->proxy, $this->user, $this->pass) = $args;
  67                  $this->use_authentication = true;
  68              }
  69              else {
  70                  throw new Requests_Exception( 'Invalid number of arguments', 'proxyhttpbadargs');
  71              }
  72          }
  73      }
  74  
  75      /**
  76       * Register the necessary callbacks
  77       *
  78       * @since 1.6
  79       * @see curl_before_send
  80       * @see fsockopen_remote_socket
  81       * @see fsockopen_remote_host_path
  82       * @see fsockopen_header
  83       * @param Requests_Hooks $hooks Hook system
  84       */
  85  	public function register(Requests_Hooks &$hooks) {
  86          $hooks->register('curl.before_send', array(&$this, 'curl_before_send'));
  87  
  88          $hooks->register('fsockopen.remote_socket', array(&$this, 'fsockopen_remote_socket'));
  89          $hooks->register('fsockopen.remote_host_path', array(&$this, 'fsockopen_remote_host_path'));
  90          if( $this->use_authentication ) {
  91              $hooks->register('fsockopen.after_headers', array(&$this, 'fsockopen_header'));
  92          }
  93      }
  94  
  95      /**
  96       * Set cURL parameters before the data is sent
  97       *
  98       * @since 1.6
  99       * @param resource $handle cURL resource
 100       */
 101  	public function curl_before_send(&$handle) {
 102          curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
 103          curl_setopt($handle, CURLOPT_PROXY, $this->proxy);
 104  
 105          if ($this->use_authentication) {
 106              curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
 107              curl_setopt($handle, CURLOPT_PROXYUSERPWD, $this->get_auth_string());
 108          }
 109      }
 110  
 111      /**
 112       * Alter remote socket information before opening socket connection
 113       *
 114       * @since 1.6
 115       * @param string $out HTTP header string
 116       */
 117  	public function fsockopen_remote_socket( &$remote_socket ) {
 118          $remote_socket = $this->proxy;
 119      }
 120  
 121      /**
 122       * Alter remote path before getting stream data
 123       *
 124       * @since 1.6
 125       * @param string $out HTTP header string
 126       */
 127  	public function fsockopen_remote_host_path( &$path, $url ) {
 128          $path = $url;
 129      }
 130  
 131      /**
 132       * Add extra headers to the request before sending
 133       *
 134       * @since 1.6
 135       * @param string $out HTTP header string
 136       */
 137  	public function fsockopen_header( &$out ) {
 138          $out .= "Proxy-Authorization: Basic " . base64_encode($this->get_auth_string()) . "\r\n";
 139      }
 140  
 141      /**
 142       * Get the authentication string (user:pass)
 143       *
 144       * @since 1.6
 145       * @return string
 146       */
 147  	public function get_auth_string() {
 148          return $this->user . ':' . $this->pass;
 149      }
 150  }

title

Description

title

Description

title

Description

title

title

Body