Hello,

 I cannot help you with that right now, but I suggest you implement a
"filesystem" instead of using a FTPLet for this. You can take a look
at the NativeFtpFileSystem (I think that's the name) implementation to
serve as an example. If you're only interested in the LIST command,
then it's better you implement the LIST command itself or use an
ftplet as you're currently doing.



2011/12/21 Florent Georges <li...@fgeorges.org>:
>   Hi,
>
>   I try to implement an Ftplet in order to serve a kind of
> "virtual directory" on an FTP server.  That is, if I detect in
> beforeCommand() that the client's command is a LIST on a specific
> name, I want to compute the result to send back instead of
> looking at an actual directory.
>
>   So I use the following code in beforeCommand() (in my own class
> that implements Ftplet):
>
>     session.write(new DefaultFtpReply(150,
>         "File status okay; about to open data connection."));
>
>     DataConnectionFactory factory = session.getDataConnection();
>     DataConnection cxion = factory.openConnection();
>     cxion.transferToClient(session, "<file 1 info string>\r\n");
>     cxion.transferToClient(session, "<file 2 info string>\r\n");
>     factory.closeDataConnection();
>
>     session.write(new DefaultFtpReply(226, "Closing data connection."));
>     return FtpletResult.SKIP;
>
>   But the second call to cxion.transferToClient() throws a socket
> exception:
>
> java.net.SocketException: Socket is closed
>  at java.net.Socket.getOutputStream(Socket.java:828)
>  at 
> org.apache.ftpserver.impl.IODataConnection.getDataOutputStream(IODataConnection.java:107)
>  at 
> org.apache.ftpserver.impl.IODataConnection.transferToClient(IODataConnection.java:176)
>  at 
> org.fgeorges.ftpserver.FtpletTry$MyFtplet.beforeCommand(FtpletTry.java:156)
>  at 
> org.apache.ftpserver.ftpletcontainer.impl.DefaultFtpletContainer.beforeCommand(DefaultFtpletContainer.java:162)
>  at 
> org.apache.ftpserver.impl.DefaultFtpHandler.messageReceived(DefaultFtpHandler.java:196)
>  at 
> org.apache.ftpserver.listener.nio.FtpHandlerAdapter.messageReceived(FtpHandlerAdapter.java:61)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:716)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
>  at 
> org.apache.ftpserver.listener.nio.FtpLoggingFilter.messageReceived(FtpLoggingFilter.java:85)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
>  at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:75)
>  at 
> org.apache.mina.filter.logging.MdcInjectionFilter.filter(MdcInjectionFilter.java:136)
>  at 
> org.apache.mina.filter.util.CommonEventFilter.messageReceived(CommonEventFilter.java:70)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
>  at 
> org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:427)
>  at 
> org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:245)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
>  at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:796)
>  at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:75)
>  at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
>  at 
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:780)
>  at 
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:772)
>  at 
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:714)
>  at java.lang.Thread.run(Thread.java:680)
>
>   Any idea why this is the case?  And how to resolve it?
>
>   Regards,
>
> --
> Florent Georges
> http://fgeorges.org/
> http://h2oconsulting.be/

Reply via email to