Author: btellier
Date: Thu Dec 17 15:08:38 2015
New Revision: 1720591

URL: http://svn.apache.org/viewvc?rev=1720591&view=rev
Log:
JAMES-1618 Capabilities should be advertised upon TCP connection

Added:
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/CapabilityAdvertiser.java
Modified:
    
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/core/CoreProcessor.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java
    
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java

Added: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/CapabilityAdvertiser.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/CapabilityAdvertiser.java?rev=1720591&view=auto
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/CapabilityAdvertiser.java
 (added)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/api/CapabilityAdvertiser.java
 Thu Dec 17 15:08:38 2015
@@ -0,0 +1,27 @@
+/*
+ *   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 interface CapabilityAdvertiser {
+
+    String getAdvertisedCapabilities();
+
+}

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=1720591&r1=1720590&r2=1720591&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 15:08:38 2015
@@ -20,12 +20,15 @@
 
 package org.apache.james.managesieve.api.commands;
 
+import org.apache.james.managesieve.api.CapabilityAdvertiser;
+
 /**
  * Core RFC 5804 Commands common to all transports
  * 
  * @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, Logout, Authenticate, StartTLS {
+        ListScripts, PutScript, RenameScript, SetActive, GetActive, Noop, 
Unauthenticate, Logout, Authenticate, StartTLS,
+        CapabilityAdvertiser {
 
 }

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=1720591&r1=1720590&r2=1720591&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 15:08:38 2015
@@ -76,13 +76,22 @@ public class CoreProcessor implements Co
     }
 
     @Override
+    public String getAdvertisedCapabilities() {
+        return convertCapabilityMapToString(capabilitiesBase) + "\r\n";
+    }
+
+    @Override
     public String capability(Session session) {
+        return convertCapabilityMapToString(computeCapabilityMap(session)) + 
"\r\nOK";
+    }
+
+    private String convertCapabilityMapToString(Map<Capabilities, String> 
capabilitiesStringMap) {
         return Joiner.on("\r\n").join(
-            Iterables.transform(computeCapabilityMap(session).entrySet(), new 
Function<Map.Entry<Capabilities,String>, String>() {
+            Iterables.transform(capabilitiesStringMap.entrySet(), new 
Function<Map.Entry<Capabilities,String>, String>() {
                 public String apply(Map.Entry<Capabilities, String> 
capabilitiesStringEntry) {
                     return 
computeCapabilityEntryString(capabilitiesStringEntry);
                 }
-            })) + "\r\nOK";
+            }));
     }
 
     private Map<Capabilities, String> computeCapabilityMap(Session session) {

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java?rev=1720591&r1=1720590&r2=1720591&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java
 Thu Dec 17 15:08:38 2015
@@ -44,7 +44,11 @@ public class ArgumentParser {
     public ArgumentParser(CoreCommands core) {
         this.core = core;
     }
-    
+
+    public String getAdvertisedCapabilities() {
+        return core.getAdvertisedCapabilities();
+    }
+
     public String capability(Session session, String args) {
         if (!args.trim().isEmpty()) {
             return "NO \"Too many arguments: " + 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=1720591&r1=1720590&r2=1720591&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 15:08:38 2015
@@ -118,4 +118,8 @@ public class ManageSieveProcessor {
         return "NO unknown " + command + " command";
     }
 
+    public String getAdvertisedCapabilities() {
+        return argumentParser.getAdvertisedCapabilities();
+    }
+
 }

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=1720591&r1=1720590&r2=1720591&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 15:08:38 2015
@@ -113,6 +113,7 @@ public class ManageSieveChannelUpstreamH
         attributes.set(ctx.getChannel(), session);
         ctx.setAttachment(new 
ChannelManageSieveResponseWriter(ctx.getChannel()));
         super.channelBound(ctx, e);
+        
((ChannelManageSieveResponseWriter)ctx.getAttachment()).write(manageSieveProcessor.getAdvertisedCapabilities());
     }
 
     @Override



---------------------------------------------------------------------
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