/modules/fianetfraud/fianet/classes/fianet_socket.php
http://marocmall.googlecode.com/ · PHP · 172 lines · 154 code · 14 blank · 4 comment · 24 complexity · d1656682167279bb2eb202a36e7fd017 MD5 · raw file
- <?php
-
-
- class fianet_socket
- {
- var $host;
- var $port;
-
- var $is_ssl = false;
-
- var $method = 'GET';
-
- var $data = array();
- var $path;
-
- function fianet_socket($fianet_url, $fianet_file, $method = 'GET', $data = array())
- {
- if (is_array($data))
- {
- $this->data = $data;
- }
- $this->parse_fianet_url($fianet_url, $fianet_file);
- if (strtoupper($method) == 'GET' || strtoupper($method) == 'POST')
- {
- $this->method = strtoupper($method);
- }
- }
-
- function parse_fianet_url($fianet_url, $fianet_file)
- {
- if (ereg("^http://", $fianet_url))
- {
- $this->is_ssl = false;
- $this->host = eregi_replace("http://([^/]+)/.+", "\\1", $fianet_url);
- $this->port = 80;
- $this->path = eregi_replace("http://[^/]+/", "/", $fianet_url) . $fianet_file;
- }
- if (ereg("^https://", $fianet_url))
- {
- $this->is_ssl = true;
- $this->host = eregi_replace("https://([^/]+)/.+", "\\1", $fianet_url);
- $this->port = 443;
- $this->path = eregi_replace("https://[^/]+/", "/", $fianet_url) . $fianet_file;
- }
- //debug($this->path);
- }
-
- function determine_boundary()
- {
- srand((double)microtime() * 1000000);
- return ("---------------------".substr(md5(rand(0,32000)),0,10));
- }
-
- function build_header($boundary, $data)
- {
- if ($this->method == 'POST')
- {
- $header = "POST ".$this->path." HTTP/1.0\r\n";
- $header .= "Host: ".$this->host."\r\n";
- $header .= "Content-type: application/x-www-form-urlencoded; boundary=$boundary\r\n";
- $header .= "Content-length: " . strlen($data) . "\r\n\r\n";
- }
- elseif ($this->method == 'GET')
- {
- if ($data != '')
- {
- if (strlen($this->path."?".$data) > 2048)
- {
- fianet_insert_log("fianet_socket.php - build_header() <br />\nMaximum length in get method reached(".strlen($this->path."?".$data).") : <br />\n".$this->path."?".$data);
- }
- $header = "GET ".$this->path."?".$data." HTTP/1.1\r\n";
- }
- else
- {
- $header = "GET ".$this->path." HTTP/1.1\r\n";
- }
- $header .= "Host: ".$this->host."\r\n";
- $header .= "Connection: close\r\n\r\n";
- }
- return ($header);
- }
-
- function build_data($boundary)
- {
- $data = "";
- foreach($this->data as $index => $value)
- {
- if ($data == '')
- {
- $data .= $index . '='. urlencode($value);
- }
- else
- {
- $data .= '&'.$index . '='. urlencode($value);
- }
- }
- return ($data);
- }
-
- function send()
- {
- $boundary = $this->determine_boundary();
- $data = $this->build_data($boundary);
- $header = $this->build_header($boundary, $data);
- //debug($header, 'header');
- //debug(htmlentities($data), 'data');
- $response = $this->connect($header, $data);
- if ($response != false)
- {
- $d['header'] = $response['header'];
- $d['data'] = htmlentities($response['data']);
- //debug($d, 'Réponse');
- }
-
- return ($response);
- }
-
- function connect($header, $data)
- {
- $res['header'] = "";
- $res['data'] = "";
- if ($this->is_ssl)
- {
- $host = 'ssl://'.$this->host . ':'.$this->port;
- $socket = fsockopen ('ssl://'.$this->host, $this->port);
- }
- else
- {
- $host = $this->host . ':' . $this->port;
- $socket = fsockopen ($this->host, $this->port);
- }
- if ($socket !== false)
- {
- $data_reached = false;
- if (@fputs($socket, $header.$data))
- {
- while (!feof($socket))
- {
- $line = fgets($socket);
- if (!$data_reached)
- {
- if ($line == "\r\n")
- {
- $data_reached = true;
- }
- else
- {
- $res['header'] .= $line;
- }
- }
- else
- {
- $res['data'] .= $line;
- }
- }
- }
- else
- {
- fianet_insert_log("fianet_socket.php - connect() <br />\nEnvoie des données impossible sur : <br />\n".$host);
- $res = false;
- }
- fclose($socket);
- }
- else
- {
- fianet_insert_log("fianet_socket.php - connect() <br />\nConnexion socket impossible : <br />\n".$host);
- $res = false;
- }
- return ($res);
- }
- }