Example #1
0
 internal ImapCopiedUidSet(long uidValidity, ImapSequenceSet copiedUidSet, ImapSequenceSet assignedUidSet)
     : base(true)
 {
     this.UidValidity = uidValidity;
       this.CopiedUidSet = copiedUidSet;
       this.AssignedUidSet = assignedUidSet;
 }
        public ImapMessageNotFoundException(string message, ImapSequenceSet sequenceOrUidSet)
            : base(message)
        {
            if (sequenceOrUidSet == null)
            throw new ArgumentNullException("sequenceOrUidSet");

              this.sequenceOrUidSet = sequenceOrUidSet;
        }
 internal ImapWebClientFetchMessageBodyStream(ImapSession session,
                                          bool keepAlive,
                                          bool peek,
                                          ImapSequenceSet fetchUidSet,
                                          int fetchBlockSize,
                                          int readWriteTimeout)
     : this(session, keepAlive, peek, fetchUidSet, null, null, fetchBlockSize, readWriteTimeout)
 {
 }
        private ImapWebResponse GetFetchResponse(ImapSequenceSet requestedUidSet)
        {
            var section = ImapStyleUriParser.GetSection(RequestUri);
              var partial = ImapStyleUriParser.GetPartial(RequestUri);

              if (string.IsNullOrEmpty(section) && partial == null)
            return GetFullFetchResponse(requestedUidSet);
              else
            return GetPartialFetchResponse(requestedUidSet, section, partial);
        }
 public ImapMatchedSequenceSet(ImapSequenceSet sequenceSet)
     : base(sequenceSet.IsUidSet)
 {
     this.SequenceSet = sequenceSet;
       this.IsSavedResult = false;
       this.Tag = null;
       this.HighestModSeq = null;
       this.Min = null;
       this.Max = null;
       this.Count = null;
 }
        internal ImapWebClientFetchMessageBodyStream(ImapSession session,
                                                 bool keepAlive,
                                                 bool peek,
                                                 ImapSequenceSet fetchUidSet,
                                                 string fetchSection,
                                                 ImapPartialRange? fetchRange,
                                                 int fetchBlockSize,
                                                 int readWriteTimeout)
            : base(session, peek, fetchUidSet, fetchSection, fetchRange, fetchBlockSize)
        {
            this.keepAlive = keepAlive;

              ReadTimeout   = readWriteTimeout;
              WriteTimeout  = readWriteTimeout;
        }
        protected ImapWebResponse GetCopyResponse(ImapSequenceSet requestUidSet)
        {
            ImapCopiedUidSet copiedUids;
              ImapMailbox createdMailbox = null;

              var mailbox = GetDestinationMailbox();
              var response = new ImapWebResponse(AllowCreateMailbox
                                         ? Session.Copy(requestUidSet, mailbox, out copiedUids, out createdMailbox)
                                         : Session.Copy(requestUidSet, mailbox, out copiedUids));

              if (response.Result.Succeeded) {
            if (createdMailbox != null) {
              if (Subscription) {
            Session.Subscribe(createdMailbox);
            Session.Lsub(createdMailbox);
              }
              else {
            Session.List(createdMailbox);
              }

              response.Mailboxes = new[] {createdMailbox};
            }

            if (copiedUids != null) {
              var builder = new ImapUriBuilder(DestinationUri);

              builder.UidValidity = copiedUids.UidValidity;

              if (copiedUids.AssignedUidSet.IsSingle)
            builder.Uid = copiedUids.AssignedUidSet.ToNumber();
              else
            builder.SearchCriteria = ImapSearchCriteria.Uid(copiedUids.AssignedUidSet);

              response.SetResponseUri(builder.Uri);
            }
              }

              return response;
        }
Example #8
0
        public static ImapSearchCriteria SequenceOrUidSet(ImapSequenceSet sequenceOrUidSet)
        {
            if (sequenceOrUidSet == null)
            throw new ArgumentNullException("sequenceOrUidSet");
              else if (sequenceOrUidSet.IsEmpty)
            throw new ArgumentException("empty set", "sequenceOrUidSet");

              if (sequenceOrUidSet.IsUidSet)
            return new ImapSearchCriteria("UID", sequenceOrUidSet.ToString());
              else
            return new ImapSearchCriteria(sequenceOrUidSet.ToString());
        }
 public MessageSet(ImapOpenedMailboxInfo mailbox, ImapSequenceSet sequenceOrUidSet)
     : base(mailbox)
 {
     this.sequenceOrUidSet = sequenceOrUidSet;
 }
