apache - 如何在 Apache FTP 上实现 ALLO 命令?
问题描述
我们有一个在网关中运行多年的嵌入式 Apache FTP 服务器。它总是毫无问题地工作。
但是现在一个客户正在尝试连接一个我们以前从未有过的品牌的设备,并且与迄今为止的所有其他客户相反,那个东西提前发送了 ALLO 命令以确保服务器有足够的空间。
但是 Apache FTP 似乎不知道该命令。跟踪日志指出:
收到:ALLO 77482 发送
:502 命令 ALLO 未实施。
随后客户端断开连接。
该命令也不存在于 Apache 文档中: https ://mina.apache.org/ftpserver-project/ftpserver_commands.html
所以问题是,我可以以某种方式将自己的实现插入服务器吗?为了清楚起见,我不是在问如何实现该功能。我如何将自己的实现传递给 Apache FTP 以供使用。如果可以在不接触源代码的情况下做到这一点。
由于有问题的应用程序已经运行了很长时间非常稳定,我真的不想把 Apache FTP 服务器从那里撕下来并嵌入另一个......
解决方案
好吧,一旦我深入了解正确的代码,这非常简单。
命令的实现很简单,在这种情况下,我刚开始使用存根进行测试:
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!"))
}
}
继承 AbstractCommand,覆盖执行并向会话写入响应。
问题当然是如何让服务器知道实现,这也很简单,尽管肯定似乎没有任何文档。但是您可以只实例化一个 CommandFactoryFactory,映射您的实现,构建 CommandFactory 并将其设置在 FtpServerFactory 中:
val commandFactoryFactory = CommandFactoryFactory()
commandFactoryFactory.addCommand("ALLO", ALLO())
serverFactory.commandFactory = commandFactoryFactory.createCommandFactory()
推荐阅读
- git - 删除 Git 提交
- python - “设置全局变量”或“设置套件变量”关键字在机器人框架中不起作用
- python - 如何根据函数输出写入单独的列
- java - 访问由 Spring 的类转换器创建的对象上的 getter 时出现 ArrayIndexOutOfBoundsException
- python - 如何打开从 OracleDB 导出的 .xlsx 文件?
- excel - 使用 Excel VBA 解析 PDF 文档时 RPC 失败
- android - 何时需要将 RC 代码更新到 Android Q?
- excel-formula - 如何根据级别从问题库中提取测验问题
- javascript - 我在定位这个内联元素时做错了什么?
- python - 在 python 中创建嵌套列表/字典的正确方法是什么,类似于类似 json 的结构?