MultipleStreamWriter() to single WriteStream()

This commit is contained in:
the-djmaze 2023-05-08 14:20:04 +02:00
parent 2d52493b89
commit 8b4674b87f
5 changed files with 48 additions and 59 deletions

View file

@ -609,52 +609,44 @@ abstract class Utils
/** /**
* @param resource $rRead * @param resource $rRead
* @param resource $rWrite
*/ */
public static function MultipleStreamWriter($rRead, array $aWrite, int $iBufferLen = 8192, bool $bResetTimeLimit = true, bool $bFixCrLf = false, bool $bRewindOnComplete = false) : int public static function WriteStream($rRead, $rWrite, int $iBufferLen = 8192, bool $bFixCrLf = false, bool $bRewindOnComplete = false) : int
{ {
$mResult = false; if (!\is_resource($rRead) || !\is_resource($rWrite)) {
if (\is_resource($rRead) && \count($aWrite)) { return -1;
$mResult = 0;
while (!\feof($rRead)) {
$sBuffer = \fread($rRead, $iBufferLen);
if (false === $sBuffer) {
$mResult = false;
break;
}
if ('' === $sBuffer) {
break;
}
if ($bFixCrLf) {
$sBuffer = \str_replace("\n", "\r\n", \str_replace("\r", '', $sBuffer));
}
$mResult += \strlen($sBuffer);
foreach ($aWrite as $rWriteStream) {
$mWriteResult = \fwrite($rWriteStream, $sBuffer);
if (false === $mWriteResult) {
$mResult = false;
break 2;
}
}
if ($bResetTimeLimit) {
static::ResetTimeLimit();
}
}
} }
if ($mResult && $bRewindOnComplete) { $iResult = 0;
foreach ($aWrite as $rWriteStream) {
if (\is_resource($rWriteStream)) { while (!\feof($rRead)) {
\rewind($rWriteStream); $sBuffer = \fread($rRead, $iBufferLen);
} if (false === $sBuffer) {
return -1;
} }
if ('' === $sBuffer) {
break;
}
if ($bFixCrLf) {
$sBuffer = \str_replace("\n", "\r\n", \str_replace("\r", '', $sBuffer));
}
$iResult += \strlen($sBuffer);
if (false === \fwrite($rWrite, $sBuffer)) {
return -1;
}
static::ResetTimeLimit();
} }
return $mResult; if ($bRewindOnComplete) {
\rewind($rWrite);
}
return $iResult;
} }
public static function Utf7ModifiedToUtf8(string $sStr) : string public static function Utf7ModifiedToUtf8(string $sStr) : string

View file

