Beispiel #1
0
 public cMailboxCache(cCallbackSynchroniser pSynchroniser, fMailboxCacheDataItems pMailboxCacheDataItems, cCommandPartFactory pCommandPartFactory, cCapabilities pCapabilities, Action <eConnectionState, cTrace.cContext> pSetState)
 {
     mSynchroniser          = pSynchroniser ?? throw new ArgumentNullException(nameof(pSynchroniser));
     mMailboxCacheDataItems = pMailboxCacheDataItems;
     mCommandPartFactory    = pCommandPartFactory ?? throw new ArgumentNullException(nameof(pCommandPartFactory));
     mCapabilities          = pCapabilities ?? throw new ArgumentNullException(nameof(pCapabilities));
     mSetState = pSetState ?? throw new ArgumentNullException(nameof(pSetState));
 }
Beispiel #2
0
        private static void _Tests_MailboxName(string pMailboxPath, bool pExpectFail, cTrace.cContext pParentContext)
        {
            var lContext = pParentContext.NewMethod(nameof(cMailboxName), nameof(_Tests_MailboxName), pMailboxPath);

            cCommandPartFactory lFactory;
            cCommandPart        lCommandPart;
            cBytesCursor        lCursor;
            IList <byte>        lEncodedMailboxPath;
            cMailboxName        lMailboxName;

            lFactory = new cCommandPartFactory(false, null);

            if (!lFactory.TryAsMailbox(pMailboxPath, '/', out lCommandPart, out _))
            {
                throw new cTestsException($"mailboxname conversion failed on '{pMailboxPath}'");
            }
            cTextCommandPart lTCP = lCommandPart as cTextCommandPart;

            lCursor = new cBytesCursor(lTCP.Bytes);
            lCursor.GetAString(out lEncodedMailboxPath);

            if (cMailboxName.TryConstruct(lEncodedMailboxPath, cASCII.SLASH, false, out lMailboxName))
            {
                if (pExpectFail)
                {
                    throw new cTestsException($"mailboxname construction succeeded on '{pMailboxPath}' and it shouldn't have");
                }
            }
            else
            {
                if (!pExpectFail)
                {
                    throw new cTestsException($"mailboxname construction failed on '{pMailboxPath}' and it shouldn't have");
                }
                return;
            }

            if (lMailboxName.Path != pMailboxPath)
            {
                throw new cTestsException($"mailboxname conversion failed on '{pMailboxPath}' -> {lTCP.Bytes} -> '{lMailboxName}'", lContext);
            }

            lFactory = new cCommandPartFactory(true, null);
            lFactory.TryAsMailbox(pMailboxPath, '/', out lCommandPart, out _);
            lTCP    = lCommandPart as cTextCommandPart;
            lCursor = new cBytesCursor(lTCP.Bytes);
            lCursor.GetAString(out lEncodedMailboxPath);
            cMailboxName.TryConstruct(lEncodedMailboxPath, cASCII.SLASH, true, out lMailboxName);
            if (lMailboxName.Path != pMailboxPath)
            {
                throw new cTestsException($"mailboxname conversion failed on '{pMailboxPath}' -> {lTCP.Bytes} -> '{lMailboxName}'", lContext);
            }
        }
Beispiel #3
0
            public void SetEncoding(Encoding pEncoding, cTrace.cContext pParentContext)
            {
                var lContext = pParentContext.NewMethod(nameof(cSession), nameof(SetEncoding), pEncoding.WebName);

                if ((EnabledExtensions & fEnableableExtensions.utf8) != 0 || pEncoding == null)
                {
                    mEncodingPartFactory = mCommandPartFactory;
                }
                else
                {
                    mEncodingPartFactory = new cCommandPartFactory(false, pEncoding);
                }
            }
Beispiel #4
0
            public void SetEnabled(cTrace.cContext pParentContext)
            {
                var lContext = pParentContext.NewMethod(nameof(cSession), nameof(SetEnabled));

                if (mDisposed)
                {
                    throw new ObjectDisposedException(nameof(cSession));
                }
                if (_ConnectionState != eConnectionState.authenticated)
                {
                    throw new InvalidOperationException(kInvalidOperationExceptionMessage.NotAuthenticated);
                }

                bool lUTF8Enabled = (EnabledExtensions & fEnableableExtensions.utf8) != 0;

                if (lUTF8Enabled)
                {
                    mCommandPartFactory  = new cCommandPartFactory(true, null);
                    mEncodingPartFactory = mCommandPartFactory;
                }

                mStatusAttributes = mMailboxCacheDataItems & fMailboxCacheDataItems.allstatus;
                if (!_Capabilities.CondStore)
                {
                    mStatusAttributes &= ~fMailboxCacheDataItems.highestmodseq;
                }

                mMailboxCache = new cMailboxCache(mSynchroniser, mMailboxCacheDataItems, mCommandPartFactory, _Capabilities, ZSetState);

                mPipeline.Install(new cResponseTextCodeParserSelect(_Capabilities));
                mPipeline.Install(new cResponseDataParserSelect());
                mPipeline.Install(new cResponseDataParserFetch());
                mPipeline.Install(new cResponseDataParserList(lUTF8Enabled));
                mPipeline.Install(new cResponseDataParserLSub(lUTF8Enabled));
                if (_Capabilities.ESearch || _Capabilities.ESort)
                {
                    mPipeline.Install(new cResponseDataParserESearch());
                }

                mPipeline.Enable(mMailboxCache, _Capabilities, lContext);

                ZSetState(eConnectionState.enabled, lContext);
            }
Beispiel #5
0
            // (note for when adding more: they need to be disposed)

            public cSession(cCallbackSynchroniser pSynchroniser, fCapabilities pIgnoreCapabilities, fMailboxCacheDataItems pMailboxCacheDataItems, cBatchSizerConfiguration pNetworkWriteConfiguration, cIdleConfiguration pIdleConfiguration, cBatchSizerConfiguration pFetchCacheItemsConfiguration, cBatchSizerConfiguration pFetchBodyReadConfiguration, Encoding pEncoding, cTrace.cContext pParentContext)
            {
                var lContext = pParentContext.NewObject(nameof(cSession), pIgnoreCapabilities, pMailboxCacheDataItems, pNetworkWriteConfiguration, pIdleConfiguration, pFetchCacheItemsConfiguration, pFetchBodyReadConfiguration);

                mSynchroniser          = pSynchroniser ?? throw new ArgumentNullException(nameof(pSynchroniser));
                mIgnoreCapabilities    = pIgnoreCapabilities;
                mMailboxCacheDataItems = pMailboxCacheDataItems;

                mPipeline = new cCommandPipeline(pSynchroniser, ZDisconnected, pNetworkWriteConfiguration, pIdleConfiguration, lContext);

                mFetchCacheItemsSizer = new cBatchSizer(pFetchCacheItemsConfiguration);
                mFetchBodyReadSizer   = new cBatchSizer(pFetchBodyReadConfiguration);

                mCommandPartFactory = new cCommandPartFactory(false, null);

                if (pEncoding == null)
                {
                    mEncodingPartFactory = mCommandPartFactory;
                }
                else
                {
                    mEncodingPartFactory = new cCommandPartFactory(false, pEncoding);
                }
            }