You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/01/15 17:33:59 UTC

svn commit: r899690 - in /james/server/trunk: remotemanager-function/ remotemanager-function/src/main/java/org/apache/james/remotemanager/ remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ remotemanager-function/src/main/java/or...

Author: norman
Date: Fri Jan 15 16:33:58 2010
New Revision: 899690

URL: http://svn.apache.org/viewvc?rev=899690&view=rev
Log:
more work on AsyncRemoteManager (JAMES-953)

Added:
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AuthorizationHandler.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/AsyncRemoteManager.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerIoHandler.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerSessionImpl.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/FilterLineHandlerAdapter.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/RemoteManagerResponseFilter.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/RemoteManagerValidationFilter.java
Removed:
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/WelcomeHandler.java
Modified:
    james/server/trunk/remotemanager-function/pom.xml
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerHandler.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerSession.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AddHamCmdHandler.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AddSpamCmdHandler.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/CoreCmdHandlerLoader.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ExportBayesianDataCmdHandler.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ImportBayesianDataCmdHandler.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/QuitCmdHandler.java
    james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ResetBayesianDataCmdHandler.java
    james/server/trunk/remotemanager-function/src/test/java/org/apache/james/remotemanager/RemoteManagerTest.java
    james/server/trunk/smtpserver-function/pom.xml
    james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/LogEnabledSession.java
    james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/TLSSupportedSession.java

Modified: james/server/trunk/remotemanager-function/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/pom.xml?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/pom.xml (original)
+++ james/server/trunk/remotemanager-function/pom.xml Fri Jan 15 16:33:58 2010
@@ -94,8 +94,17 @@
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
     </dependency>
+        <dependency>
+      <groupId>org.apache.james</groupId>
+      <artifactId>james-server-mina-socket-library</artifactId>
+    </dependency>
     
     <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
       <groupId>org.apache.james</groupId>
       <artifactId>james-server-core-api</artifactId>
       <type>test-jar</type>

Modified: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerHandler.java?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerHandler.java (original)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerHandler.java Fri Jan 15 16:33:58 2010
@@ -33,7 +33,6 @@
 import org.apache.james.socket.api.CRLFTerminatedReader;
 import org.apache.james.socket.api.ProtocolContext;
 import org.apache.james.socket.api.ProtocolHandler;
-import org.apache.james.socket.api.Watchdog;
 
 
 /**
@@ -49,7 +48,7 @@
     private final RemoteManagerHandlerConfigurationData theConfigData;
     private ProtocolContext context;
    
-    private Map<Object,Object> stateMap = new HashMap<Object, Object>();
+    private Map<String,Object> stateMap = new HashMap<String, Object>();
 
     private boolean sessionEnded;
 
@@ -72,6 +71,9 @@
     public void handleProtocol(ProtocolContext context) throws IOException {
         this.context = context;
         sessionEnded = false;
+
+        context.getWatchdog().start();
+
         getState().put(RemoteManagerSession.CURRENT_USERREPOSITORY, "LocalUsers");
 
 
@@ -86,37 +88,6 @@
             }
         }
 
-        context.writeLoggedResponse("Please enter your login and password");
-        String login = null;
-        String password = null;
-        do {
-            if (login != null) {
-                final String message = "Login failed for " + login;
-                context.writeLoggedFlushedResponse(message);
-            }
-            context.writeLoggedFlushedResponse("Login id:");
-            login = context.getInputReader().readLine().trim();
-            context.writeLoggedFlushedResponse("Password:");
-            password = context.getInputReader().readLine().trim();
-        } while (!password.equals(theConfigData.getAdministrativeAccountData().get(login)) || password.length() == 0);
-
-        StringBuilder messageBuffer =
-            new StringBuilder(64)
-                    .append("Welcome ")
-                    .append(login)
-                    .append(". HELP for a list of commands");
-        context.getOutputWriter().println( messageBuffer.toString() );
-        context.getOutputWriter().flush();
-        if (context.getLogger().isInfoEnabled()) {
-            StringBuilder infoBuffer =
-                new StringBuilder(128)
-                        .append("Login for ")
-                        .append(login)
-                        .append(" successful");
-            context.getLogger().info(infoBuffer.toString());
-        }
-
-        context.getWatchdog().start();
         while(!sessionEnded) {
             String line = null;
             // parse the command
@@ -134,9 +105,8 @@
           }
 
           if (lineHandlers.size() > 0) {
-              context.getOutputWriter().print(theConfigData.getPrompt());
-              context.getOutputWriter().flush();
-              
+              //context.getOutputWriter().print(theConfigData.getPrompt());
+              //context.getOutputWriter().flush();
               ((LineHandler) lineHandlers.getLast()).onLine(this, line);
           } else {
               sessionEnded = true;
@@ -145,15 +115,6 @@
           
         }
         context.getWatchdog().stop();
-        if (context.getLogger().isInfoEnabled()) {
-            StringBuilder infoBuffer =
-                new StringBuilder(64)
-                        .append("Logout for ")
-                        .append(login)
-                        .append(".");
-            context.getLogger().info(infoBuffer.toString());
-        }
-       
     }
 
     /**
@@ -171,7 +132,7 @@
         sessionEnded = true;
         
         // clear the state map
-        getState().clear();
+        resetState();
         
         // empty any previous line handler and add self (command dispatcher)
         // as the default.
@@ -188,23 +149,15 @@
         return context.getLogger();
     }
 
-    /**
+    /*
      * (non-Javadoc)
-     * @see org.apache.james.remotemanager.RemoteManagerSession#getState()
+     * @see org.apache.james.api.protocol.LogEnabledSession#getState()
      */
