%PDF- %PDF-
| Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/net/ |
| Current File : //www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/net/abstract.php |
<?php
/*
* Copyright 2004-2014, AfterLogic Corp.
* Licensed under AGPLv3 license or AfterLogic license
* if commercial version of the product was purchased.
* See the LICENSE file for a full license statement.
*/
/**
* @package Api
* @subpackage Net
*/
abstract class CApiNetAbstract
{
/**
* @var resource
*/
protected $rConnect;
/**
* @var string
*/
protected $sHost;
/**
* @var int
*/
protected $iPort;
/**
* @var bool
*/
protected $bUseSsl;
/**
* @var int
*/
protected $iConnectTimeOut;
/**
* @var int
*/
protected $iSocketTimeOut;
/**
* @param string $sHost
* @param int $iPort
* @param bool $bUseSsl = false
* @param int $iConnectTimeOut = null
* @param int $iSocketTimeOut = null
*/
public function __construct($sHost, $iPort, $bUseSsl = false, $iConnectTimeOut = null, $iSocketTimeOut = null)
{
$iConnectTimeOut = (null === $iConnectTimeOut) ? CApi::GetConf('socket.connect-timeout', 5) : $iConnectTimeOut;
$iSocketTimeOut = (null === $iSocketTimeOut) ? CApi::GetConf('socket.get-timeout', 5) : $iSocketTimeOut;
$this->sHost = $sHost;
$this->iPort = $iPort;
$this->bUseSsl = $bUseSsl;
$this->iConnectTimeOut = $iConnectTimeOut;
$this->iSocketTimeOut = $iSocketTimeOut;
}
/**
* @return bool
*/
public function Connect()
{
$sHost = ($this->bUseSsl) ? 'ssl://'.$this->sHost : $this->sHost;
if ($this->IsConnected())
{
CApi::Log('already connected['.$sHost.':'.$this->iPort.']: result = false', ELogLevel::Error);
$this->Disconnect();
return false;
}
$sErrorStr = '';
$iErrorNo = 0;
CApi::Log('start connect to '.$sHost.':'.$this->iPort);
$this->rConnect = @fsockopen($sHost, $this->iPort, $iErrorNo, $sErrorStr, $this->iConnectTimeOut);
if (!$this->IsConnected())
{
CApi::Log('connection error['.$sHost.':'.$this->iPort.']: fsockopen = false ('.$iErrorNo.': '.$sErrorStr.')', ELogLevel::Error);
return false;
}
else
{
CApi::Log('connected');
}
if (\MailSo\Base\Utils::FunctionExistsAndEnabled('stream_set_timeout'))
{
@stream_set_timeout($this->rConnect, $this->iSocketTimeOut);
}
if (\MailSo\Base\Utils::FunctionExistsAndEnabled('@stream_set_blocking'))
{
@stream_set_blocking($this->rConnect, true);
}
return true;
}
/**
* @return bool
*/
public function Disconnect()
{
if ($this->IsConnected())
{
CApi::Log('disconnect from '.$this->sHost.':'.$this->iPort);
@fclose($this->rConnect);
}
$this->rConnect = null;
return true;
}
/**
* @return resource
*/
public function GetConnectResource()
{
return $this->rConnect;
}
/**
* @return bool
*/
public function IsConnected()
{
return is_resource($this->rConnect);
}
/**
* @return string | bool
*/
public function ReadLine()
{
$sLine = @fgets($this->rConnect, 4096);
CApi::Log('NET < '.api_Utils::ShowCRLF($sLine));
if (false === $sLine)
{
$aSocketStatus = @socket_get_status($this->rConnect);
if (isset($aSocketStatus['timed_out']) && $aSocketStatus['timed_out'])
{
CApi::Log('NET[Error] < Socket timeout reached during connection.', ELogLevel::Error);
}
else
{
CApi::Log('NET[Error] < fgets = false', ELogLevel::Error);
}
}
return $sLine;
}
/**
* @param string $sLine
* @return bool
*/
public function WriteLine($sLine, $aHideValues = array())
{
$sLine = $sLine."\r\n";
$sLogLine = (0 < count($aHideValues))
? str_replace($aHideValues, '*******', $sLine) : $sLine;
CApi::Log('NET > '.api_Utils::ShowCRLF($sLogLine));
if (!@fputs($this->rConnect, $sLine))
{
CApi::Log('NET[Error] < Could not send user request', ELogLevel::Error);
return false;
}
return true;
}
}