Move timeout to global MailSo\Net\ConnectSettings

This commit is contained in:
the-djmaze 2022-12-13 10:27:46 +01:00
parent 3ccf70e5cd
commit d756558303
8 changed files with 19 additions and 27 deletions

View file

@ -69,8 +69,6 @@ class ImapClient extends \MailSo\Net\NetClient
{
$this->aTagTimeouts['*'] = \microtime(true);
$this->SetTimeOuts(10, $oSettings->timeout);
parent::Connect($oSettings);
$this->setCapabilities($this->getResponse('*'));

View file

@ -18,8 +18,7 @@ namespace MailSo\Imap;
class Settings extends \MailSo\Net\ConnectSettings
{
public int
$port = 143,
$timeout = 300;
$port = 143;
public bool
$disable_list_status = false,
@ -61,8 +60,7 @@ class Settings extends \MailSo\Net\ConnectSettings
'force_select' => $this->force_select,
'message_all_headers' => $this->message_all_headers,
'message_list_limit' => $this->message_list_limit,
'search_filter' => $this->message_list_filter,
'timeout' => $this->timeout
'search_filter' => $this->message_list_filter
]
);
}

View file

@ -21,6 +21,11 @@ class ConnectSettings implements \JsonSerializable
public int $port;
/**
* stream timeout in seconds
*/
public int $timeout = 10;
// none, TLS, STARTTLS
public int $type = Enumerations\ConnectionSecurityType::AUTO_DETECT;
// public int $type = Enumerations\ConnectionSecurityType::NONE;
@ -52,6 +57,7 @@ class ConnectSettings implements \JsonSerializable
$object->host = $aSettings['host'];
$object->port = $aSettings['port'];
$object->type = isset($aSettings['type']) ? $aSettings['type'] : $aSettings['secure'];
$object->timeout = isset($aSettings['timeout']) ? $aSettings['timeout'] : 300;
$object->shortLogin = !empty($aSettings['shortLogin']);
$object->ssl = SSLContext::fromArray($aSettings['ssl'] ?? []);
return $object;
@ -65,6 +71,7 @@ class ConnectSettings implements \JsonSerializable
'host' => $this->host,
'port' => $this->port,
'type' => $this->type,
'timeout' => $this->timeout,
'shortLogin' => $this->shortLogin,
'ssl' => $this->ssl
);

View file