-    public Map<Object, Object> getState() {
+    public Map<String, Object> getState() {
         return stateMap;
     }
 
     /**
-     * (non-Javadoc)
-     * @see org.apache.james.remotemanager.RemoteManagerSession#getWatchdog()
-     */
-    public Watchdog getWatchdog() {
-        return context.getWatchdog();
-    }
-
-    /**
      * @see org.apache.james.remotemanager.RemoteManagerSession#writeRemoteManagerResponse(org.apache.james.remotemanager.RemoteManagerResponse)
      */
     public void writeRemoteManagerResponse(RemoteManagerResponse response) {
@@ -228,5 +181,43 @@
         }
     }
 
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.api.protocol.LogEnabledSession#resetState()
+     */
+    public void resetState() {
+        stateMap.clear();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.remotemanager.RemoteManagerSession#popLineHandler()
+     */
+    public void popLineHandler() {
+        if (lineHandlers != null) {
+            lineHandlers.removeLast();
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.remotemanager.RemoteManagerSession#pushLineHandler(org.apache.james.remotemanager.LineHandler)
+     */
+    public void pushLineHandler(LineHandler lineHandler) {
+        if (lineHandlers == null) {
+            lineHandlers = new LinkedList<LineHandler>();
+        }
+        lineHandlers.addLast(lineHandler);
+    }
+
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.remotemanager.RemoteManagerSession#getAdministrativeAccountData()
+     */
+    public Map<String, String> getAdministrativeAccountData() {
+        return theConfigData.getAdministrativeAccountData();
+    }
+
 
 }

Modified: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerSession.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerSession.java?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerSession.java (original)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerSession.java Fri Jan 15 16:33:58 2010
@@ -22,7 +22,6 @@
 import java.util.Map;
 
 import org.apache.james.api.protocol.LogEnabledSession;
-import org.apache.james.socket.api.Watchdog;
 
 public interface RemoteManagerSession extends LogEnabledSession{
 
@@ -31,14 +30,6 @@
     public final static String REGEX_IDENTIFIER = "regex=";
     public final static String KEY_IDENTIFIER = "key=";
     
-
-    /**
-     * Return state map which should get used to store temporary data 
-     * 
-     * @return stateMap
-     */
-    public Map<Object,Object> getState();
-    
     /**
      * Write response to client
      * 
@@ -48,9 +39,16 @@
 	
     
     /**
-     * Return the Watchdog
-     * 
-     * @return watchdog
+     * Put a new line handler in the chain
+     * @param overrideCommandHandler
      */
-    public Watchdog getWatchdog();
+    public void pushLineHandler(LineHandler overrideCommandHandler);
+    
+    /**
+     * Pop the last command handler 
+     */
+    public void popLineHandler();
+    
+    
+    public Map<String,String> getAdministrativeAccountData();
 }

Modified: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AddHamCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AddHamCmdHandler.java?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AddHamCmdHandler.java (original)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AddHamCmdHandler.java Fri Jan 15 16:33:58 2010
@@ -83,7 +83,7 @@
         try {
             
             // stop watchdog cause feeding can take some time
-            session.getWatchdog().stop();  
+            //session.getWatchdog().stop();  
             
             if (args[0].equalsIgnoreCase("DIR")) {
                 count = bayesianAnalyzerManagement.addHamFromDir(args[1]);
@@ -99,7 +99,7 @@
             session.getLogger().error("Error on feeding BayesianAnalysis: " + e);
             response = new RemoteManagerResponse("Error on feeding BayesianAnalysis: " + e);
         } finally {
-            session.getWatchdog().start();
+            //session.getWatchdog().start();
         }
         return response;
     }

Modified: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AddSpamCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AddSpamCmdHandler.java?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AddSpamCmdHandler.java (original)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AddSpamCmdHandler.java Fri Jan 15 16:33:58 2010
@@ -82,7 +82,7 @@
         try {
             
             // stop watchdog cause feeding can take some time
-            session.getWatchdog().stop();
+            //session.getWatchdog().stop();
             
             if (args[0].equalsIgnoreCase("DIR")) {
                 count = bayesianAnalyzerManagement.addSpamFromDir(args[1]);
@@ -98,7 +98,7 @@
             session.getLogger().error("Error on feeding BayesianAnalysis: " + e);
             response = new RemoteManagerResponse("Error on feeding BayesianAnalysis: " + e);
         } finally {
-            session.getWatchdog().start();
+            //session.getWatchdog().start();
         }
     
         return response;

Added: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AuthorizationHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AuthorizationHandler.java?rev=899690&view=auto
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AuthorizationHandler.java (added)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/AuthorizationHandler.java Fri Jan 15 16:33:58 2010
@@ -0,0 +1,88 @@
+/****************************************************************
+ * 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.remotemanager.core;
+
+import org.apache.james.remotemanager.ConnectHandler;
+import org.apache.james.remotemanager.LineHandler;
+import org.apache.james.remotemanager.RemoteManagerResponse;
+import org.apache.james.remotemanager.RemoteManagerSession;
+
+public class AuthorizationHandler implements ConnectHandler, LineHandler {
+
+    private final static String AUTHORIZATION_STATE = "AUTHORIZATION_STATE";
+    private final static int LOGIN_SUPPLIED = 1;
+    private final static int PASSWORD_SUPPLIED = 2;
+
+    private final static String USERNAME = "USERNAME";
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.apache.james.remotemanager.ConnectHandler#onConnect(org.apache.james
+     * .remotemanager.RemoteManagerSession)
+     */
+    public void onConnect(RemoteManagerSession session) {
+        RemoteManagerResponse response = new RemoteManagerResponse("JAMES Remote Administration Tool ");// +
+        // Constants.SOFTWARE_VERSION)
+        response.appendLine("Please enter your login and password");
+        response.appendLine("Login id:");
+
+        session.writeRemoteManagerResponse(response);
+
+        session.getState().put(AUTHORIZATION_STATE, LOGIN_SUPPLIED);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.james.remotemanager.LineHandler#onLine(org.apache.james
+     * .remotemanager.RemoteManagerSession, java.lang.String)
+     */
+    public void onLine(RemoteManagerSession session, String line) {
+        int state = (Integer) session.getState().get(AUTHORIZATION_STATE);
+
+        if (state == LOGIN_SUPPLIED) {
+            session.getState().put(USERNAME, line);
+            session.getState().put(AUTHORIZATION_STATE, PASSWORD_SUPPLIED);
+
+            session.writeRemoteManagerResponse(new RemoteManagerResponse("Password:"));
+        } else if (state == PASSWORD_SUPPLIED) {
+            String password = line;
+            String username = (String) session.getState().get(USERNAME);
+
+            if (!password.equals(session.getAdministrativeAccountData().get(username)) || password.length() == 0) {
+                final String message = "Login failed for " + username;
+                session.writeRemoteManagerResponse(new RemoteManagerResponse(message));
+                session.writeRemoteManagerResponse(new RemoteManagerResponse("Login id:"));
+            } else {
+                StringBuilder messageBuffer = new StringBuilder(64).append("Welcome ").append(username).append(". HELP for a list of commands");
+                session.writeRemoteManagerResponse(new RemoteManagerResponse(messageBuffer.toString()));
+                if (session.getLogger().isInfoEnabled()) {
+                    StringBuilder infoBuffer = new StringBuilder(128).append("Login for ").append(username).append(" successful");
+                    session.getLogger().info(infoBuffer.toString());
+                }
+                session.popLineHandler();
+            }
+            session.getState().remove(USERNAME);
+        }
+    }
+
+}

Modified: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/CoreCmdHandlerLoader.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/CoreCmdHandlerLoader.java?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/CoreCmdHandlerLoader.java (original)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/CoreCmdHandlerLoader.java Fri Jan 15 16:33:58 2010
@@ -67,13 +67,13 @@
     private final static String USERCMDHANDLER = UserCmdHandler.class.getName();
     private final static String VERIFYCMDHANDLER = VerifyCmdHandler.class.getName();
     private final static String COMMANDDISPATCHER = RemoteManagerCommandDispatcherLineHandler.class.getName();
-    private final static String WELCOMEMESSAGEHANDLER = WelcomeHandler.class.getName();
+    private final static String AUTHORIZATIONHANDLER = AuthorizationHandler.class.getName();
 
     public CoreCmdHandlerLoader() {
         // Insert the base commands in the Map
-        commands.add(WELCOMEMESSAGEHANDLER);
         commands.add(COMMANDDISPATCHER);
-        
+        commands.add(AUTHORIZATIONHANDLER);
+
         commands.add(ADDDOMAINCMDHANDLER);
         commands.add(ADDHAMCMDHANDLER);
         commands.add(ADDMAPPINGCMDHANDLER);

Modified: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ExportBayesianDataCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ExportBayesianDataCmdHandler.java?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ExportBayesianDataCmdHandler.java (original)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ExportBayesianDataCmdHandler.java Fri Jan 15 16:33:58 2010
@@ -70,7 +70,7 @@
 
         try {
             // stop watchdog cause feeding can take some time
-            session.getWatchdog().stop();
+            // session.getWatchdog().stop();
             
             bayesianAnalyzerManagement.exportData(parameters);
             response = new RemoteManagerResponse("Exported the BayesianAnalysis data");
@@ -78,7 +78,7 @@
             session.getLogger().error("Error on exporting BayesianAnalysis data: " + e);
             response = new RemoteManagerResponse("Error on exporting BayesianAnalysis data: " + e);
         } finally {
-            session.getWatchdog().start();
+            //session.getWatchdog().start();
         }
         return response;
     }

Modified: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ImportBayesianDataCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ImportBayesianDataCmdHandler.java?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ImportBayesianDataCmdHandler.java (original)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ImportBayesianDataCmdHandler.java Fri Jan 15 16:33:58 2010
@@ -70,7 +70,7 @@
 
         try {
             // stop watchdog cause feeding can take some time
-            session.getWatchdog().stop();
+            //session.getWatchdog().stop();
             
             bayesianAnalyzerManagement.importData(parameters);
             response = new RemoteManagerResponse("Imported the BayesianAnalysis data");
@@ -79,7 +79,7 @@
             session.getLogger().error("Error on importing BayesianAnalysis data: " + e);
             response = new RemoteManagerResponse("Error on importing BayesianAnalysis data: " + e);
         } finally {
-            session.getWatchdog().start();
+            //session.getWatchdog().start();
         }
     
         return response;

Modified: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/QuitCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/QuitCmdHandler.java?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/QuitCmdHandler.java (original)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/QuitCmdHandler.java Fri Jan 15 16:33:58 2010
@@ -40,6 +40,7 @@
     public RemoteManagerResponse onCommand(RemoteManagerSession session, RemoteManagerRequest request) {
         RemoteManagerResponse response = new RemoteManagerResponse("Bye");
         response.setEndSession(true);
+        
         return response;
     }
 

Modified: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ResetBayesianDataCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ResetBayesianDataCmdHandler.java?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ResetBayesianDataCmdHandler.java (original)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/core/ResetBayesianDataCmdHandler.java Fri Jan 15 16:33:58 2010
@@ -64,7 +64,7 @@
         RemoteManagerResponse response;
         try {           
             // stop watchdog cause feeding can take some time
-            session.getWatchdog().stop();
+            //session.getWatchdog().stop();
             
             bayesianAnalyzerManagement.resetData();
             response = new RemoteManagerResponse("Reseted the BayesianAnalysis data");
@@ -73,7 +73,7 @@
             session.getLogger().error("Error on reseting BayesianAnalysis data: " + e);
             response = new RemoteManagerResponse("Error on reseting BayesianAnalysis data: " + e);
         } finally {
-            session.getWatchdog().start();
+            //session.getWatchdog().start();
         }
     
         return response;

Added: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/AsyncRemoteManager.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/AsyncRemoteManager.java?rev=899690&view=auto
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/AsyncRemoteManager.java (added)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/AsyncRemoteManager.java Fri Jan 15 16:33:58 2010
@@ -0,0 +1,133 @@
+/****************************************************************
+ * 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.remotemanager.mina;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.pop3server.core.CoreCmdHandlerLoader;
+import org.apache.james.remotemanager.RemoteManagerHandlerConfigurationData;
+import org.apache.james.remotemanager.RemoteManagerMBean;
+import org.apache.james.socket.mina.AbstractAsyncServer;
+import org.apache.james.socket.shared.ProtocolHandlerChainImpl;
+import org.apache.mina.core.service.IoHandler;
+
+public class AsyncRemoteManager extends AbstractAsyncServer implements RemoteManagerMBean{
+
+    private HierarchicalConfiguration handlerConfiguration;
+    private Map<String,String> adminAccounts = new HashMap<String, String>();
+    private ProtocolHandlerChainImpl handlerChain;
+    private RemoteManagerHandlerConfigurationData configData = new RemoteManagerHandlerConfigurationDataImpl();
+    
+    @Override
+    protected IoHandler createIoHandler() {
+        return new RemoteManagerIoHandler(configData, handlerChain, getLogger());
+    }
+
+    @Override
+    protected int getDefaultPort() {
+        return 4555;
+    }
+
+    @Override
+    protected String getServiceType() {
+        return "plain";
+    }
+
+    @Override
+    protected void doConfigure(HierarchicalConfiguration config) throws ConfigurationException {
+        super.doConfigure(config);
+        handlerConfiguration = config.configurationAt("handler");
+        List<HierarchicalConfiguration> accounts = handlerConfiguration.configurationsAt("administrator_accounts.account");
+        for (int i = 0; i < accounts.size(); i++) {
+            adminAccounts.put(accounts.get(i).getString("[@login]"), accounts.get(i).getString("[@password]"));
+        }
+    }
+
+    @Override
+    protected void preInit() throws Exception {
+        prepareHandlerChain();
+    }
+
+    
+    private void prepareHandlerChain() throws Exception {
+        
+        //read from the XML configuration and create and configure each of the handlers
+        HierarchicalConfiguration jamesConfiguration = handlerConfiguration.configurationAt("handlerchain");
+        if (jamesConfiguration.getString("[@coreHandlersPackage]") == null)
+            jamesConfiguration.addProperty("[@coreHandlersPackage]", CoreCmdHandlerLoader.class.getName());
+        
+        handlerChain = getLoader().load(ProtocolHandlerChainImpl.class, getLogger(), jamesConfiguration);
+    }
+
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.remotemanager.RemoteManagerMBean#getNetworkInterface()
+     */
+    public String getNetworkInterface() {
+        return "unknown";
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.remotemanager.RemoteManagerMBean#getSocketType()
+     */
+    public String getSocketType() {
+        return "plain";
+    }
+    
+    /**
+     * A class to provide RemoteManager handler configuration to the handlers
+     */
+    private class RemoteManagerHandlerConfigurationDataImpl
+        implements RemoteManagerHandlerConfigurationData {
+
+        /**
+         * @see org.apache.james.remotemanager.RemoteManagerHandlerConfigurationData#getHelloName()
+         */
+        public String getHelloName() {
+            if (getHelloName() == null) {
+                return AsyncRemoteManager.this.getMailServer().getHelloName();
+            } else {
+                return AsyncRemoteManager.this.getHelloName();
+            }
+        }
+        
+        /**
+         * @see org.apache.james.remotemanager.RemoteManagerHandlerConfigurationData#getAdministrativeAccountData()
+         */
+        public Map<String,String> getAdministrativeAccountData() {
+            return AsyncRemoteManager.this.adminAccounts;
+        }
+
+        /**
+         * @see org.apache.james.remotemanager.RemoteManagerHandlerConfigurationData#getPrompt()
+         */
+        public String getPrompt() {
+            return "";
+        }
+        
+    }
+
+}

Added: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerIoHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerIoHandler.java?rev=899690&view=auto
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerIoHandler.java (added)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerIoHandler.java Fri Jan 15 16:33:58 2010
@@ -0,0 +1,112 @@
+/****************************************************************
+ * 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.remotemanager.mina;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.james.api.protocol.ProtocolHandlerChain;
+import org.apache.james.remotemanager.ConnectHandler;
+import org.apache.james.remotemanager.LineHandler;
+import org.apache.james.remotemanager.RemoteManagerHandlerConfigurationData;
+import org.apache.james.remotemanager.RemoteManagerRequest;
+import org.apache.james.remotemanager.RemoteManagerSession;
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.session.IoSession;
+
+public class RemoteManagerIoHandler extends IoHandlerAdapter{
+    private final static String REMOTEMANAGER_SESSION = "org.apache.james.remotemanager.mina.RemoteManagerIoHandler.REMOTEMANAGER_SESSION";
+    
+    private Log logger;
+    private ProtocolHandlerChain chain;
+
+    private RemoteManagerHandlerConfigurationData config;
+
+    public RemoteManagerIoHandler(RemoteManagerHandlerConfigurationData config, ProtocolHandlerChain chain, Log logger) {
+        this.chain = chain;
+        this.logger = logger;
+        this.config = config;
+    }
+   
+
+    /**
+     * @see org.apache.mina.core.service.IoHandlerAdapter#messageReceived(org.apache.mina.core.session.IoSession, java.lang.Object)
+     */
+    public void messageReceived(IoSession session, Object message)
+            throws Exception {
+        RemoteManagerSession rSession = (RemoteManagerSession) session.getAttribute(REMOTEMANAGER_SESSION);
+        LinkedList<LineHandler> lineHandlers = chain.getHandlers(LineHandler.class);
+        if (lineHandlers.size() > 0) {
+            // thats not really optimal but it allow us to keep things as generic as possible
+            // Will prolly get refactored later
+            String line = ((RemoteManagerRequest) message).toString();
+            ((LineHandler) lineHandlers.getLast()).onLine(rSession, line);
+        }
+    }
+
+    /**
+     * @see org.apache.mina.core.service.IoHandler#exceptionCaught(org.apache.mina.core.session.IoSession,
+     *      java.lang.Throwable)
+     */
+    public void exceptionCaught(IoSession session, Throwable exception)
+            throws Exception {
+        logger.error("Caught exception: " + session.getCurrentWriteMessage(),
+                exception);
+        // just close session
+        session.close(true);
+    }
+
+    /**
+     * @see org.apache.mina.core.service.IoHandler#sessionCreated(org.apache.mina.core.session.IoSession)
+     */
+    public void sessionCreated(IoSession session) throws Exception {
+        RemoteManagerSession rSession  = new RemoteManagerSessionImpl(config, logger, session);
+
+        // Add attribute
+        session.setAttribute(REMOTEMANAGER_SESSION,rSession);
+    }
+
+    /**
+     * @see org.apache.mina.core.service.IoHandler#sessionIdle(org.apache.mina.core.session.IoSession,
+     *      org.apache.mina.core.session.IdleStatus)
+     */
+    public void sessionIdle(IoSession session, IdleStatus status)
+            throws Exception {
+        logger.debug("Connection timed out");
+        session.write("Connection timeout");
+    }
+
+    /**
+     * @see org.apache.mina.core.service.IoHandler#sessionOpened(org.apache.mina.core.session.IoSession)
+     */
+    public void sessionOpened(IoSession session) throws Exception {
+        List<ConnectHandler> connectHandlers = chain
+                .getHandlers(ConnectHandler.class);
+      
+        if (connectHandlers != null) {
+            for (int i = 0; i < connectHandlers.size(); i++) {
+                connectHandlers.get(i).onConnect(
+                        (RemoteManagerSession) session.getAttribute(REMOTEMANAGER_SESSION));
+            }
+        }    
+    }
+}

Added: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerSessionImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerSessionImpl.java?rev=899690&view=auto
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerSessionImpl.java (added)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerSessionImpl.java Fri Jan 15 16:33:58 2010
@@ -0,0 +1,111 @@
+/****************************************************************
+ * 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.remotemanager.mina;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.james.remotemanager.LineHandler;
+import org.apache.james.remotemanager.RemoteManagerHandlerConfigurationData;
+import org.apache.james.remotemanager.RemoteManagerResponse;
+import org.apache.james.remotemanager.RemoteManagerSession;
+import org.apache.james.remotemanager.mina.filter.FilterLineHandlerAdapter;
+import org.apache.mina.core.session.IoSession;
+
+public class RemoteManagerSessionImpl implements RemoteManagerSession {
+    private Log logger;
+    private IoSession session;
+    private Map<String, Object> state = new HashMap<String, Object>();
+    private RemoteManagerHandlerConfigurationData config;
+    private int lineHandlerCount = 0;
+
+    public RemoteManagerSessionImpl(RemoteManagerHandlerConfigurationData config, Log logger, IoSession session) {
+        this.logger = logger;
+        this.session = session;
+        this.config = config;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.james.remotemanager.RemoteManagerSession#getState()
+     */
+    public Map<String, Object> getState() {
+        return state;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @seeorg.apache.james.remotemanager.RemoteManagerSession#
+     * writeRemoteManagerResponse
+     * (org.apache.james.remotemanager.RemoteManagerResponse)
+     */
+    public void writeRemoteManagerResponse(RemoteManagerResponse response) {
+        session.write(response);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.james.api.protocol.LogEnabledSession#getLogger()
+     */
+    public Log getLogger() {
+        return logger;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.james.api.protocol.LogEnabledSession#resetState()
+     */
+    public void resetState() {
+        state.clear();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @seeorg.apache.james.remotemanager.RemoteManagerSession#
+     * getAdministrativeAccountData()
+     */
+    public Map<String, String> getAdministrativeAccountData() {
+        return config.getAdministrativeAccountData();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.remotemanager.RemoteManagerSession#popLineHandler()
+     */
+    public void popLineHandler() {
+        session.getFilterChain().remove("lineHandler" + lineHandlerCount);
+        lineHandlerCount--;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.remotemanager.RemoteManagerSession#pushLineHandler(org.apache.james.remotemanager.LineHandler)
+     */
+    public void pushLineHandler(LineHandler overrideCommandHandler) {
+        lineHandlerCount++;
+        session.getFilterChain().addAfter("protocolCodecFactory", "lineHandler" + lineHandlerCount, new FilterLineHandlerAdapter(overrideCommandHandler));
+    }
+}

Added: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/FilterLineHandlerAdapter.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/FilterLineHandlerAdapter.java?rev=899690&view=auto
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/FilterLineHandlerAdapter.java (added)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/FilterLineHandlerAdapter.java Fri Jan 15 16:33:58 2010
@@ -0,0 +1,49 @@
+/****************************************************************
+ * 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.remotemanager.mina.filter;
+
+import org.apache.james.remotemanager.LineHandler;
+import org.apache.james.remotemanager.RemoteManagerSession;
+import org.apache.mina.core.filterchain.IoFilterAdapter;
+import org.apache.mina.core.session.IoSession;
+
+
+/**
+ * Adapter class which call the wrapped LineHandler on MessageReceived callback
+ * 
+ */
+public final class FilterLineHandlerAdapter extends IoFilterAdapter {
+
+    public final static String REMOTEMANAGER_SESSION = "REMOTEMANAGER_SESSION";
+
+    private LineHandler lineHandler;
+
+    public FilterLineHandlerAdapter(LineHandler lineHandler) {
+        this.lineHandler = lineHandler;
+    }
+
+    /**
+     * @see org.apache.mina.core.filterchain.IoFilterAdapter#messageReceived(org.apache.mina.core.filterchain.IoFilter.NextFilter, org.apache.mina.core.session.IoSession, java.lang.Object)
+     */
+    public void messageReceived(NextFilter arg0, IoSession session, Object arg2)
+            throws Exception {
+        lineHandler.onLine((RemoteManagerSession) session.getAttribute(REMOTEMANAGER_SESSION),
+                (((String) arg2)));
+    }
+}

Added: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/RemoteManagerResponseFilter.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/RemoteManagerResponseFilter.java?rev=899690&view=auto
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/RemoteManagerResponseFilter.java (added)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/RemoteManagerResponseFilter.java Fri Jan 15 16:33:58 2010
@@ -0,0 +1,94 @@
+/****************************************************************
+ * 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.remotemanager.mina.filter;
+
+import java.util.Locale;
+
+import org.apache.james.remotemanager.RemoteManagerRequest;
+import org.apache.james.remotemanager.RemoteManagerResponse;
+import org.apache.james.socket.mina.filter.AbstractResponseFilter;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.core.write.DefaultWriteRequest;
+import org.apache.mina.core.write.WriteRequest;
+
+public class RemoteManagerResponseFilter extends AbstractResponseFilter{
+
+    private final static String CLOSE_ATTRIBUTE =  RemoteManagerResponseFilter.class.getName() + ".closeAttribute";;
+    
+    @Override
+    protected String getCloseAttribute() {
+        return CLOSE_ATTRIBUTE;
+    }
+    
+    /**
+     * (non-Javadoc)
+     * 
+     * @see org.apache.mina.core.filterchain.IoFilterAdapter#messageReceived(org.apache.mina.core.filterchain.IoFilter.NextFilter,
+     *      org.apache.mina.core.session.IoSession, java.lang.Object)
+     */
+    public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception {
+        if (message instanceof String) {
+            String cmdString = (String) message;
+            if (cmdString != null) {
+                cmdString = cmdString.trim();
+            }
+
+            String curCommandArgument = null;
+            String curCommandName = null;
+            int spaceIndex = cmdString.indexOf(" ");
+            if (spaceIndex > 0) {
+                curCommandName = cmdString.substring(0, spaceIndex);
+                curCommandArgument = cmdString.substring(spaceIndex + 1);
+            } else {
+                curCommandName = cmdString;
+            }
+            curCommandName = curCommandName.toUpperCase(Locale.US);
+
+            nextFilter.messageReceived(session, new RemoteManagerRequest(curCommandName, curCommandArgument));
+        } else {
+            super.messageReceived(nextFilter, session, message);
+        }
+    }
+
+    /**
+     * @see org.apache.mina.core.filterchain.IoFilterAdapter#filterWrite(org.apache.mina.core.filterchain.IoFilter.NextFilter,
+     *      org.apache.mina.core.session.IoSession,
+     *      org.apache.mina.core.write.WriteRequest)
+     */
+    public void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception {
+
+        if (writeRequest.getMessage() instanceof RemoteManagerResponse) {
+            RemoteManagerResponse response = (RemoteManagerResponse) writeRequest.getMessage();
+            if (response != null) {
+                for (int k = 0; k < response.getLines().size(); k++) {
+                    nextFilter.filterWrite(session, new DefaultWriteRequest(response.getLines().get(k)));
+                }
+
+                if (response.isEndSession()) {
+                    session.setAttribute(getCloseAttribute());
+                }
+            }
+        } else {
+            super.filterWrite(nextFilter, session, writeRequest);
+        }
+
+    }
+
+}

Added: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/RemoteManagerValidationFilter.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/RemoteManagerValidationFilter.java?rev=899690&view=auto
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/RemoteManagerValidationFilter.java (added)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/RemoteManagerValidationFilter.java Fri Jan 15 16:33:58 2010
@@ -0,0 +1,61 @@
+/****************************************************************
+ * 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.remotemanager.mina.filter;
+
+import org.apache.commons.logging.Log;
+import org.apache.james.remotemanager.RemoteManagerRequest;
+import org.apache.james.remotemanager.RemoteManagerResponse;
+import org.apache.james.socket.mina.filter.AbstractValidationFilter;
+import org.apache.mina.core.write.DefaultWriteRequest;
+import org.apache.mina.core.write.WriteRequest;
+
+public class RemoteManagerValidationFilter extends AbstractValidationFilter{
+
+    public RemoteManagerValidationFilter(Log logger) {
+        super(logger);
+    }
+
+    @Override
+    protected WriteRequest errorRequest(Object obj) {
+        return new DefaultWriteRequest("ERROR: Cannot handle message of type " + (obj != null ? obj.getClass() : "NULL"));
+    }
+
+    @Override
+    protected WriteRequest errorResponse(Object obj) {
+        return null;
+    }
+
+    @Override
+    protected boolean isValidRequest(Object requestObject) {
+        if (requestObject instanceof RemoteManagerRequest) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    protected boolean isValidResponse(Object responseObject) {
+        if (responseObject instanceof RemoteManagerResponse) {
+            return true;
+        }
+        return false;
+    }
+
+}

Modified: james/server/trunk/remotemanager-function/src/test/java/org/apache/james/remotemanager/RemoteManagerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/test/java/org/apache/james/remotemanager/RemoteManagerTest.java?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/test/java/org/apache/james/remotemanager/RemoteManagerTest.java (original)
+++ james/server/trunk/remotemanager-function/src/test/java/org/apache/james/remotemanager/RemoteManagerTest.java Fri Jan 15 16:33:58 2010
@@ -108,7 +108,9 @@
         setUpServiceManager();
         
         handlerFactory.setLoader(serviceManager);
-        handlerFactory.setLog(new SimpleLog("MockLog"));
+        SimpleLog log = new SimpleLog("MockLog");
+        log.setLevel(SimpleLog.LOG_LEVEL_DEBUG);
+        handlerFactory.setLog(log);
         handlerFactory.setMailServer(mailServer);
         handlerFactory.setDNSService(dnsservice);
         

Modified: james/server/trunk/smtpserver-function/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/pom.xml?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/pom.xml (original)
+++ james/server/trunk/smtpserver-function/pom.xml Fri Jan 15 16:33:58 2010
@@ -27,6 +27,7 @@
   <groupId>org.apache.james</groupId>
   <artifactId>james-server-smtpserver-function</artifactId>
   <name>Apache JAMES Server SMTP function</name>
+  
   <dependencies>
     <dependency>
       <groupId>${javax.mail.groupId}</groupId>
@@ -184,7 +185,7 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
-      <scope>test</scope>
+      <scope>runtime</scope>
     </dependency>
     <dependency>
    	  <groupId>junit</groupId>

Modified: james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/LogEnabledSession.java
URL: http://svn.apache.org/viewvc/james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/LogEnabledSession.java?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/LogEnabledSession.java (original)
+++ james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/LogEnabledSession.java Fri Jan 15 16:33:58 2010
@@ -19,6 +19,8 @@
 
 package org.apache.james.api.protocol;
 
+import java.util.Map;
+
 import org.apache.commons.logging.Log;
 
 public interface LogEnabledSession {
@@ -27,4 +29,17 @@
      * @return log, not null
      */
     public Log getLogger();
+    
+    
+    /**
+     * Return Map which can be used to store objects within a session
+     * 
+     * @return state
+     */
+    public Map<String, Object> getState();
+    
+    /**
+     * Reset the state
+     */
+    public void resetState();
 }

Modified: james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/TLSSupportedSession.java
URL: http://svn.apache.org/viewvc/james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/TLSSupportedSession.java?rev=899690&r1=899689&r2=899690&view=diff
==============================================================================
--- james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/TLSSupportedSession.java (original)
+++ james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/TLSSupportedSession.java Fri Jan 15 16:33:58 2010
@@ -21,7 +21,6 @@
 package org.apache.james.api.protocol;
 
 import java.io.IOException;
-import java.util.Map;
 
 /**
  * Session which supports TLS 
@@ -78,16 +77,4 @@
      */
     void startTLS() throws IOException;
     
-    /**
-     * Return Map which can be used to store objects within a session
-     * 
-     * @return state
-     */
-    public Map<String, Object> getState();
-    
-    /**
-     * Reset the state
-     */
-    public void resetState();
-    
 }



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