Example #10
0
        private void TestMessage(int existMessageCount, ImapCapability[] capabilities, ImapSequenceSet sequenceOrUidSet, Action<ImapPseudoServer, ImapMessageInfoBase, ImapMessageInfo[]> action)
        {
            TestUtils.TestAuthenticated(capabilities, delegate(ImapPseudoServer server, ImapClient client) {
            // LIST
            server.EnqueueTaggedResponse("* LIST () \".\" INBOX\r\n" +
                                     "$tag OK done\r\n");
            // SELECT
            server.EnqueueTaggedResponse(string.Format("* EXISTS {0}\r\n", existMessageCount) +
                                     "* OK [UIDVALIDITY 1]\r\n" +
                                     "$tag OK done\r\n");

            using (var inbox = client.OpenInbox()) {
              server.DequeueRequest(); // LIST
              server.DequeueRequest(); // SELECT

              var messages = new ImapMessageInfo[0];

              if (0 < existMessageCount) {
            // NOOP
            server.EnqueueTaggedResponse("$tag OK done\r\n");
            // FETCH
            var fetchResp = new StringBuilder();

            for (var seq = 1; seq <= existMessageCount; seq++) {
              fetchResp.AppendFormat("* FETCH {0} (UID {0})\r\n", seq);
            }

            fetchResp.Append("$tag OK done\r\n");

            server.EnqueueTaggedResponse(fetchResp.ToString());

            messages = inbox.GetMessages().ToArray();

            server.DequeueRequest(); // NOOP
            server.DequeueRequest(); // FETCH
              }

              try {
            var messageSet = new MessageSet(inbox, sequenceOrUidSet);

            Assert.AreSame(messageSet.Client, client);
            Assert.AreSame(messageSet.Mailbox, inbox);
            Assert.AreEqual(1L, messageSet.UidValidity);

            action(server, messageSet, messages);
              }
              finally {
            if (inbox.IsOpen)
              // CLOSE
              server.EnqueueTaggedResponse("$tag OK done\r\n");
              }
            }
              });
        }
Example #11
0
 private void TestMessage(int existMesasgeCount, ImapSequenceSet sequenceOrUidSet, Action<ImapPseudoServer, ImapMessageInfoBase, ImapMessageInfo[]> action)
 {
     TestMessage(existMesasgeCount, null, sequenceOrUidSet, action);
 }
 public ImapMatchedSequenceSet(ImapSequenceSet sequenceSet, ulong highestModSeq)
     : this(sequenceSet)
 {
     this.HighestModSeq = highestModSeq;
 }
        protected ImapWebResponse GetStoreResponse(ImapSequenceSet requestUidSet)
        {
            if (StoreDataItem == null)
            throw new InvalidOperationException("StoreDataItem must be set");

              return new ImapWebResponse(Session.Store(requestUidSet, StoreDataItem));
        }
        private ImapWebResponse GetFullFetchResponse(ImapSequenceSet requestedUidSet)
        {
            var responseStream = new ImapWebClientFetchMessageBodyStream(Session,
                                                                   KeepAlive,
                                                                   FetchPeek,
                                                                   requestedUidSet,
                                                                   FetchBlockSize,
                                                                   ReadWriteTimeout);

              IImapMessageAttribute messageAttr;
              var response = new ImapWebResponse(responseStream.Prepare(GetFetchDataItem(), out messageAttr));

              if (response.Result.Failed)
            return response;

              response.MessageAttributes = new[] {messageAttr};
              response.SetResponseStream(responseStream,
                                 responseStream.Length,
                                 true);

              if (messageAttr.BodyStructure != null)
            response.SetContentType((string)messageAttr.BodyStructure.MediaType);

              return response;
        }
Example #15
0
        private static bool IsSavedResult(ImapSequenceSet sequenceOrUidSet)
        {
            var matchedSet = sequenceOrUidSet as ImapMatchedSequenceSet;

              if (matchedSet == null)
            return false;
              else
            return matchedSet.IsSavedResult;
        }
