diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Response.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Response.php index e561caca0..e946fc6f7 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Response.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Response.php @@ -11,6 +11,8 @@ namespace MailSo\Imap; +use \MailSo\Imap\Enumerations\ResponseType; + /** * @category MailSo * @package Imap @@ -20,12 +22,12 @@ class Response /** * @var array */ - public $ResponseList; + public $ResponseList = array(); /** * @var array | null */ - public $OptionalResponse; + public $OptionalResponse = null; /** * @var string @@ -35,34 +37,23 @@ class Response /** * @var string */ - public $HumanReadable; + public $HumanReadable = ''; /** * @var bool */ - public $IsStatusResponse; + public $IsStatusResponse = false; /** - * @var string + * @var int */ - public $ResponseType; + public $ResponseType = 0; /** * @var string */ public $Tag; - function __construct() - { - $this->ResponseList = array(); - $this->OptionalResponse = null; - $this->StatusOrIndex = ''; - $this->HumanReadable = ''; - $this->IsStatusResponse = false; - $this->ResponseType = \MailSo\Imap\Enumerations\ResponseType::UNKNOWN; - $this->Tag = ''; - } - private function recToLine(array $aList) : string { $aResult = array(); @@ -73,6 +64,25 @@ class Response return \implode(' ', $aResult); } + public function setStatus(string $value) : void + { + $value = \strtoupper($value); + $this->StatusOrIndex = $value; + $this->IsStatusResponse = \defined("\\MailSo\\Imap\\Enumerations\\ResponseStatus::{$value}"); + } + + public function setTag(string $value) : void + { + $this->Tag = $value; + if ('+' === $value) { + $this->ResponseType = ResponseType::CONTINUATION; + } else if ('*' === $value) { + $this->ResponseType = ResponseType::UNTAGGED; + } else { + $this->ResponseType = ResponseType::UNKNOWN; + } + } + public function ToLine() : string { return $this->recToLine($this->ResponseList); diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Traits/ResponseParser.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Traits/ResponseParser.php index a9edc3b0e..b5c41a5ca 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Traits/ResponseParser.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Traits/ResponseParser.php @@ -12,7 +12,6 @@ namespace MailSo\Imap\Traits; use \MailSo\Imap\Response; -use \MailSo\Imap\Enumerations\ResponseStatus; use \MailSo\Imap\Enumerations\ResponseType; use \MailSo\Imap\Exceptions\ResponseNotFoundException; @@ -84,9 +83,6 @@ trait ResponseParser $bIsGotoDefault = false; - $bCountOneInited = false; - $bCountTwoInited = false; - $sAtomBuilder = $bTreatAsAtom ? '' : null; $aList = array(); if ($bRoot) @@ -258,15 +254,12 @@ trait ResponseParser if ($bRoot && $oImapResponse->IsStatusResponse) { $iPos = $iBufferEndIndex; - - while ($iPos > $iCharBlockStartPos && $this->sResponseBuffer[$iCharBlockStartPos] === ' ') - { - ++$iCharBlockStartPos; + if ($iPos > $iCharBlockStartPos) { + $iCharBlockStartPos += \strspn($this->sResponseBuffer, ' ', $iCharBlockStartPos, $iPos - $iCharBlockStartPos); } } - $bIsAtomDone = false; - while (!$bIsAtomDone && ($iPos <= $iBufferEndIndex)) + while ($iPos <= $iBufferEndIndex) { $sCharDef = $this->sResponseBuffer[$iPos]; switch (true) @@ -282,8 +275,7 @@ trait ResponseParser $sAtomBuilder .= \substr($this->sResponseBuffer, $iCharBlockStartPos, $iPos - $iCharBlockStartPos + 1); - ++$iPos; - $this->iResponseBufParsedPos = $iPos; + $this->iResponseBufParsedPos = ++$iPos; $sListBlock = $this->partialParseResponseBranch($oImapResponse, true, null === $sPreviousAtomUpperCase ? '' : \strtoupper($sPreviousAtomUpperCase), @@ -300,8 +292,7 @@ trait ResponseParser case ' ' === $sCharDef: case ')' === $sCharDef && '(' === $sOpenBracket: case ']' === $sCharDef && '[' === $sOpenBracket: - $bIsAtomDone = true; - break; + break 2; default: ++$iPos; break; @@ -330,52 +321,20 @@ trait ResponseParser if ($bRoot) { -// if (1 === \count($aList)) - if (!$bCountOneInited && 1 === \count($aList)) -// if (isset($aList[0]) && !isset($aList[1])) // fast 1 === \count($aList) + if (!isset($oImapResponse->Tag) && 1 === \count($aList)) { - $bCountOneInited = true; - - $oImapResponse->Tag = $aList[0]; - if ('+' === $oImapResponse->Tag) - { - $oImapResponse->ResponseType = ResponseType::CONTINUATION; - } - else if ('*' === $oImapResponse->Tag) - { - $oImapResponse->ResponseType = ResponseType::UNTAGGED; - } - else if ($this->getCurrentTag() === $oImapResponse->Tag) + $oImapResponse->setTag($aList[0]); + if ($this->getCurrentTag() === $oImapResponse->Tag) { $oImapResponse->ResponseType = ResponseType::TAGGED; } - else - { - $oImapResponse->ResponseType = ResponseType::UNKNOWN; - } } -// else if (2 === \count($aList)) - else if (!$bCountTwoInited && 2 === \count($aList)) -// else if (isset($aList[1]) && !isset($aList[2])) // fast 2 === \count($aList) + else if (!isset($oImapResponse->StatusOrIndex) && 2 === \count($aList)) { - $bCountTwoInited = true; - - $oImapResponse->StatusOrIndex = \strtoupper($aList[1]); - - if ($oImapResponse->StatusOrIndex == ResponseStatus::OK || - $oImapResponse->StatusOrIndex == ResponseStatus::NO || - $oImapResponse->StatusOrIndex == ResponseStatus::BAD || - $oImapResponse->StatusOrIndex == ResponseStatus::BYE || - $oImapResponse->StatusOrIndex == ResponseStatus::PREAUTH) - { - $oImapResponse->IsStatusResponse = true; - } + $oImapResponse->setStatus($aList[1]); } - else if (ResponseType::CONTINUATION === $oImapResponse->ResponseType) - { - $oImapResponse->HumanReadable = $sLastCharBlock; - } - else if ($oImapResponse->IsStatusResponse) + else if (ResponseType::CONTINUATION === $oImapResponse->ResponseType + || $oImapResponse->IsStatusResponse) { $oImapResponse->HumanReadable = $sLastCharBlock; }