Author: norman
Date: Mon Sep 13 17:24:14 2010
New Revision: 996607
URL: http://svn.apache.org/viewvc?rev=996607&view=rev
Log:
Use BAD response for invalid messageset (IMAP-209)
Added:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MessageRangeException.java
Modified:
james/imap/trunk/api/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
Modified:
james/imap/trunk/api/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/api/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
---
james/imap/trunk/api/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
(original)
+++
james/imap/trunk/api/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
Mon Sep 13 17:24:14 2010
@@ -55,6 +55,10 @@ public class HumanReadableText {
"org.apache.james.imap.GENERIC_SUBSCRIPTION_FAILURE",
"Cannot subscribe.");
+ public static final HumanReadableText INVALID_MESSAGESET = new
HumanReadableText(
+ "org.apache.james.imap.INVALID_MESSAGESET",
+ "failed. Invalid messageset.");
+
public static final HumanReadableText INVALID_COMMAND = new
HumanReadableText(
"org.apache.james.imap.INVALID_COMMAND",
"failed. Command not valid in this state.");
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
Mon Sep 13 17:24:14 2010
@@ -42,6 +42,7 @@ import org.apache.james.imap.message.res
import org.apache.james.imap.message.response.RecentResponse;
import org.apache.james.imap.processor.base.AbstractChainedProcessor;
import org.apache.james.imap.processor.base.ImapSessionUtils;
+import org.apache.james.imap.processor.base.MessageRangeException;
import org.apache.james.mailbox.MailboxConstants;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MailboxManager;
@@ -369,18 +370,20 @@ abstract public class AbstractMailboxPro
* @return
* @throws MailboxException
*/
- protected MessageRange messageRange(SelectedMailbox selected, IdRange
range, boolean useUids) throws MailboxException{
- long lowVal = range.getLowVal();
+ protected MessageRange messageRange(SelectedMailbox selected, IdRange
range, boolean useUids) throws MessageRangeException {
+ long lowVal = range.getLowVal();
long highVal = range.getHighVal();
- if (useUids == false) {
- if (lowVal != Long.MAX_VALUE) {
+ if (useUids == false) {
+ if (lowVal != Long.MAX_VALUE) {
lowVal = selected.uid((int) lowVal);
- if (lowVal == SelectedMailbox.NO_SUCH_MESSAGE) throw new
MailboxException("No message found with msn " + lowVal);
- }
- if (highVal != Long.MAX_VALUE) {
+ if (lowVal == SelectedMailbox.NO_SUCH_MESSAGE)
+ throw new MessageRangeException("No message found with msn
" + lowVal);
+ }
+ if (highVal != Long.MAX_VALUE) {
highVal = selected.uid((int) highVal);
- if (highVal == SelectedMailbox.NO_SUCH_MESSAGE) throw new
MailboxException("No message found with msn " + highVal);
- }
+ if (highVal == SelectedMailbox.NO_SUCH_MESSAGE)
+ throw new MessageRangeException("No message found with msn
" + highVal);
+ }
}
MessageRange mRange = MessageRange.range(lowVal, highVal);
return mRange;
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
Mon Sep 13 17:24:14 2010
@@ -31,6 +31,7 @@ import org.apache.james.imap.api.process
import org.apache.james.imap.api.process.SelectedMailbox;
import org.apache.james.imap.message.request.CopyRequest;
import org.apache.james.imap.processor.base.ImapSessionUtils;
+import org.apache.james.imap.processor.base.MessageRangeException;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxPath;
@@ -74,6 +75,8 @@ public class CopyProcessor extends Abstr
unsolicitedResponses(session, responder, useUids);
okComplete(command, tag, responder);
}
+ } catch (MessageRangeException e) {
+ taggedBad(command, tag, responder,
HumanReadableText.INVALID_MESSAGESET);
} catch (MailboxException e) {
no(command, tag, responder,
HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
}
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
Mon Sep 13 17:24:14 2010
@@ -42,6 +42,7 @@ import org.apache.james.imap.api.process
import org.apache.james.imap.message.request.SearchRequest;
import org.apache.james.imap.message.response.SearchResponse;
import org.apache.james.imap.processor.base.ImapSessionUtils;
+import org.apache.james.imap.processor.base.MessageRangeException;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MessageManager;
@@ -77,6 +78,8 @@ public class SearchProcessor extends Abs
boolean omitExpunged = (!useUids);
unsolicitedResponses(session, responder, omitExpunged, useUids);
okComplete(command, tag, responder);
+ } catch (MessageRangeException e) {
+ taggedBad(command, tag, responder,
HumanReadableText.INVALID_MESSAGESET);
} catch (MailboxException e) {
no(command, tag, responder, HumanReadableText.SEARCH_FAILED);
}
@@ -94,7 +97,7 @@ public class SearchProcessor extends Abs
private Collection<Long> findIds(final boolean useUids,
final ImapSession session, MessageManager mailbox, final
SearchQuery query)
- throws MailboxException {
+ throws MailboxException, MessageRangeException {
final Iterator<Long> it = mailbox.search(query, ImapSessionUtils
.getMailboxSession(session));
@@ -107,7 +110,7 @@ public class SearchProcessor extends Abs
number = new Long(uid);
} else {
final int msn = session.getSelected().msn(uid);
- if (msn == SelectedMailbox.NO_SUCH_MESSAGE) throw new
MailboxException("No message found with uid " + uid);
+ if (msn == SelectedMailbox.NO_SUCH_MESSAGE) throw new
MessageRangeException("No message found with uid " + uid);
number = new Long(msn);
}
results.add(number);
@@ -115,7 +118,7 @@ public class SearchProcessor extends Abs
return results;
}
- private SearchQuery toQuery(final SearchKey key, final ImapSession
session) throws MailboxException {
+ private SearchQuery toQuery(final SearchKey key, final ImapSession
session) throws MessageRangeException {
final SearchQuery result = new SearchQuery();
final SelectedMailbox selected = session.getSelected();
if (selected != null) {
@@ -127,7 +130,7 @@ public class SearchProcessor extends Abs
}
private SearchQuery.Criterion toCriterion(final SearchKey key,
- final ImapSession session) throws MailboxException {
+ final ImapSession session) throws MessageRangeException {
final int type = key.getType();
final DayMonthYear date = key.getDate();
switch (type) {
@@ -225,7 +228,7 @@ public class SearchProcessor extends Abs
}
private Criterion sequence(IdRange[] sequenceNumbers,
- final ImapSession session, boolean msn) throws MailboxException {
+ final ImapSession session, boolean msn) throws
MessageRangeException {
final int length = sequenceNumbers.length;
final SearchQuery.NumericRange[] ranges = new
SearchQuery.NumericRange[length];
for (int i = 0; i < length; i++) {
@@ -241,14 +244,14 @@ public class SearchProcessor extends Abs
} else {
final int highMsn = (int) highVal;
highUid = selected.uid(highMsn);
- if (highUid == -1) throw new MailboxException("No message
found with msn " + highMsn);
+ if (highUid == -1) throw new MessageRangeException("No
message found with msn " + highMsn);
}
if (lowVal == Long.MAX_VALUE) {
lowUid = Long.MAX_VALUE;
} else {
final int lowMsn = (int) lowVal;
lowUid = selected.uid(lowMsn);
- if (highUid == -1) throw new MailboxException("No message
found with msn " + lowUid);
+ if (highUid == -1) throw new MessageRangeException("No
message found with msn " + lowUid);
}
} else {
@@ -260,7 +263,7 @@ public class SearchProcessor extends Abs
return SearchQuery.uid(ranges);
}
- private Criterion or(List<SearchKey> keys, final ImapSession session)
throws MailboxException {
+ private Criterion or(List<SearchKey> keys, final ImapSession session)
throws MessageRangeException {
final SearchKey keyOne = keys.get(0);
final SearchKey keyTwo = keys.get(1);
final Criterion criterionOne = toCriterion(keyOne, session);
@@ -269,14 +272,14 @@ public class SearchProcessor extends Abs
return result;
}
- private Criterion not(List<SearchKey> keys, final ImapSession session)
throws MailboxException {
+ private Criterion not(List<SearchKey> keys, final ImapSession session)
throws MessageRangeException {
final SearchKey key = keys.get(0);
final Criterion criterion = toCriterion(key, session);
final Criterion result = SearchQuery.not(criterion);
return result;
}
- private Criterion and(List<SearchKey> keys, final ImapSession session)
throws MailboxException {
+ private Criterion and(List<SearchKey> keys, final ImapSession session)
throws MessageRangeException {
final int size = keys.size();
final List<Criterion> criteria = new ArrayList<Criterion>(size);
for (final SearchKey key:keys) {
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
Mon Sep 13 17:24:14 2010
@@ -35,6 +35,7 @@ import org.apache.james.imap.api.process
import org.apache.james.imap.message.request.StoreRequest;
import org.apache.james.imap.message.response.FetchResponse;
import org.apache.james.imap.processor.base.ImapSessionUtils;
+import org.apache.james.imap.processor.base.MessageRangeException;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
@@ -111,6 +112,8 @@ public class StoreProcessor extends Abst
final boolean omitExpunged = (!useUids);
unsolicitedResponses(session, responder, omitExpunged, useUids);
okComplete(command, tag, responder);
+ } catch (MessageRangeException e) {
+ taggedBad(command, tag, responder,
HumanReadableText.INVALID_MESSAGESET);
} catch (MailboxException e) {
no(command, tag, responder, HumanReadableText.SAVE_FAILED);
}
Added:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MessageRangeException.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MessageRangeException.java?rev=996607&view=auto
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MessageRangeException.java
(added)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MessageRangeException.java
Mon Sep 13 17:24:14 2010
@@ -0,0 +1,29 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.imap.processor.base;
+
+import javax.mail.MessagingException;
+
+public class MessageRangeException extends MessagingException{
+
+ public MessageRangeException(String msg) {
+ super(msg);
+ }
+}
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
Mon Sep 13 17:24:14 2010
@@ -38,6 +38,7 @@ import org.apache.james.imap.message.req
import org.apache.james.imap.message.response.FetchResponse;
import org.apache.james.imap.processor.AbstractMailboxProcessor;
import org.apache.james.imap.processor.base.ImapSessionUtils;
+import org.apache.james.imap.processor.base.MessageRangeException;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageManager;
@@ -102,6 +103,8 @@ public class FetchProcessor extends Abst
} catch (UnsupportedCriteriaException e) {
no(command, tag, responder,
HumanReadableText.UNSUPPORTED_SEARCH_CRITERIA);
+ } catch (MessageRangeException e) {
+ taggedBad(command, tag, responder,
HumanReadableText.INVALID_MESSAGESET);
} catch (MessagingException e) {
no(command, tag, responder, HumanReadableText.SEARCH_FAILED);
} catch (ParseException e) {
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
Mon Sep 13 17:24:14 2010
@@ -37,6 +37,7 @@ import org.apache.james.imap.api.process
import org.apache.james.imap.api.process.SelectedMailbox;
import org.apache.james.imap.message.response.FetchResponse;
import org.apache.james.imap.processor.base.ImapSessionUtils;
+import org.apache.james.imap.processor.base.MessageRangeException;
import org.apache.james.mailbox.Content;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MailboxSession;
@@ -105,7 +106,7 @@ final class FetchResponseBuilder {
final long resultUid = result.getUid();
final int resultMsn = selected.msn(resultUid);
- if (resultMsn == SelectedMailbox.NO_SUCH_MESSAGE) throw new
MailboxException("No such message found with uid " + resultUid);
+ if (resultMsn == SelectedMailbox.NO_SUCH_MESSAGE) throw new
MessageRangeException("No such message found with uid " + resultUid);
setMsn(resultMsn);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]