Example #16
0
        //  <sequence set>
        //     Messages with message sequence numbers corresponding to the
        //     specified message sequence number set.
        public static ImapSearchCriteria SequenceSet(ImapSequenceSet sequenceSet)
        {
            if (sequenceSet == null)
            throw new ArgumentNullException("sequenceSet");
              else if (sequenceSet.IsEmpty)
            throw new ArgumentException("empty set", "sequenceSet");
              else if (!IsSavedResult(sequenceSet) && sequenceSet.IsUidSet)
            throw new ArgumentException("not sequence set", "sequenceSet");

              return new ImapSearchCriteria(sequenceSet.ToString());
        }
 public ArrivalMessageQuery(WaitForMessageArrivalContext context)
 {
     sequenceSet = (!context.MessageArrived || context.Mailbox.ExistsMessage <= context.CurrentMessageCount)
       ? ImapSequenceSet.CreateSet(new long[0])
       : ImapSequenceSet.CreateRangeSet(context.CurrentMessageCount + 1, context.Mailbox.ExistsMessage);
 }
        private ImapMessageInfo GetMessage(ImapSequenceSet sequenceOrUidSet, ImapMessageFetchAttributeOptions options)
        {
            var message = (new ImapMessageInfoList(this, options, sequenceOrUidSet)).FirstOrDefault();

              if (message == null)
            throw new ImapMessageNotFoundException(sequenceOrUidSet);

              return message;
        }
 internal void CheckUidValidity(long uidValidity, ImapSequenceSet sequenceOrUidSet)
 {
     // TODO: impl
     #if false
       if (!sequenceOrUidSet.IsUidSet)
     return;
       if (uidValidity != UidValidity)
     throw new ImapException("UIDVALIDITY value has been changed");
     #endif
 }
Example #20
0
        private void StoreCore(ImapSequenceSet sequenceOrUidSet, ImapStoreDataItem storeDataItem)
        {
            if (sequenceOrUidSet.IsEmpty)
            return; // do nothing

              Mailbox.CheckSelected();
              Mailbox.CheckUidValidity(UidValidity, sequenceOrUidSet);

              PrepareOperation();

              Mailbox.ProcessResult(Client.Session.Store(sequenceOrUidSet, storeDataItem));
        }
        protected ImapWebResponse GetExpungeResponse(ImapSequenceSet requestUidSet)
        {
            var result = Session.Store(requestUidSet, ImapStoreDataItem.AddFlagsSilent(ImapMessageFlag.Deleted));

              if (result.Failed)
            return new ImapWebResponse(result);

              if (Session.ServerCapabilities.Has(ImapCapability.UidPlus))
            result = Session.UidExpunge(requestUidSet);
              else
            result = Session.Expunge();

              return new ImapWebResponse(result);
        }
Example #22
0
        // UID <sequence set>
        //     Messages with unique identifiers corresponding to the specified
        //     unique identifier set.  Sequence set ranges are permitted.
        public static ImapSearchCriteria Uid(ImapSequenceSet uidSet)
        {
            if (uidSet == null)
            throw new ArgumentNullException("uidSet");
              else if (uidSet.IsEmpty)
            throw new ArgumentException("empty set", "uidSet");
              else if (!IsSavedResult(uidSet) && !uidSet.IsUidSet)
            throw new ArgumentException("not uid set", "uidSet");

              return new ImapSearchCriteria("UID", uidSet.ToString());
        }
 public ImapMessageNotFoundException(ImapSequenceSet sequenceOrUidSet)
     : this(string.Format("no such message: {0} ({1})", sequenceOrUidSet, sequenceOrUidSet.IsUidSet ? "uid" : "sequence"),
      sequenceOrUidSet)
 {
 }
Example #24
0
 internal ImapAppendedUidSet(long uidValidity, ImapSequenceSet assignedUidSet)
     : base(true)
 {
     this.UidValidity = uidValidity;
       this.AssignedUidSet = assignedUidSet;
 }
        private ImapWebResponse GetPartialFetchResponse(ImapSequenceSet requestedUidSet, string section, ImapPartialRange? partial)
        {
            var responseStream = new ImapWebClientFetchMessageBodyStream(Session,
                                                                   KeepAlive,
                                                                   FetchPeek,
                                                                   requestedUidSet,
                                                                   section,
                                                                   partial,
                                                                   FetchBlockSize,
                                                                   ReadWriteTimeout);

              IImapMessageAttribute discard;
              var response = new ImapWebResponse(responseStream.Prepare(GetFetchDataItem(), out discard));

              if (response.Result.Failed)
            return response;

              response.SetResponseStream(responseStream,
                                 responseStream.Length,
                                 true);

              return response;
        }