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->aTagTimeouts['*'] = \microtime(true);
$this->SetTimeOuts(10, $oSettings->timeout);
parent::Connect($oSettings); parent::Connect($oSettings);
$this->setCapabilities($this->getResponse('*')); $this->setCapabilities($this->getResponse('*'));

View file

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

View file

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

View file

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

View file

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

View file

@ -281,8 +281,6 @@ class ActionsAdmin extends Actions
$bSieveResult = false; $bSieveResult = false;
$sSieveErrorDesc = ''; $sSieveErrorDesc = '';
$iConnectionTimeout = 5;
$oDomain = $this->DomainProvider()->LoadOrCreateNewFromAction($this, 'test.example.com'); $oDomain = $this->DomainProvider()->LoadOrCreateNewFromAction($this, 'test.example.com');
if ($oDomain) if ($oDomain)
{ {
@ -292,7 +290,6 @@ class ActionsAdmin extends Actions
{ {
$oImapClient = new \MailSo\Imap\ImapClient(); $oImapClient = new \MailSo\Imap\ImapClient();
$oImapClient->SetLogger($this->Logger()); $oImapClient->SetLogger($this->Logger());
$oImapClient->SetTimeOuts($iConnectionTimeout);
$oSettings = $oDomain->ImapSettings(); $oSettings = $oDomain->ImapSettings();
$oImapClient->Connect($oSettings); $oImapClient->Connect($oSettings);
@ -335,7 +332,6 @@ class ActionsAdmin extends Actions
{ {
$oSmtpClient = new \MailSo\Smtp\SmtpClient(); $oSmtpClient = new \MailSo\Smtp\SmtpClient();
$oSmtpClient->SetLogger($this->Logger()); $oSmtpClient->SetLogger($this->Logger());
$oSmtpClient->SetTimeOuts($iConnectionTimeout);
$oSettings = $oDomain->SmtpSettings(); $oSettings = $oDomain->SmtpSettings();
$oSmtpClient->Connect($oSettings, \MailSo\Smtp\SmtpClient::EhloHelper()); $oSmtpClient->Connect($oSettings, \MailSo\Smtp\SmtpClient::EhloHelper());
@ -371,7 +367,6 @@ class ActionsAdmin extends Actions
{ {
$oSieveClient = new \MailSo\Sieve\SieveClient(); $oSieveClient = new \MailSo\Sieve\SieveClient();
$oSieveClient->SetLogger($this->Logger()); $oSieveClient->SetLogger($this->Logger());
$oSieveClient->SetTimeOuts($iConnectionTimeout);
$oSettings = $oDomain->SieveSettings(); $oSettings = $oDomain->SieveSettings();
$oSieveClient->Connect($oSettings); $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 public function ImapConnectAndLoginHelper(\RainLoop\Plugins\Manager $oPlugins, \MailSo\Imap\ImapClient $oImapClient, \RainLoop\Config\Application $oConfig) : bool
{ {
$oSettings = $this->Domain()->ImapSettings(); $oSettings = $this->Domain()->ImapSettings();
$oSettings->timeout = \max($oSettings->timeout, (int) $oConfig->Get('imap', 'timeout', $oSettings->timeout));
$oSettings->Login = $this->IncLogin(); $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_list_status |= !$oConfig->Get('imap', 'use_list_status', true);
$oSettings->disable_metadata |= !!$oConfig->Get('imap', 'disable_metadata', false); $oSettings->disable_metadata |= !!$oConfig->Get('imap', 'disable_metadata', false);
$oSettings->disable_move |= !$oConfig->Get('imap', 'use_move', true); $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->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->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_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->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)); // $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 public function SmtpConnectAndLoginHelper(\RainLoop\Plugins\Manager $oPlugins, \MailSo\Smtp\SmtpClient $oSmtpClient, \RainLoop\Config\Application $oConfig, bool &$bUsePhpMail = false) : bool
{ {
$oSettings = $this->Domain()->SmtpSettings(); $oSettings = $this->Domain()->SmtpSettings();
$oSettings->timeout = \max($oSettings->timeout, (int) $oConfig->Get('labs', 'smtp_timeout', 60));
$oSettings->Login = $this->OutLogin(); $oSettings->Login = $this->OutLogin();
$oSettings->usePhpMail = $bUsePhpMail; $oSettings->usePhpMail = $bUsePhpMail;
$oSettings->Ehlo = \MailSo\Smtp\SmtpClient::EhloHelper(); $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) public function SieveConnectAndLoginHelper(\RainLoop\Plugins\Manager $oPlugins, \MailSo\Sieve\SieveClient $oSieveClient, \RainLoop\Config\Application $oConfig)
{ {
$oSettings = $this->Domain()->SieveSettings(); $oSettings = $this->Domain()->SieveSettings();
$oSettings->timeout = \max($oSettings->timeout, (int) $oConfig->Get('labs', 'sieve_timeout', 10));
$oSettings->Login = $this->IncLogin(); $oSettings->Login = $this->IncLogin();
$oPlugins->RunHook('sieve.before-connect', array($this, $oSieveClient, $oSettings)); $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 = new \MailSo\Sieve\SieveClient();
$oSieveClient->SetLogger($this->oLogger); $oSieveClient->SetLogger($this->oLogger);
$oSieveClient->SetTimeOuts(10, (int) \RainLoop\Api::Config()->Get('labs', 'sieve_timeout', 10));
return $oAccount->SieveConnectAndLoginHelper($this->oPlugins, $oSieveClient, $this->oConfig) return $oAccount->SieveConnectAndLoginHelper($this->oPlugins, $oSieveClient, $this->oConfig)
? $oSieveClient ? $oSieveClient
: null; : null;