/* * 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.ftpserver.ftplet; import java.io.IOException; /** * Default ftplet implementation. All the callback method returns null. It is * just an empty implementation. You can derive your ftplet implementation from * this class. * * @author <a href="http://mina.apache.org">Apache MINA Project</a> */ public class DefaultFtplet implements Ftplet { public void init(FtpletContext ftpletContext) throws FtpException { } public void destroy() { } public FtpletResult onConnect(FtpSession session) throws FtpException, IOException { return null; } public FtpletResult onDisconnect(FtpSession session) throws FtpException, IOException { return null; } public FtpletResult beforeCommand(FtpSession session, FtpRequest request) throws FtpException, IOException { String command = request.getCommand().toUpperCase(); if ("DELE".equals(command)) { return onDeleteStart(session, request); } else if ("STOR".equals(command)) { return onUploadStart(session, request); } else if ("RETR".equals(command)) { return onDownloadStart(session, request); } else if ("RMD".equals(command)) { return onRmdirStart(session, request); } else if ("MKD".equals(command)) { return onMkdirStart(session, request); } else if ("APPE".equals(command)) { return onAppendStart(session, request); } else if ("STOU".equals(command)) { return onUploadUniqueStart(session, request); } else if ("RNTO".equals(command)) { return onRenameStart(session, request); } else if ("SITE".equals(command)) { return onSite(session, request); } else { // TODO should we call a catch all? return null; } } public FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply) throws FtpException, IOException { // the reply is ignored for these callbacks String command = request.getCommand().toUpperCase(); if ("PASS".equals(command)) { return onLogin(session, request); } else if ("DELE".equals(command)) { return onDeleteEnd(session, request); } else if ("STOR".equals(command)) { return onUploadEnd(session, request); } else if ("RETR".equals(command)) { return onDownloadEnd(session, request); } else if ("RMD".equals(command)) { return onRmdirEnd(session, request); } else if ("MKD".equals(command)) { return onMkdirEnd(session, request); } else if ("APPE".equals(command)) { return onAppendEnd(session, request); } else if ("STOU".equals(command)) { return onUploadUniqueEnd(session, request); } else if ("RNTO".equals(command)) { return onRenameEnd(session, request); } else { // TODO should we call a catch all? return null; } } /** * Override this method to intercept user logins * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onLogin(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to intercept deletions * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onDeleteStart(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to handle deletions after completion * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onDeleteEnd(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to intercept uploads * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onUploadStart(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to handle uploads after completion * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onUploadEnd(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to intercept downloads * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onDownloadStart(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to handle downloads after completion * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onDownloadEnd(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to intercept deletion of directories * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onRmdirStart(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to handle deletion of directories after completion * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onRmdirEnd(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to intercept creation of directories * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onMkdirStart(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to handle creation of directories after completion * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onMkdirEnd(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to intercept file appends * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onAppendStart(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to intercept file appends after completion * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onAppendEnd(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to intercept unique uploads * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onUploadUniqueStart(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to handle unique uploads after completion * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onUploadUniqueEnd(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to intercept renames * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onRenameStart(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to handle renames after completion * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onRenameEnd(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } /** * Override this method to intercept SITE commands * @param session The current {@link FtpSession} * @param request The current {@link FtpRequest} * @return The action for the container to take * @throws FtpException * @throws IOException */ public FtpletResult onSite(FtpSession session, FtpRequest request) throws FtpException, IOException { return null; } }