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()
\nMaximum length in get method reached(".strlen($this->path."?".$data).") :
\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()
\nEnvoie des données impossible sur :
\n".$host);
$res = false;
}
fclose($socket);
}
else
{
fianet_insert_log("fianet_socket.php - connect()
\nConnexion socket impossible :
\n".$host);
$res = false;
}
return ($res);
}
}