@ -34,8 +34,6 @@ abstract class NetClient
private int $iConnectTimeOut = 10;
private int $iSocketTimeOut = 10;
private float $iStartConnectTime = 0;
/**
@ -64,10 +62,9 @@ abstract class NetClient
return $this->Settings->port;
}
public function SetTimeOuts(int $iConnectTimeOut = 10, int $iSocketTimeOut = 10) : void
public function SetTimeOuts(int $iConnectTimeOut = 10) : void
{
$this->iConnectTimeOut = max(5, $iConnectTimeOut);
$this->iSocketTimeOut = max(5, $iSocketTimeOut);
$this->iConnectTimeOut = \max(5, $iConnectTimeOut);
}
/**
@ -148,8 +145,7 @@ abstract class NetClient
$this->writeLog('Connect ('.($this->rConnect ? 'success' : 'failed').')');
if (!$this->rConnect)
{
if (!$this->rConnect) {
$this->writeLogException(
new Exceptions\SocketCanNotConnectToHostException(
\MailSo\Base\Locale::ConvertSystemString($sErrorStr), (int) $iErrorNo,
@ -159,11 +155,9 @@ abstract class NetClient
$this->writeLog((\microtime(true) - $this->iStartConnectTime).' (raw connection)', \LOG_DEBUG);
if ($this->rConnect)
{
if (\MailSo\Base\Utils::FunctionCallable('stream_set_timeout'))
{
\stream_set_timeout($this->rConnect, $this->iSocketTimeOut);
if ($this->rConnect) {
if (\MailSo\Base\Utils::FunctionCallable('stream_set_timeout')) {
\stream_set_timeout($this->rConnect, \max(5, $oSettings->timeout));
}
}
}

View file

@ -807,7 +807,6 @@ trait Messages
$oSmtpClient = new \MailSo\Smtp\SmtpClient();
$oSmtpClient->SetLogger($this->Logger());
$oSmtpClient->SetTimeOuts(10, (int) \RainLoop\Api::Config()->Get('labs', 'smtp_timeout', 60));
$bUsePhpMail = false;
$oAccount->SmtpConnectAndLoginHelper($this->Plugins(), $oSmtpClient, $this->Config(), $bUsePhpMail);

View file

@ -281,8 +281,6 @@ class ActionsAdmin extends Actions
$bSieveResult = false;
$sSieveErrorDesc = '';
$iConnectionTimeout = 5;
$oDomain = $this->DomainProvider()->LoadOrCreateNewFromAction($this, 'test.example.com');
if ($oDomain)
{
@ -292,7 +290,6 @@ class ActionsAdmin extends Actions
{
$oImapClient = new \MailSo\Imap\ImapClient();
$oImapClient->SetLogger($this->Logger());
$oImapClient->SetTimeOuts($iConnectionTimeout);
$oSettings = $oDomain->ImapSettings();
$oImapClient->Connect($oSettings);
@ -335,7 +332,6 @@ class ActionsAdmin extends Actions
{
$oSmtpClient = new \MailSo\Smtp\SmtpClient();
$oSmtpClient->SetLogger($this->Logger());
$oSmtpClient->SetTimeOuts($iConnectionTimeout);
$oSettings = $oDomain->SmtpSettings();
$oSmtpClient->Connect($oSettings, \MailSo\Smtp\SmtpClient::EhloHelper());
@ -371,7 +367,6 @@ class ActionsAdmin extends Actions
{
$oSieveClient = new \MailSo\Sieve\SieveClient();
$oSieveClient->SetLogger($this->Logger());
$oSieveClient->SetTimeOuts($iConnectionTimeout);
$oSettings = $oDomain->SieveSettings();
$oSieveClient->Connect($oSettings);

View file

@ -215,9 +215,9 @@ abstract class Account implements \JsonSerializable
public function ImapConnectAndLoginHelper(\RainLoop\Plugins\Manager $oPlugins, \MailSo\Imap\ImapClient $oImapClient, \RainLoop\Config\Application $oConfig) : bool
{
$oSettings = $this->Domain()->ImapSettings();
$oSettings->timeout = \max($oSettings->timeout, (int) $oConfig->Get('imap', 'timeout', $oSettings->timeout));
$oSettings->Login = $this->IncLogin();
$oSettings->timeout = \max($oSettings->timeout, (int) $oConfig->Get('imap', 'timeout', $oSettings->timeout));
$oSettings->disable_list_status |= !$oConfig->Get('imap', 'use_list_status', true);
$oSettings->disable_metadata |= !!$oConfig->Get('imap', 'disable_metadata', false);
$oSettings->disable_move |= !$oConfig->Get('imap', 'use_move', true);
@ -229,7 +229,7 @@ abstract class Account implements \JsonSerializable
$oSettings->force_select |= !!$oConfig->Get('imap', 'use_force_selection', false);
$oSettings->folder_list_limit = \min($oSettings->folder_list_limit, (int) $oConfig->Get('imap', 'folder_list_limit', 200));
$oSettings->message_all_headers |= !!$oConfig->Get('imap', 'message_all_headers', false);
$oSettings->message_list_limit = \min($oSettings->message_list_limit, (int) $oConfig->Get('imap', 'message_list_count_limit_trigger', 0));
$oSettings->message_list_limit = \max($oSettings->message_list_limit, (int) $oConfig->Get('imap', 'message_list_count_limit_trigger', 0));
$oSettings->search_filter = $oSettings->search_filter ?: \trim($oConfig->Get('imap', 'message_list_permanent_filter', ''));
// $oSettings->thread_limit = \min($oSettings->thread_limit, (int) $oConfig->Get('imap', 'large_thread_limit', 50));
@ -243,6 +243,7 @@ abstract class Account implements \JsonSerializable
public function SmtpConnectAndLoginHelper(\RainLoop\Plugins\Manager $oPlugins, \MailSo\Smtp\SmtpClient $oSmtpClient, \RainLoop\Config\Application $oConfig, bool &$bUsePhpMail = false) : bool
{
$oSettings = $this->Domain()->SmtpSettings();
$oSettings->timeout = \max($oSettings->timeout, (int) $oConfig->Get('labs', 'smtp_timeout', 60));
$oSettings->Login = $this->OutLogin();
$oSettings->usePhpMail = $bUsePhpMail;
$oSettings->Ehlo = \MailSo\Smtp\SmtpClient::EhloHelper();
@ -262,6 +263,7 @@ abstract class Account implements \JsonSerializable
public function SieveConnectAndLoginHelper(\RainLoop\Plugins\Manager $oPlugins, \MailSo\Sieve\SieveClient $oSieveClient, \RainLoop\Config\Application $oConfig)
{
$oSettings = $this->Domain()->SieveSettings();
$oSettings->timeout = \max($oSettings->timeout, (int) $oConfig->Get('labs', 'sieve_timeout', 10));
$oSettings->Login = $this->IncLogin();
$oPlugins->RunHook('sieve.before-connect', array($this, $oSieveClient, $oSettings));

View file

@ -33,7 +33,6 @@ class SieveStorage implements FiltersInterface
{
$oSieveClient = new \MailSo\Sieve\SieveClient();
$oSieveClient->SetLogger($this->oLogger);
$oSieveClient->SetTimeOuts(10, (int) \RainLoop\Api::Config()->Get('labs', 'sieve_timeout', 10));
return $oAccount->SieveConnectAndLoginHelper($this->oPlugins, $oSieveClient, $this->oConfig)
? $oSieveClient
: null;