如何在Apache FTP上实现ALLO命令?

时间:2018-10-18 11:44:15

标签: apache ftp

我们有一个在网关中运行了几年的嵌入式Apache FTP服务器。它始终可以正常工作。

但是现在,一个客户正在尝试连接一个我们从未有过的品牌设备,并且与到目前为止的所有其他客户相反,该设备提前发送了ALLO命令以确保服务器有足够的空间

但是Apache FTP似乎不知道该命令。跟踪日志状态:

  

已接收:ALLO 77482
  发送:502命令ALLO未实现。

客户端断开连接之后。

Apache文档中也没有该命令: https://mina.apache.org/ftpserver-project/ftpserver_commands.html

问题是,我可以将自己的实现以某种方式插入服务器吗? 为了清楚起见,我没有问如何实现功能。以及如何将自己的实现传递给Apache FTP来使用。如果可以的话,无需触摸源代码。

由于所讨论的应用程序已经运行了很长时间,因此我真的很讨厌将Apache FTP服务器从那里拆下来并嵌入另一个。...

1 个答案:

答案 0 :(得分:1)

好吧,一旦我仔细研究了正确的代码,这简简单单。

命令的实现非常简单,在这种情况下,我只是从一个存根开始进行测试:

nifi.properties

继承AbstractCommand,重写exe​​cute并将响应写入会话。

当然,问题是然后如何使服务器知道实现,这也确实非常简单,尽管可以确定地狱似乎没有任何文档。但是您只需实例化CommandFactoryFactory,映射您的实现,构建CommandFactory并将其设置在FtpServerFactory中即可。

class ALLO : AbstractCommand() {

    override fun execute(session: FtpIoSession, context: FtpServerContext, request: FtpRequest) {

        session.write(LocalizedFtpReply.translate(session, request, context,
                FtpReply.REPLY_200_COMMAND_OKAY, "ALLO", "bring it!"))
    }
}