Author: norman
Date: Tue Jun 7 07:31:07 2011
New Revision: 1132888
URL: http://svn.apache.org/viewvc?rev=1132888&view=rev
Log:
Make sure the UIDL is unique across mailboxes. See JAMES-1264
Modified:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java
Modified:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java?rev=1132888&r1=1132887&r2=1132888&view=diff
==============================================================================
---
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java
(original)
+++
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java
Tue Jun 7 07:31:07 2011
@@ -23,6 +23,10 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager.MetaData;
+import org.apache.james.mailbox.MessageManager.MetaData.FetchGroup;
import org.apache.james.pop3server.POP3Response;
import org.apache.james.pop3server.POP3Session;
import org.apache.james.protocols.api.CommandHandler;
@@ -46,40 +50,49 @@ public class UidlCmdHandler implements C
if (session.getHandlerState() == POP3Session.TRANSACTION) {
List<MessageMetaData> uidList = (List<MessageMetaData>)
session.getState().get(POP3Session.UID_LIST);
List<Long> deletedUidList = (List<Long>)
session.getState().get(POP3Session.DELETED_UID_LIST);
-
- if (parameters == null) {
- response = new POP3Response(POP3Response.OK_RESPONSE,
"unique-id listing follows");
- for (int i = 0; i < uidList.size(); i++) {
- Long uid = uidList.get(i).getUid();
- if (deletedUidList.contains(uid) == false) {
- StringBuilder responseBuffer = new
StringBuilder(64).append(i + 1).append(" ").append(uid);
- response.appendLine(responseBuffer.toString());
+ MailboxSession mailboxSession = (MailboxSession)
session.getState().get(POP3Session.MAILBOX_SESSION);
+ try {
+ MetaData mData = session.getUserMailbox().getMetaData(false,
mailboxSession, FetchGroup.NO_COUNT);
+ long validity = mData.getUidValidity();
+ if (parameters == null) {
+ response = new POP3Response(POP3Response.OK_RESPONSE,
"unique-id listing follows");
+ for (int i = 0; i < uidList.size(); i++) {
+ Long uid = uidList.get(i).getUid();
+ if (deletedUidList.contains(uid) == false) {
+ // construct unique UIDL. See JAMES-1264
+ StringBuilder responseBuffer = new
StringBuilder(64).append(i + 1).append("
").append(validity).append("-").append(uid);
+ response.appendLine(responseBuffer.toString());
+ }
}
- }
-
- response.appendLine(".");
- } else {
- int num = 0;
- try {
- num = Integer.parseInt(parameters);
- Long uid = uidList.get(num - 1).getUid();
- if (deletedUidList.contains(uid) == false) {
- StringBuilder responseBuffer = new
StringBuilder(64).append(num).append(" ").append(uid.hashCode());
- response = new POP3Response(POP3Response.OK_RESPONSE,
responseBuffer.toString());
-
- } else {
- StringBuilder responseBuffer = new
StringBuilder(64).append("Message (").append(num).append(") already deleted.");
+ response.appendLine(".");
+ } else {
+ int num = 0;
+ try {
+ num = Integer.parseInt(parameters);
+ Long uid = uidList.get(num - 1).getUid();
+ if (deletedUidList.contains(uid) == false) {
+ // construct unique UIDL. See JAMES-1264
+ StringBuilder responseBuffer = new
StringBuilder(64).append(num).append("
").append(validity).append("-").append(uid);
+ response = new
POP3Response(POP3Response.OK_RESPONSE, responseBuffer.toString());
+
+ } else {
+ StringBuilder responseBuffer = new
StringBuilder(64).append("Message (").append(num).append(") already deleted.");
+ response = new
POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
+ }
+ } catch (IndexOutOfBoundsException npe) {
+ StringBuilder responseBuffer = new
StringBuilder(64).append("Message (").append(num).append(") does not exist.");
+ response = new POP3Response(POP3Response.ERR_RESPONSE,
responseBuffer.toString());
+ } catch (NumberFormatException nfe) {
+ StringBuilder responseBuffer = new
StringBuilder(64).append(parameters).append(" is not a valid number");
response = new POP3Response(POP3Response.ERR_RESPONSE,
responseBuffer.toString());
}
- } catch (IndexOutOfBoundsException npe) {
- StringBuilder responseBuffer = new
StringBuilder(64).append("Message (").append(num).append(") does not exist.");
- response = new POP3Response(POP3Response.ERR_RESPONSE,
responseBuffer.toString());
- } catch (NumberFormatException nfe) {
- StringBuilder responseBuffer = new
StringBuilder(64).append(parameters).append(" is not a valid number");
- response = new POP3Response(POP3Response.ERR_RESPONSE,
responseBuffer.toString());
}
+ } catch (MailboxException e) {
+ response = new POP3Response(POP3Response.ERR_RESPONSE);
+ return response;
}
+
} else {
response = new POP3Response(POP3Response.ERR_RESPONSE);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]