我们有一个在网关中运行了几年的嵌入式Apache FTP服务器。它始终可以正常工作。
但是现在,一个客户正在尝试连接一个我们从未有过的品牌设备,并且与到目前为止的所有其他客户相反,该设备提前发送了ALLO命令以确保服务器有足够的空间
但是Apache FTP似乎不知道该命令。跟踪日志状态:
已接收:ALLO 77482
发送:502命令ALLO未实现。
客户端断开连接之后。
Apache文档中也没有该命令: https://mina.apache.org/ftpserver-project/ftpserver_commands.html
问题是,我可以将自己的实现以某种方式插入服务器吗? 为了清楚起见,我没有问如何实现功能。以及如何将自己的实现传递给Apache FTP来使用。如果可以的话,无需触摸源代码。
由于所讨论的应用程序已经运行了很长时间,因此我真的很讨厌将Apache FTP服务器从那里拆下来并嵌入另一个。...
答案 0 :(得分:1)
好吧,一旦我仔细研究了正确的代码,这简简单单。
命令的实现非常简单,在这种情况下,我只是从一个存根开始进行测试:
nifi.properties
继承AbstractCommand,重写execute并将响应写入会话。
当然,问题是然后如何使服务器知道实现,这也确实非常简单,尽管可以确定地狱似乎没有任何文档。但是您只需实例化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!"))
}
}