private Tuple<FtpCommand, FtpCommandHandlerBase, bool> FindCommandHandler(FtpCommand command)
{
FtpCommandHandler handler;
if (!CommandHandlers.TryGetValue(command.Name, out handler))
return null;
var extensionHost = handler as IFtpCommandHandlerExtensionHost;
if (!string.IsNullOrWhiteSpace(command.Argument) && extensionHost != null)
{
var extensionCommand = FtpCommand.Parse(command.Argument);
FtpCommandHandlerExtension extension;
if (extensionHost.Extensions.TryGetValue(extensionCommand.Name, out extension))
{
return Tuple.Create(extensionCommand, (FtpCommandHandlerBase)extension, extension.IsLoginRequired ?? handler.IsLoginRequired);
}
}
return Tuple.Create(command, (FtpCommandHandlerBase)handler, handler.IsLoginRequired);
}