@ -173,7 +173,7 @@ trait Messages
{ {
$this->writeLog('Write to connection stream', \LOG_INFO); $this->writeLog('Write to connection stream', \LOG_INFO);
\MailSo\Base\Utils::MultipleStreamWriter($rMessageStream, array($this->ConnectionResource())); \MailSo\Base\Utils::WriteStream($rMessageStream, $this->ConnectionResource());
$this->sendRaw(''); $this->sendRaw('');
$oResponses = $this->getResponse(); $oResponses = $this->getResponse();

View file

@ -152,15 +152,12 @@ trait Attachments
unset($sContentType, $sFileName, $sMimeIndex); unset($sContentType, $sFileName, $sMimeIndex);
if (\is_resource($rResource)) if (\is_resource($rResource)) {
{
$sHash = \MailSo\Base\Utils::Sha1Rand($sFileNameIn.'~'.$sContentTypeIn); $sHash = \MailSo\Base\Utils::Sha1Rand($sFileNameIn.'~'.$sContentTypeIn);
$rTempResource = $oFileProvider->GetFile($oAccount, $sHash, 'wb+'); $rTempResource = $oFileProvider->GetFile($oAccount, $sHash, 'wb+');
if (\is_resource($rTempResource)) if (\is_resource($rTempResource)) {
{ if (-1 < \MailSo\Base\Utils::WriteStream($rResource, $rTempResource)) {
if (false !== \MailSo\Base\Utils::MultipleStreamWriter($rResource, array($rTempResource)))
{
$sResultHash = $sHash; $sResultHash = $sHash;
} }

View file

@ -113,8 +113,7 @@ trait Messages
if ($oMessage) { if ($oMessage) {
$rMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource(); $rMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource();
$iMessageStreamSize = \MailSo\Base\Utils::MultipleStreamWriter( $iMessageStreamSize = \MailSo\Base\Utils::WriteStream($oMessage->ToStream(false), $rMessageStream, 8192, true);
$oMessage->ToStream(false), array($rMessageStream), 8192, true, true);
if (false !== $iMessageStreamSize) { if (false !== $iMessageStreamSize) {
$sMessageId = $oMessage->MessageId(); $sMessageId = $oMessage->MessageId();
@ -168,8 +167,9 @@ trait Messages
if ($oMessage) { if ($oMessage) {
$rMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource(); $rMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource();
$iMessageStreamSize = \MailSo\Base\Utils::MultipleStreamWriter( $iMessageStreamSize = \MailSo\Base\Utils::WriteStream(
$oMessage->ToStream(true), array($rMessageStream), 8192, true, true, true); $oMessage->ToStream(true), $rMessageStream, 8192, true, true
);
if (false !== $iMessageStreamSize) { if (false !== $iMessageStreamSize) {
$bDsn = !empty($this->GetActionParam('dsn', 0)); $bDsn = !empty($this->GetActionParam('dsn', 0));
@ -217,8 +217,9 @@ trait Messages
} else { } else {
$rAppendMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource(); $rAppendMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource();
$iAppendMessageStreamSize = \MailSo\Base\Utils::MultipleStreamWriter( $iAppendMessageStreamSize = \MailSo\Base\Utils::WriteStream(
$oMessage->ToStream(false), array($rAppendMessageStream), 8192, true, true, true); $oMessage->ToStream(false), $rAppendMessageStream, 8192, true, true
);
$this->Plugins()->RunHook('filter.send-message-stream', $this->Plugins()->RunHook('filter.send-message-stream',
array($oAccount, &$rAppendMessageStream, &$iAppendMessageStreamSize)); array($oAccount, &$rAppendMessageStream, &$iAppendMessageStreamSize));
@ -317,8 +318,9 @@ trait Messages
if ($oMessage) { if ($oMessage) {
$rMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource(); $rMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource();
$iMessageStreamSize = \MailSo\Base\Utils::MultipleStreamWriter( $iMessageStreamSize = \MailSo\Base\Utils::WriteStream(
$oMessage->ToStream(true), array($rMessageStream), 8192, true, true, true); $oMessage->ToStream(true), $rMessageStream, 8192, true, true
);
if (false !== $iMessageStreamSize) { if (false !== $iMessageStreamSize) {
$this->smtpSendMessage($oAccount, $oMessage, $rMessageStream, $iMessageStreamSize, false); $this->smtpSendMessage($oAccount, $oMessage, $rMessageStream, $iMessageStreamSize, false);

View file

@ -28,12 +28,10 @@ class FileStorage implements \RainLoop\Providers\Files\IFiles
public function PutFile(\RainLoop\Model\Account $oAccount, string $sKey, /*resource*/ $rSource) : bool public function PutFile(\RainLoop\Model\Account $oAccount, string $sKey, /*resource*/ $rSource) : bool
{ {
$bResult = false; $bResult = false;
if ($rSource) if ($rSource) {
{
$rOpenOutput = \fopen($this->generateFullFileName($oAccount, $sKey, true), 'w+b'); $rOpenOutput = \fopen($this->generateFullFileName($oAccount, $sKey, true), 'w+b');
if ($rOpenOutput) if ($rOpenOutput) {
{ $bResult = (false !== \MailSo\Base\Utils::WriteStream($rSource, $rOpenOutput));
$bResult = (false !== \MailSo\Base\Utils::MultipleStreamWriter($rSource, array($rOpenOutput)));
\fclose($rOpenOutput); \fclose($rOpenOutput);
} }
} }