Author: btellier
Date: Thu Dec 17 14:55:56 2015
New Revision: 1720573

URL: http://svn.apache.org/viewvc?rev=1720573&view=rev
Log:
JAMES-1618 Add a LOGOUT command - RFC-5804 compliant

Added:
    
james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/LogoutTest.java
    
james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/logout.test
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/SessionTerminatedException.java
Modified:
    
james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
    
james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/Session.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/CoreCommands.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Logout.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/SettableSession.java
    
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java

Modified: 
james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java?rev=1720573&r1=1720572&r2=1720573&view=diff
==============================================================================
--- 
james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
 (original)
+++ 
james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
 Thu Dec 17 14:55:56 2015
@@ -20,17 +20,22 @@
 package org.apache.james.mpt.host;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.james.managesieve.api.SessionTerminatedException;
 import org.apache.james.managesieve.transcode.ManageSieveProcessor;
 import org.apache.james.managesieve.util.SettableSession;
 import org.apache.james.mpt.api.Continuation;
 import org.apache.james.mpt.api.Session;
 import org.apache.james.mpt.helper.ByteBufferInputStream;
 import org.apache.james.mpt.helper.ByteBufferOutputStream;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.StringWriter;
 
 public class ManageSieveSession implements Session {
 
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(ManageSieveSession.class);
+
     private ByteBufferOutputStream out;
     private ByteBufferInputStream in;
     private ManageSieveProcessor manageSieveProcessor;
@@ -47,10 +52,16 @@ public class ManageSieveSession implemen
     @Override
     public String readLine() throws Exception {
         if (!isReadLast) {
+            String response;
             StringWriter stringWriter = new StringWriter();
             IOUtils.copy(in, stringWriter);
             String request = stringWriter.toString();
-            String response = 
manageSieveProcessor.handleRequest(settableSession, request);
+            try {
+                response = manageSieveProcessor.handleRequest(settableSession, 
request);
+            } catch (SessionTerminatedException e) {
+                LOGGER.info("Session is terminated");
+                response = "OK channel is closing\r\n";
+            }
             out.write(response);
             isReadLast = true;
         }

Added: 
james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/LogoutTest.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/LogoutTest.java?rev=1720573&view=auto
==============================================================================
--- 
james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/LogoutTest.java
 (added)
+++ 
james/project/trunk/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/LogoutTest.java
 Thu Dec 17 14:55:56 2015
@@ -0,0 +1,41 @@
+/****************************************************************
+ * 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.mpt.testsuite;
+
+import com.google.inject.Inject;
+import org.apache.james.mpt.host.ManageSieveHostSystem;
+import org.junit.Test;
+
+import java.util.Locale;
+
+public class LogoutTest extends ManageSieveMPTTest {
+
+    @Inject
+    private static ManageSieveHostSystem hostSystem;
+
+    public LogoutTest() throws Exception {
+        super(hostSystem);
+    }
+
+    @Test
+    public void logoutShouldWork() throws Exception {
+        scriptTest("logout", Locale.US);
+    }
+}

Added: 
james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/logout.test
URL: 
http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/logout.test?rev=1720573&view=auto
==============================================================================
--- 
james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/logout.test
 (added)
+++ 
james/project/trunk/mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/logout.test
 Thu Dec 17 14:55:56 2015
@@ -0,0 +1,21 @@
+################################################################
+# 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.                                           #
+################################################################
+
+C: LOGOUT
+S: OK channel is closing
\ No newline at end of file

Modified: 
james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java?rev=1720573&r1=1720572&r2=1720573&view=diff
==============================================================================
--- 
james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java
 (original)
+++ 
james/project/trunk/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/ManageSieveFileTest.java
 Thu Dec 17 14:55:56 2015
@@ -19,6 +19,7 @@
 
 package org.apache.james.mpt.managesieve.file;
 
+import org.apache.james.mpt.testsuite.LogoutTest;
 import org.apache.james.mpt.testsuite.NoopTest;
 import org.apache.james.mpt.testsuite.UnauthenticatedTest;
 import org.apache.onami.test.OnamiSuite;
@@ -30,7 +31,8 @@ import org.junit.runners.Suite;
 @RunWith(OnamiSuite.class)
 @Suite.SuiteClasses({
     NoopTest.class,
-    UnauthenticatedTest.class
+    UnauthenticatedTest.class,
+    LogoutTest.class
 })
 public class ManageSieveFileTest {
 }

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/Session.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/Session.java?rev=1720573&r1=1720572&r2=1720573&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/Session.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/Session.java
 Thu Dec 17 14:55:56 2015
@@ -24,10 +24,14 @@ public interface Session {
 
     boolean isAuthenticated();
 
+    boolean isTerminated();
+
     String getUser();
 
     void setAuthentication(boolean isAuthenticated);
 
     void setUser(String user);
 
+    void markSessionAsTerminated();
+
 }

Added: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/SessionTerminatedException.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/SessionTerminatedException.java?rev=1720573&view=auto
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/SessionTerminatedException.java
 (added)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/SessionTerminatedException.java
 Thu Dec 17 14:55:56 2015
@@ -0,0 +1,24 @@
+/*
+ *   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.managesieve.api;
+
+public class SessionTerminatedException extends ManageSieveException {
+}

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/CoreCommands.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/CoreCommands.java?rev=1720573&r1=1720572&r2=1720573&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/CoreCommands.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/CoreCommands.java
 Thu Dec 17 14:55:56 2015
@@ -26,6 +26,6 @@ package org.apache.james.managesieve.api
  * @see <a href=http://tools.ietf.org/html/rfc5804#section-2>RFC 5804 
Commands</a>
  */
 public interface CoreCommands extends Capability, CheckScript, DeleteScript, 
GetScript, HaveSpace,
-        ListScripts, PutScript, RenameScript, SetActive, GetActive, Noop, 
Unauthenticate {
+        ListScripts, PutScript, RenameScript, SetActive, GetActive, Noop, 
Unauthenticate, Logout {
 
 }

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Logout.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Logout.java?rev=1720573&r1=1720572&r2=1720573&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Logout.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Logout.java
 Thu Dec 17 14:55:56 2015
@@ -20,12 +20,13 @@
 
 package org.apache.james.managesieve.api.commands;
 
+import org.apache.james.managesieve.api.SessionTerminatedException;
 
 /**
  *  @see <a href=http://tools.ietf.org/html/rfc5804#section-2.3>RFC 5804 
LOGOUT Command</a>
  */
 public interface Logout {
     
-    void logout();
+    void logout() throws SessionTerminatedException;
 
 }

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java?rev=1720573&r1=1720572&r2=1720573&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
 Thu Dec 17 14:55:56 2015
@@ -27,6 +27,7 @@ import org.apache.commons.io.IOUtils;
 import org.apache.james.managesieve.api.AuthenticationRequiredException;
 import org.apache.james.managesieve.api.ManageSieveRuntimeException;
 import org.apache.james.managesieve.api.Session;
+import org.apache.james.managesieve.api.SessionTerminatedException;
 import org.apache.james.managesieve.api.SieveParser;
 import org.apache.james.managesieve.api.SyntaxException;
 import org.apache.james.managesieve.api.commands.CoreCommands;
@@ -192,6 +193,11 @@ public class CoreProcessor implements Co
         }
     }
 
+    @Override
+    public void logout() throws SessionTerminatedException {
+        throw new SessionTerminatedException();
+    }
+
     protected void authenticationCheck(Session session) throws 
AuthenticationRequiredException {
         ensureUser(session);
         if (!session.isAuthenticated()) {

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java?rev=1720573&r1=1720572&r2=1720573&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCore.java
 Thu Dec 17 14:55:56 2015
@@ -24,6 +24,7 @@ import com.google.common.base.Strings;
 import org.apache.james.managesieve.api.ArgumentException;
 import org.apache.james.managesieve.api.AuthenticationRequiredException;
 import org.apache.james.managesieve.api.Session;
+import org.apache.james.managesieve.api.SessionTerminatedException;
 import org.apache.james.managesieve.api.SyntaxException;
 import org.apache.james.managesieve.api.commands.Capability.Capabilities;
 import org.apache.james.managesieve.api.commands.CoreCommands;
@@ -70,6 +71,10 @@ public class LineToCore{
             return "NO UNAUTHENTICATE do not take arguments";
         }
     }
+
+    public void logout() throws SessionTerminatedException {
+        core.logout();
+    }
     
     public void deleteScript(Session session, String args) throws 
AuthenticationRequiredException, ScriptNotFoundException, IsActiveException, 
ArgumentException {
         String scriptName = ParserUtils.getScriptName(args);

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java?rev=1720573&r1=1720572&r2=1720573&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/LineToCoreToLine.java
 Thu Dec 17 14:55:56 2015
@@ -23,6 +23,7 @@ package org.apache.james.managesieve.tra
 import org.apache.james.managesieve.api.ArgumentException;
 import org.apache.james.managesieve.api.AuthenticationRequiredException;
 import org.apache.james.managesieve.api.Session;
+import org.apache.james.managesieve.api.SessionTerminatedException;
 import org.apache.james.managesieve.api.SyntaxException;
 import org.apache.james.managesieve.api.commands.Capability.Capabilities;
 import org.apache.james.sieverepository.api.ScriptSummary;
@@ -77,6 +78,10 @@ public class LineToCoreToLine {
         return lineToCore.unauthenticate(session, args);
     }
 
+    public void logout() throws SessionTerminatedException {
+        lineToCore.logout();
+    }
+
     public String checkScript(Session session, String args) {
         try {
             List<String> warnings = lineToCore.checkScript(session, args);

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java?rev=1720573&r1=1720572&r2=1720573&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java
 Thu Dec 17 14:55:56 2015
@@ -22,6 +22,7 @@ package org.apache.james.managesieve.tra
 
 import org.apache.james.managesieve.api.ManageSieveException;
 import org.apache.james.managesieve.api.Session;
+import org.apache.james.managesieve.api.SessionTerminatedException;
 import org.apache.james.sieverepository.api.exception.SieveRepositoryException;
 
 public class ManageSieveProcessor {
@@ -79,7 +80,7 @@ public class ManageSieveProcessor {
         }
     }
 
-    private String matchCommandWithImplementation(Session session, String 
arguments, String command) {
+    private String matchCommandWithImplementation(Session session, String 
arguments, String command) throws SessionTerminatedException {
         if (command.equals(AUTHENTICATE)) {
             return "NO AUTHENTICATE command not yet implemented";
         } else if (command.equals(CAPABILITY)) {
@@ -97,7 +98,7 @@ public class ManageSieveProcessor {
         } else if (command.equals(LISTSCRIPTS)) {
             return lineToCoreToLine.listScripts(session, arguments);
         } else if (command.equals(LOGOUT)) {
-            return "NO LOGOUT command not yet implemented";
+            lineToCoreToLine.logout();
         } else if (command.equals(NOOP)) {
             return lineToCoreToLine.noop(arguments);
         } else if (command.equals(PUTSCRIPT)) {
@@ -110,9 +111,8 @@ public class ManageSieveProcessor {
             return "NO STARTTLS command not yet implemented";
         } else if (command.equals(UNAUTHENTICATE)) {
             return lineToCoreToLine.unauthenticate(session, arguments);
-        } else {
-            return "NO unknown " + command + " command";
         }
+        return "NO unknown " + command + " command";
     }
 
 }

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/SettableSession.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/SettableSession.java?rev=1720573&r1=1720572&r2=1720573&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/SettableSession.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/SettableSession.java
 Thu Dec 17 14:55:56 2015
@@ -26,9 +26,11 @@ public class SettableSession implements
 
     private String user;
     private boolean isAuthenticated;
+    private boolean isTerminated;
 
     public SettableSession() {
         this.isAuthenticated = false;
+        this.isTerminated = false;
     }
 
     public String getUser() {
@@ -48,4 +50,13 @@ public class SettableSession implements
         this.user = user;
     }
 
+    @Override
+    public boolean isTerminated() {
+        return isTerminated;
+    }
+
+    @Override
+    public void markSessionAsTerminated() {
+        isTerminated = true;
+    }
 }

Modified: 
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java?rev=1720573&r1=1720572&r2=1720573&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
 (original)
+++ 
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
 Thu Dec 17 14:55:56 2015
@@ -20,6 +20,7 @@
 package org.apache.james.managesieveserver.netty;
 
 import org.apache.james.managesieve.api.Session;
+import org.apache.james.managesieve.api.SessionTerminatedException;
 import org.apache.james.managesieve.transcode.ManageSieveProcessor;
 import org.apache.james.managesieve.util.SettableSession;
 import org.apache.james.protocols.api.logger.ProtocolLoggerAdapter;
@@ -66,18 +67,23 @@ public class ManageSieveChannelUpstreamH
 
         if (e.getCause() instanceof TooLongFrameException) {
             // Max line length exceeded
-            //
             // See also JAMES-1190
             ((ChannelManageSieveResponseWriter)ctx.getAttachment()).write("NO 
Maximum command line length exceeded");
+        } else if (e.getCause() instanceof SessionTerminatedException) {
+            ((ChannelManageSieveResponseWriter)ctx.getAttachment()).write("OK 
channel is closing");
+            logout(ctx);
         } else {
-            // logout on error not sure if that is the best way to handle it
-            attributes.remove(ctx.getChannel());
+            logout(ctx);
+        }
+    }
 
-            // Make sure we close the channel after all the buffers were 
flushed out
-            Channel channel = ctx.getChannel();
-            if (channel.isConnected()) {
-                
channel.write(ChannelBuffers.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);
-            }
+    private void logout(ChannelHandlerContext ctx) {
+        // logout on error not sure if that is the best way to handle it
+        attributes.remove(ctx.getChannel());
+        // Make sure we close the channel after all the buffers were flushed 
out
+        Channel channel = ctx.getChannel();
+        if (channel.isConnected()) {
+            
channel.write(ChannelBuffers.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);
         }
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to