Пример #1
0
 internal FtpRequest(Encoding encoding, FtpCmd command, params string[] arguments)
 {
     _encoding = encoding;
     _command = command;
     _arguments = arguments;
     _text = BuildCommandText();
 }
Пример #2
0
        private bool JobSize(Session session, String param, FtpCmd ftpCmd)
        {
            // Version. 6.2.0+(6.2.1) RFC:3659
            var path = session.CurrentDir.CreatePath(null, param, false);

            if (path == null)
            {
                // session.StringSend("550 Permission denied.");
                session.StringSend("550 Permission denied.");

                return(false);
            }

            if (Util.Exists(path) == ExistsKind.File)
            {
                var dirName  = Path.GetDirectoryName(path);
                var fileName = Path.GetFileName(path);
                var di       = new DirectoryInfo(dirName);
                var files    = di.GetFiles(fileName);
                session.StringSend(string.Format("213 {0}", files[0].Length));
                return(true);
            }
            session.StringSend(string.Format("550 {0}: No such file or directory.", param));
            return(true);
        }
Пример #3
0
 /// <summary>
 /// FTP request constructor.
 /// </summary>
 /// <param name="encoding">Text encoding object to use.</param>
 /// <param name="command">FTP request command.</param>
 /// <param name="arguments">Parameters for the request</param>
 internal FtpRequest(Encoding encoding, FtpCmd command, params string[] arguments)
 {
     _encoding  = encoding;
     _command   = command;
     _arguments = arguments;
     _text      = BuildCommandText();
 }
Пример #4
0
        private bool JobDir(Session session, String param, FtpCmd ftpCmd)
        {
            bool isDir   = !(ftpCmd == FtpCmd.Dele);
            int  retCode = -1;
            //�p�����[�^����V�����p�X���𐶐�����
            var path = session.CurrentDir.CreatePath(null, param, isDir);

            if (path == null)
            {
                //TODO �G���[���O�擾�͂��K�v
            }
            else
            {
                if (ftpCmd == FtpCmd.Mkd)
                {
                    //�f�B���N�g���͖�����?
                    if (!Directory.Exists(path))  //�f�B���N�g���͖�����?
                    {
                        Directory.CreateDirectory(path);
                        retCode = 257;
                    }
                }
                else if (ftpCmd == FtpCmd.Rmd)
                {
                    if (Directory.Exists(path))  //�f�B���N�g���͗L�邩?
                    {
                        try{
                            Directory.Delete(path);
                            retCode = 250;
                        } catch (Exception) {
                        }
                    }
                }
                else if (ftpCmd == FtpCmd.Dele)
                {
                    if (File.Exists(path))  //�t�@�C���͗L�邩?
                    {
                        File.Delete(path);
                        retCode = 250;
                    }
                }

                if (retCode != -1)
                {
                    //����
                    Logger.Set(LogKind.Normal, session.SockCtrl, 7, string.Format("User:{0} Cmd:{1} Path:{2}", session.OneUser.UserName, ftpCmd, path));
                    session.StringSend(string.Format("{0} {1} command successful.", retCode, ftpCmd));
                    return(true);
                }
                //���s
                //�R�}���h�����ŃG���[���������܂���
                Logger.Set(LogKind.Error, session.SockCtrl, 3, string.Format("User:{0} Cmd:{1} Path:{2}", session.OneUser.UserName, ftpCmd, path));
            }
            session.StringSend(string.Format("451 {0} error.", ftpCmd));
            return(true);
        }
Пример #5
0
        private bool JobDir(Session session, String param, FtpCmd ftpCmd)
        {
            bool isDir   = !(ftpCmd == FtpCmd.Dele);
            int  retCode = -1;
            //パラメータから新しいパス名を生成する
            var path = session.CurrentDir.CreatePath(null, param, isDir);

            if (path == null)
            {
                //TODO エラーログ取得力が必要
            }
            else
            {
                if (ftpCmd == FtpCmd.Mkd)
                {
                    //ディレクトリは無いか?
                    if (!Directory.Exists(path))  //ディレクトリは無いか?
                    {
                        Directory.CreateDirectory(path);
                        retCode = 257;
                    }
                }
                else if (ftpCmd == FtpCmd.Rmd)
                {
                    if (Directory.Exists(path))  //ディレクトリは有るか?
                    {
                        try{
                            Directory.Delete(path);
                            retCode = 250;
                        } catch (Exception) {
                        }
                    }
                }
                else if (ftpCmd == FtpCmd.Dele)
                {
                    if (File.Exists(path))  //ファイルは有るか?
                    {
                        File.Delete(path);
                        retCode = 250;
                    }
                }

                if (retCode != -1)
                {
                    //成功
                    Logger.Set(LogKind.Normal, session.SockCtrl, 7, string.Format("User:{0} Cmd:{1} Path:{2}", session.OneUser.UserName, ftpCmd, path));
                    session.StringSend(string.Format("{0} {1} command successful.", retCode, ftpCmd));
                    return(true);
                }
                //失敗
                //コマンド処理でエラーが発生しました
                Logger.Set(LogKind.Error, session.SockCtrl, 3, string.Format("User:{0} Cmd:{1} Path:{2}", session.OneUser.UserName, ftpCmd, path));
            }
            session.StringSend(string.Format("451 {0} error.", ftpCmd));
            return(true);
        }
Пример #6
0
        private bool JobPort(Session session, String param, FtpCmd ftpCmd)
        {
            String resStr = "500 command not understood:";

            Ip  ip   = null;
            int port = 0;

            if (ftpCmd == FtpCmd.Eprt)
            {
                var tmpBuf = param.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                if (tmpBuf.Length == 3)
                {
                    port = Convert.ToInt32(tmpBuf[2]);
                    try{
                        ip = new Ip(tmpBuf[1]);
                    } catch (ValidObjException) {
                        ip = null;
                    }
                }
                if (ip == null)
                {
                    resStr = "501 Illegal EPRT command.";
                }
            }
            else
            {
                var tmpBuf = param.Split(',');
                if (tmpBuf.Length == 6)
                {
                    try{
                        ip = new Ip(tmpBuf[0] + "." + tmpBuf[1] + "." + tmpBuf[2] + "." + tmpBuf[3]);
                    } catch (ValidObjException) {
                        ip = null;
                    }
                    port = Convert.ToInt32(tmpBuf[4]) * 256 + Convert.ToInt32(tmpBuf[5]);
                }
                if (ip == null)
                {
                    resStr = "501 Illegal PORT command.";
                }
            }
            if (ip != null)
            {
                Thread.Sleep(10);
                var sockData = Inet.Connect(Kernel, ip, port, Timeout, null);
                if (sockData != null)
                {
                    resStr = string.Format("200 {0} command successful.", ftpCmd.ToString().ToUpper());
                }
                session.SockData = sockData;
            }
            session.StringSend(resStr);
            return(true);
        }
Пример #7
0
        private bool JobStor(Session session, String param, FtpCmd ftpCmd)
        {
            String path = session.CurrentDir.CreatePath(null, param, false);

            //Ver6.0.3 �f�B���N�g���g���o�[�T��
            if (path == null)
            {
                session.StringSend("550 Permission denied.");
                return(true);
            }

            ExistsKind exists = Util.Exists(path);

            if (exists != ExistsKind.Dir)
            {
                //File file = new File(path);
                if (exists == ExistsKind.File)
                {
                    // �A�b�v���[�h���[�U�́A�����̃t�@�C����㏑���ł��Ȃ�
                    if (session.OneUser.FtpAcl == FtpAcl.Up && File.Exists(path))
                    {
                        session.StringSend("550 Permission denied.");
                        return(true);
                    }
                }
                //String str = string.Format("150 Opening {0} mode data connection for {1}.", session.getFtpType(), param);
                session.SockCtrl.StringSend(string.Format("150 Opening {0} mode data connection for {1}.", session.FtpType.ToString().ToUpper(), param), "shift-jis");

                //Up start
                Logger.Set(LogKind.Normal, session.SockCtrl, 9, string.Format("{0} {1}", session.OneUser.UserName, param));

                try{
                    int size = RecvBinary(session.SockData, path);
                    session.StringSend("226 Transfer complete.");
                    //Up end
                    Logger.Set(LogKind.Normal, session.SockCtrl, 10, string.Format("{0} {1} {2}bytes", session.OneUser.UserName, param, size));
                } catch (IOException) {
                    session.StringSend("426 Transfer abort.");
                    //Up end
                    Logger.Set(LogKind.Error, session.SockCtrl, 17, string.Format("{0} {1}", session.OneUser.UserName, param));
                }

                session.SockData.Close();
                session.SockData = null;

                return(true);
            }
            session.StringSend(string.Format("451 {0} error.", ftpCmd));
            return(true);
        }
Пример #8
0
        private bool JobPasv(Session session, FtpCmd ftpCmd)
        {
            var port = session.Port;
            var ip   = session.SockCtrl.LocalIp;

            // データストリームのソケットの作成
            for (int i = 0; i < 100; i++)
            {
                port++;
                if (port >= 9999)
                {
                    port = 2000;
                }
                //バインド可能かどうかの確認
                if (SockServer.IsAvailable(Kernel, ip, port))
                {
                    //成功
                    if (ftpCmd == FtpCmd.Epsv)
                    {
                        //Java fix Ver5.8.3
                        //session.StringSend(string.Format("229 Entering Extended Passive Mode. (|||{0}|)", port));
                        session.StringSend(string.Format("229 Entering Extended Passive Mode (|||{0}|)", port));
                    }
                    else
                    {
                        var ipStr = ip.ToString();
                        //Java fix Ver5.8.3
                        //session.StringSend(string.Format("227 Entering Passive Mode. ({0},{1},{2})", ipStr.Replace('.',','), port/256, port%256));
                        session.StringSend(string.Format("227 Entering Passive Mode ({0},{1},{2})", ipStr.Replace('.', ','), port / 256, port % 256));
                    }
                    //指定したアドレス・ポートで待ち受ける
                    var sockData = SockServer.CreateConnection(Kernel, ip, port, null, this);
                    if (sockData == null)
                    {
                        //接続失敗
                        return(false);
                    }
                    if (sockData.SockState != Bjd.sock.SockState.Error)
                    {
                        //セッション情報の保存
                        session.Port     = port;
                        session.SockData = sockData;
                        return(true);
                    }
                }
            }
            session.StringSend("500 command not understood:");
            return(true);
        }
Пример #9
0
        private bool JobPasv(Session session, FtpCmd ftpCmd)
        {
            var port = session.Port;
            var ip   = session.SockCtrl.LocalIp;

            // �f�[�^�X�g���[���̃\�P�b�g�̍쐬
            for (int i = 0; i < 100; i++)
            {
                port++;
                if (port >= 9999)
                {
                    port = 2000;
                }
                //�o�C���h�”\���ǂ����̊m�F
                if (SockServer.IsAvailable(Kernel, ip, port))
                {
                    //����
                    if (ftpCmd == FtpCmd.Epsv)
                    {
                        //Java fix Ver5.8.3
                        //session.StringSend(string.Format("229 Entering Extended Passive Mode. (|||{0}|)", port));
                        session.StringSend(string.Format("229 Entering Extended Passive Mode (|||{0}|)", port));
                    }
                    else
                    {
                        var ipStr = ip.ToString();
                        //Java fix Ver5.8.3
                        //session.StringSend(string.Format("227 Entering Passive Mode. ({0},{1},{2})", ipStr.Replace('.',','), port/256, port%256));
                        session.StringSend(string.Format("227 Entering Passive Mode ({0},{1},{2})", ipStr.Replace('.', ','), port / 256, port % 256));
                    }
                    //�w�肵���A�h���X�E�|�[�g�ő҂��󂯂�
                    var sockData = SockServer.CreateConnection(Kernel, ip, port, null, this);
                    if (sockData == null)
                    {
                        //�ڑ����s
                        return(false);
                    }
                    if (sockData.SockState != Bjd.sock.SockState.Error)
                    {
                        //�Z�b�V�������̕ۑ�
                        session.Port     = port;
                        session.SockData = sockData;
                        return(true);
                    }
                }
            }
            session.StringSend("500 command not understood:");
            return(true);
        }
Пример #10
0
        private bool JobRnto(Session session, String param, FtpCmd ftpCmd)
        {
            //Ver6.0.4
            //if (session.RnfrName != "") {
            if (!string.IsNullOrEmpty(session.RnfrName))
            {
                var path = session.CurrentDir.CreatePath(null, param, false);

                //Ver6.0.3 ディレクトリトラバーサル
                if (path == null)
                {
                    session.StringSend("550 Permission denied.");
                    return(false);
                }

                var existsKind = Util.Exists(path);
                if (existsKind == ExistsKind.Dir)
                {
                    session.StringSend("550 rename: Is a derectory name.");
                    return(true);
                }
                if (existsKind == ExistsKind.File)
                {
                    File.Delete(path);
                }
                if (Directory.Exists(session.RnfrName))  //変更の対象がディレクトリである場合
                {
                    Directory.Move(session.RnfrName, path);
                }
                else    //変更の対象がファイルである場合
                //Ver6.0.4
                {
                    if (!Directory.Exists(Path.GetDirectoryName(path)))
                    {
                        //指定先のディレクトリが存在しない場合のエラー
                        session.StringSend("550 Permission denied.");
                        return(false);
                    }
                    File.Move(session.RnfrName, path);
                }
                Logger.Set(LogKind.Normal, session.SockCtrl, 8, string.Format("{0} {1} -> {2}", session.OneUser.UserName, session.RnfrName, path));
                session.StringSend("250 RNTO command successful.");
                return(true);
            }
            session.StringSend(string.Format("451 {0} error.", ftpCmd));
            return(true);
        }
Пример #11
0
        private bool JobRnto(Session session, String param, FtpCmd ftpCmd)
        {
            //Ver6.0.4
            //if (session.RnfrName != "") {
            if (!string.IsNullOrEmpty(session.RnfrName))
            {
                var path = session.CurrentDir.CreatePath(null, param, false);

                //Ver6.0.3 �f�B���N�g���g���o�[�T��
                if (path == null)
                {
                    session.StringSend("550 Permission denied.");
                    return(false);
                }

                var existsKind = Util.Exists(path);
                if (existsKind == ExistsKind.Dir)
                {
                    session.StringSend("550 rename: Is a derectory name.");
                    return(true);
                }
                if (existsKind == ExistsKind.File)
                {
                    File.Delete(path);
                }
                if (Directory.Exists(session.RnfrName))  //�ύX�̑Ώۂ��f�B���N�g���ł���ꍇ
                {
                    Directory.Move(session.RnfrName, path);
                }
                else    //�ύX�̑Ώۂ��t�@�C���ł���ꍇ
                //Ver6.0.4
                {
                    if (!Directory.Exists(Path.GetDirectoryName(path)))
                    {
                        //�w���̃f�B���N�g�������݂��Ȃ��ꍇ�̃G���[
                        session.StringSend("550 Permission denied.");
                        return(false);
                    }
                    File.Move(session.RnfrName, path);
                }
                Logger.Set(LogKind.Normal, session.SockCtrl, 8, string.Format("{0} {1} -> {2}", session.OneUser.UserName, session.RnfrName, path));
                session.StringSend("250 RNTO command successful.");
                return(true);
            }
            session.StringSend(string.Format("451 {0} error.", ftpCmd));
            return(true);
        }
Пример #12
0
        private bool jobRnfr(Session session, String param, FtpCmd ftpCmd)
        {
            var path = session.CurrentDir.CreatePath(null, param, false);

            //Ver6.0.3 �f�B���N�g���g���o�[�T��
            if (path == null)
            {
                session.StringSend("550 Permission denied.");
                return(false);
            }

            if (Util.Exists(path) != ExistsKind.None)
            {
                session.RnfrName = path;
                session.StringSend("350 File exists, ready for destination name.");
                return(true);
            }
            session.StringSend(string.Format("451 {0} error.", ftpCmd));
            return(true);
        }
Пример #13
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 public FtpRequest()
 {
     _encoding = Encoding.UTF8;
     _command = new FtpCmd();
     _text = string.Empty;
 }
Пример #14
0
 /// <summary>
 /// Linearly searches for the specified object based on the feature 'name' parameter value
 /// and returns true if an object with the name is found; otherwise false.  Search is case insensitive.
 /// </summary>
 /// <param name="name">The name of the FtpFeature to locate in the collection.</param>
 /// <returns>True if the name if found; otherwise false.</returns>
 public bool Contains(FtpCmd name)
 {
     return(Contains(name.ToString()));
 }
Пример #15
0
 private bool JobPasv(Session session, FtpCmd ftpCmd)
 {
     var port = session.Port;
     var ip = session.SockCtrl.LocalIp;
     // �f�[�^�X�g���[���̃\�P�b�g�̍쐬
     for (int i = 0; i < 100; i++){
         port++;
         if (port >= 9999){
             port = 2000;
         }
         //�o�C���h�”\���ǂ����̊m�F
         if (SockServer.IsAvailable(Kernel,ip, port)){
             //����
             if (ftpCmd == FtpCmd.Epsv){
                 //Java fix Ver5.8.3
                 //session.StringSend(string.Format("229 Entering Extended Passive Mode. (|||{0}|)", port));
                 session.StringSend(string.Format("229 Entering Extended Passive Mode (|||{0}|)", port));
             } else {
                 var ipStr = ip.ToString();
                 //Java fix Ver5.8.3
                 //session.StringSend(string.Format("227 Entering Passive Mode. ({0},{1},{2})", ipStr.Replace('.',','), port/256, port%256));
                 session.StringSend(string.Format("227 Entering Passive Mode ({0},{1},{2})", ipStr.Replace('.', ','), port / 256, port % 256));
             }
             //�w�肵���A�h���X�E�|�[�g�ő҂��󂯂�
             var sockData = SockServer.CreateConnection(Kernel,ip, port, null, this);
             if (sockData == null){
                 //�ڑ����s
                 return false;
             }
             if (sockData.SockState != Bjd.sock.SockState.Error){
                 //�Z�b�V�������̕ۑ�
                 session.Port = port;
                 session.SockData = sockData;
                 return true;
             }
         }
     }
     session.StringSend("500 command not understood:");
     return true;
 }
Пример #16
0
        private bool jobRnfr(Session session, String param, FtpCmd ftpCmd)
        {
            var path = session.CurrentDir.CreatePath(null, param, false);
            //Ver6.0.3 �f�B���N�g���g���o�[�T��
            if (path == null) {
                session.StringSend("550 Permission denied.");
                return false;
            }

            if (Util.Exists(path) != ExistsKind.None){
                session.RnfrName = path;
                session.StringSend("350 File exists, ready for destination name.");
                return true;
            }
            session.StringSend(string.Format("451 {0} error.", ftpCmd));
            return true;
        }
Пример #17
0
        private bool JobRnto(Session session, String param, FtpCmd ftpCmd)
        {
            //Ver6.0.4
            //if (session.RnfrName != "") {
            if (!string.IsNullOrEmpty(session.RnfrName)) {
                var path = session.CurrentDir.CreatePath(null, param, false);

                //Ver6.0.3 �f�B���N�g���g���o�[�T��
                if (path == null) {
                    session.StringSend("550 Permission denied.");
                    return false;
                }

                var existsKind = Util.Exists(path);
                if (existsKind == ExistsKind.Dir){
                    session.StringSend("550 rename: Is a derectory name.");
                    return true;
                }
                if (existsKind == ExistsKind.File){
                    File.Delete(path);
                }
                if (Directory.Exists(session.RnfrName)) {//�ύX�̑Ώۂ��f�B���N�g���ł���ꍇ
                    Directory.Move(session.RnfrName, path);
                } else {//�ύX�̑Ώۂ��t�@�C���ł���ꍇ
                    //Ver6.0.4
                    if (!Directory.Exists(Path.GetDirectoryName(path))){
                        //�w���̃f�B���N�g�������݂��Ȃ��ꍇ�̃G���[
                        session.StringSend("550 Permission denied.");
                        return false;
                    }
                    File.Move(session.RnfrName, path);
                }
                Logger.Set(LogKind.Normal, session.SockCtrl, 8, string.Format("{0} {1} -> {2}", session.OneUser.UserName, session.RnfrName, path));
                session.StringSend("250 RNTO command successful.");
                return true;
            }
            session.StringSend(string.Format("451 {0} error.", ftpCmd));
            return true;
        }
Пример #18
0
 /// <summary>
 ///     FTP request constructor.
 /// </summary>
 /// <param name="command">FTP request command.</param>
 /// <param name="arguments">Parameters for the request</param>
 internal FtpRequest(FtpCmd command, params string[] arguments)
 {
     _command = command;
     _arguments = arguments;
     _text = BuildCommandText();
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="message">Exception message text.</param>
 /// <param name="command">Enumerated FTP command.</param>
 public FtpCommandNotSupportedException(string message, FtpCmd command)
     : this(message, command.ToString())
 {
 }
Пример #20
0
 /// <summary>
 /// Gets an FtpFeature from the FtpFeatureCollection list based on name.
 /// </summary>
 /// <param name="name">Name of the feature.</param>
 /// <returns>FtpFeature object.</returns>
 public FtpFeature this[FtpCmd name]
 {
     get { return(Find(name)); }
 }
Пример #21
0
 /// <summary>
 ///     FTP request constructor.
 /// </summary>
 /// <param name="command">FTP request command.</param>
 internal FtpRequest(FtpCmd command)
     : this(command, null)
 {
 }
Пример #22
0
 /// <summary>
 ///     FTP request constructor.
 /// </summary>
 /// <param name="command">FTP request command.</param>
 /// <param name="arguments">Parameters for the request</param>
 internal FtpRequest(FtpCmd command, params string[] arguments)
 {
     _command   = command;
     _arguments = arguments;
     _text      = BuildCommandText();
 }
Пример #23
0
 /// <summary>
 ///     Default constructor.
 /// </summary>
 public FtpRequest()
 {
     _command = new FtpCmd();
     _text    = string.Empty;
 }
Пример #24
0
 /// <summary>
 /// Linearly searches for the specified object based on the feature 'name' parameter value
 /// and returns true if an object with the name is found; otherwise false.  Search is case insensitive.
 /// </summary>
 /// <param name="name">The name of the FtpFeature to locate in the collection.</param>
 /// <param name="arguments">The argument for the FtpFeature to locate in the collection.</param>
 /// <returns>True if the name if found; otherwise false.</returns>
 public bool Contains(FtpCmd name, string arguments)
 {
     return(Contains(name.ToString(), arguments));
 }
Пример #25
0
 /// <summary>
 /// FTP request constructor.
 /// </summary>
 /// <param name="encoding">Text encoding object to use.</param>
 /// <param name="command">FTP request command.</param>
 internal FtpRequest(Encoding encoding, FtpCmd command)
     : this(encoding, command, null)
 {
 }
Пример #26
0
 /// <summary>
 ///     Default constructor.
 /// </summary>
 public FtpRequest()
 {
     _command = new FtpCmd();
     _text = string.Empty;
 }
Пример #27
0
        private bool JobStor(Session session, String param, FtpCmd ftpCmd)
        {
            String path = session.CurrentDir.CreatePath(null, param, false);

            //Ver6.0.3 �f�B���N�g���g���o�[�T��
            if (path==null){
                session.StringSend("550 Permission denied.");
                return true;
            }

            ExistsKind exists = Util.Exists(path);
            if (exists != ExistsKind.Dir){
                //File file = new File(path);
                if (exists == ExistsKind.File){
                    // �A�b�v���[�h���[�U�́A�����̃t�@�C����㏑���ł��Ȃ�
                    if (session.OneUser.FtpAcl == FtpAcl.Up && File.Exists(path)){
                        session.StringSend("550 Permission denied.");
                        return true;
                    }
                }
                //String str = string.Format("150 Opening {0} mode data connection for {1}.", session.getFtpType(), param);
                session.SockCtrl.StringSend(string.Format("150 Opening {0} mode data connection for {1}.", session.FtpType.ToString().ToUpper(), param),"shift-jis");

                //Up start
                Logger.Set(LogKind.Normal, session.SockCtrl, 9, string.Format("{0} {1}", session.OneUser.UserName, param));

                try{
                    int size = RecvBinary(session.SockData, path);
                    session.StringSend("226 Transfer complete.");
                    //Up end
                    Logger.Set(LogKind.Normal, session.SockCtrl, 10, string.Format("{0} {1} {2}bytes", session.OneUser.UserName, param, size));
                } catch (IOException){
                    session.StringSend("426 Transfer abort.");
                    //Up end
                    Logger.Set(LogKind.Error, session.SockCtrl, 17, string.Format("{0} {1}", session.OneUser.UserName, param));
                }

                session.SockData.Close();
                session.SockData = null;

                return true;
            }
            session.StringSend(string.Format("451 {0} error.", ftpCmd));
            return true;
        }
Пример #28
0
 /// <summary>
 ///     FTP request constructor.
 /// </summary>
 /// <param name="command">FTP request command.</param>
 internal FtpRequest(FtpCmd command)
     : this(command, null)
 {
 }
Пример #29
0
        private bool JobNlist(Session session, String param, FtpCmd ftpCmd)
        {
            // �Z�k���X�g���ǂ���
            var wideMode = (ftpCmd == FtpCmd.List);
            var mask = "*.*";

            //�p�����[�^���w�肳��Ă���ꍇ�A�}�X�N��擾����
            if (param != ""){
                foreach (var p in param.Split(' ')){
                    if (p == ""){
                        continue;
                    }
                    if (p.ToUpper().IndexOf("-L") == 0){
                        wideMode = true;
                    }else if(p.ToUpper().IndexOf("-A") == 0) {
                        wideMode = true;
                    } else{
                        //���C���h�J�[�h�w��
                        if (p.IndexOf('*') != -1 || p.IndexOf('?') != -1){
                            mask = param;
                        } else{
                            //�t�H���_�w��
                            //Ver5.9.0
                            try {
                                var existsKind = Util.Exists(session.CurrentDir.CreatePath(null, param, false));
                                switch (existsKind) {
                                    case ExistsKind.Dir:
                                        mask = param + "\\*.*";
                                        break;
                                    case ExistsKind.File:
                                        mask = param;
                                        break;
                                    default:
                                        session.StringSend(string.Format("500 {0}: command requires a parameter.", param));
                                        session.SockData = null;
                                        return true;
                                }
                            } catch (Exception ex) {
                                Logger.Set(LogKind.Error, session.SockCtrl, 18,String.Format("param={0} Exception.message={1}",param,ex.Message));
                                session.StringSend(string.Format("500 {0}: command requires a parameter.", param));
                                session.SockData = null;
                                return true;
                            }
                        }
                    }
                }
            }
            session.StringSend(string.Format("150 Opening {0} mode data connection for ls.", session.FtpType.ToString().ToUpper()));
            //�t�@�C���ꗗ�擾
            foreach (var s in session.CurrentDir.List(mask, wideMode)){
                session.SockData.StringSend(s, "Shift-Jis");
            }
            session.StringSend("226 Transfer complete.");

            session.SockData.Close();
            session.SockData = null;
            return true;
        }
Пример #30
0
        private bool JobNlist(Session session, String param, FtpCmd ftpCmd)
        {
            // �Z�k���X�g���ǂ���
            var wideMode = (ftpCmd == FtpCmd.List);
            var mask     = "*.*";

            //�p�����[�^���w�肳��Ă���ꍇ�A�}�X�N��擾����
            if (param != "")
            {
                foreach (var p in param.Split(' '))
                {
                    if (p == "")
                    {
                        continue;
                    }
                    if (p.ToUpper().IndexOf("-L") == 0)
                    {
                        wideMode = true;
                    }
                    else if (p.ToUpper().IndexOf("-A") == 0)
                    {
                        wideMode = true;
                    }
                    else
                    {
                        //���C���h�J�[�h�w��
                        if (p.IndexOf('*') != -1 || p.IndexOf('?') != -1)
                        {
                            mask = param;
                        }
                        else
                        {
                            //�t�H���_�w��
                            //Ver5.9.0
                            try {
                                var existsKind = Util.Exists(session.CurrentDir.CreatePath(null, param, false));
                                switch (existsKind)
                                {
                                case ExistsKind.Dir:
                                    mask = param + "\\*.*";
                                    break;

                                case ExistsKind.File:
                                    mask = param;
                                    break;

                                default:
                                    session.StringSend(string.Format("500 {0}: command requires a parameter.", param));
                                    session.SockData = null;
                                    return(true);
                                }
                            } catch (Exception ex) {
                                Logger.Set(LogKind.Error, session.SockCtrl, 18, String.Format("param={0} Exception.message={1}", param, ex.Message));
                                session.StringSend(string.Format("500 {0}: command requires a parameter.", param));
                                session.SockData = null;
                                return(true);
                            }
                        }
                    }
                }
            }
            session.StringSend(string.Format("150 Opening {0} mode data connection for ls.", session.FtpType.ToString().ToUpper()));
            //�t�@�C���ꗗ�擾
            foreach (var s in session.CurrentDir.List(mask, wideMode))
            {
                session.SockData.StringSend(s, "Shift-Jis");
            }
            session.StringSend("226 Transfer complete.");

            session.SockData.Close();
            session.SockData = null;
            return(true);
        }
Пример #31
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 public FtpRequest(FtpCmd command)
     : this(command, Encoding.ASCII)
 {
 }
Пример #32
0
        private bool JobPort(Session session, String param, FtpCmd ftpCmd)
        {
            String resStr = "500 command not understood:";

            Ip ip = null;
            int port = 0;

            if (ftpCmd == FtpCmd.Eprt){
                var tmpBuf = param.Split(new[]{'|'},StringSplitOptions.RemoveEmptyEntries);
                if (tmpBuf.Length == 3){
                    port = Convert.ToInt32(tmpBuf[2]);
                    try{
                        ip = new Ip(tmpBuf[1]);
                    } catch (ValidObjException){
                        ip = null;
                    }
                }
                if (ip == null){
                    resStr = "501 Illegal EPRT command.";
                }
            } else{
                var tmpBuf = param.Split(',');
                if (tmpBuf.Length == 6){
                    try{
                        ip = new Ip(tmpBuf[0] + "." + tmpBuf[1] + "." + tmpBuf[2] + "." + tmpBuf[3]);
                    } catch (ValidObjException ){
                        ip = null;
                    }
                    port = Convert.ToInt32(tmpBuf[4]) * 256 + Convert.ToInt32(tmpBuf[5]);
                }
                if (ip == null){
                    resStr = "501 Illegal PORT command.";
                }
            }
            if (ip != null){

                Thread.Sleep(10);
                var sockData = Inet.Connect(Kernel,ip, port, Timeout, null);
                if (sockData != null){
                    resStr = string.Format("200 {0} command successful.", ftpCmd.ToString().ToUpper());
                }
                session.SockData = sockData;
            }
            session.StringSend(resStr);
            return true;
        }
Пример #33
0
 /// <summary>
 /// Override constuctor for simple commands
 /// </summary>
 /// <param name="command"></param>
 /// <param name="argument"></param>
 public FtpRequest(FtpCmd command, string argument)
     : this(command, Encoding.ASCII, argument)
 {
 }
Пример #34
0
 /// <summary>
 /// FTP request constructor.
 /// </summary>
 /// <param name="command">FTP request command.</param>
 /// <param name="encoding"></param>
 /// <param name="arguments">Parameters for the request</param>
 public FtpRequest(FtpCmd command, Encoding encoding, params string[] arguments)
 {
     _command        = command;
     _arguments      = arguments;
     _encodedCommand = BuildCommandText(command.ToString(), encoding, arguments);
 }
Пример #35
0
        internal void BuildHappyCodes(FtpCmd command)
        {
            switch (command)
            {
            case FtpCmd.Unknown:
            case FtpCmd.Quit:
            case FtpCmd.Epsv:
            case FtpCmd.Erpt:
            case FtpCmd.Abor:
                happyCodes = BuildResponseArray();
                break;

            case FtpCmd.Allo:
                happyCodes = BuildResponseArray(FtpResponseCode.CommandOkay, FtpResponseCode.CommandNotImplementedSuperfluousAtThisSite); break;

            case FtpCmd.User:
                happyCodes = BuildResponseArray(FtpResponseCode.UserNameOkayButNeedPassword,
                                                FtpResponseCode.ServiceReadyForNewUser,
                                                FtpResponseCode.UserLoggedIn); break;

            case FtpCmd.Pass:
                happyCodes = BuildResponseArray(FtpResponseCode.UserLoggedIn,
                                                FtpResponseCode.ServiceReadyForNewUser,
                                                FtpResponseCode.NotLoggedIn);
                break;

            case FtpCmd.Cwd:
                happyCodes = BuildResponseArray(FtpResponseCode.RequestedFileActionOkayAndCompleted); break;

            case FtpCmd.Pwd:
                happyCodes = BuildResponseArray(FtpResponseCode.PathNameCreated); break;

            case FtpCmd.Dele:
                happyCodes = BuildResponseArray(FtpResponseCode.RequestedFileActionOkayAndCompleted); break;

            case FtpCmd.Mkd:
                happyCodes = BuildResponseArray(FtpResponseCode.PathNameCreated); break;

            case FtpCmd.Rmd:
                happyCodes = BuildResponseArray(FtpResponseCode.RequestedFileActionOkayAndCompleted); break;

            case FtpCmd.Help:
                happyCodes = BuildResponseArray(FtpResponseCode.SystemStatusOrHelpReply,
                                                FtpResponseCode.HelpMessage,
                                                FtpResponseCode.FileStatus);
                break;

            case FtpCmd.Mdtm:
                happyCodes = BuildResponseArray(FtpResponseCode.FileStatus); break;

            case FtpCmd.Stat:
                happyCodes = BuildResponseArray(FtpResponseCode.SystemStatusOrHelpReply,
                                                FtpResponseCode.DirectoryStatus,
                                                FtpResponseCode.FileStatus);
                break;

            case FtpCmd.Cdup:
                happyCodes = BuildResponseArray(FtpResponseCode.CommandOkay, FtpResponseCode.RequestedFileActionOkayAndCompleted); break;

            case FtpCmd.Size:
                happyCodes = BuildResponseArray(FtpResponseCode.FileStatus); break;

            case FtpCmd.Feat:
                happyCodes = BuildResponseArray(FtpResponseCode.SystemStatusOrHelpReply); break;

            case FtpCmd.Syst:
                happyCodes = BuildResponseArray(FtpResponseCode.NameSystemType); break;

            case FtpCmd.Rnfr:
                happyCodes = BuildResponseArray(FtpResponseCode.RequestedFileActionPendingFurtherInformation); break;

            case FtpCmd.Rnto:
                happyCodes = BuildResponseArray(FtpResponseCode.RequestedFileActionOkayAndCompleted); break;

            case FtpCmd.Site:
                happyCodes = BuildResponseArray(FtpResponseCode.CommandOkay,
                                                FtpResponseCode.CommandNotImplementedSuperfluousAtThisSite,
                                                FtpResponseCode.RequestedFileActionOkayAndCompleted);
                break;

            case FtpCmd.Pasv:
                happyCodes = BuildResponseArray(FtpResponseCode.EnteringPassiveMode); break;

            case FtpCmd.Noop:
            case FtpCmd.Port:
            case FtpCmd.Type:
            case FtpCmd.Pbsz:
            case FtpCmd.Prot:
            case FtpCmd.Mode:
            case FtpCmd.Auth:
                happyCodes = BuildResponseArray(FtpResponseCode.CommandOkay);
                break;

            case FtpCmd.Rest:
                happyCodes = BuildResponseArray(FtpResponseCode.RequestedFileActionPendingFurtherInformation); break;

            case FtpCmd.List:
            case FtpCmd.Nlst:
                happyCodes = BuildResponseArray(FtpResponseCode.DataConnectionAlreadyOpenSoTransferStarting,
                                                FtpResponseCode.FileStatusOkaySoAboutToOpenDataConnection,
                                                FtpResponseCode.ClosingDataConnection,
                                                FtpResponseCode.RequestedFileActionOkayAndCompleted);
                break;

            case FtpCmd.Appe:
            case FtpCmd.Stor:
            case FtpCmd.Stou:
            case FtpCmd.Retr:
                happyCodes = BuildResponseArray(FtpResponseCode.DataConnectionAlreadyOpenSoTransferStarting,
                                                FtpResponseCode.FileStatusOkaySoAboutToOpenDataConnection,
                                                FtpResponseCode.ClosingDataConnection,
                                                FtpResponseCode.RequestedFileActionOkayAndCompleted);
                break;

            case FtpCmd.Xcrc:
            case FtpCmd.Xmd5:
            case FtpCmd.Xsha1:
                happyCodes = BuildResponseArray(FtpResponseCode.RequestedFileActionOkayAndCompleted); break;

            case FtpCmd.Mfmt:
            case FtpCmd.Mfct:
                happyCodes = BuildResponseArray(FtpResponseCode.FileStatus);
                break;

            default:
                throw new FtpException(String.Format("No response code(s) defined for FtpCmd {0}.", _command));
            }
        }
Пример #36
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 public FtpRequest()
 {
     _encoding = Encoding.UTF8;
     _command  = new FtpCmd();
     _text     = string.Empty;
 }
Пример #37
0
 /// <summary>
 /// Linearly searches for the specified object based on the feature 'name' parameter value
 /// and returns the corresponding object with the name is found; otherwise null.  Search is case insensitive.
 /// </summary>
 /// <param name="name">The name of the FtpFeature to locate in the collection.</param>
 /// <returns>FtpFeature object if the name if found; otherwise null.</returns>
 public FtpFeature Find(FtpCmd name)
 {
     return(Find(name.ToString()));
 }
Пример #38
0
 /// <summary>
 /// FTP request constructor.
 /// </summary>
 /// <param name="encoding">Text encoding object to use.</param>
 /// <param name="command">FTP request command.</param>
 internal FtpRequest(Encoding encoding, FtpCmd command) : this(encoding, command, null)
 {
 }
Пример #39
0
        private bool JobDir(Session session, String param, FtpCmd ftpCmd)
        {
            bool isDir = !(ftpCmd == FtpCmd.Dele);
            int retCode = -1;
            //�p�����[�^����V�����p�X���𐶐�����
            var path = session.CurrentDir.CreatePath(null, param, isDir);
            if (path == null){
                //TODO �G���[���O�擾�͂��K�v
            } else{
                if (ftpCmd == FtpCmd.Mkd){
                    //�f�B���N�g���͖�����?
                    if (!Directory.Exists(path)) {//�f�B���N�g���͖�����?
                        Directory.CreateDirectory(path);
                        retCode = 257;
                    }
                } else if (ftpCmd == FtpCmd.Rmd) {
                    if (Directory.Exists(path)) {//�f�B���N�g���͗L�邩?
                        try{
                            Directory.Delete(path);
                            retCode = 250;
                        } catch (Exception) {

                        }
                    }
                } else if (ftpCmd == FtpCmd.Dele) {
                    if (File.Exists(path)) {//�t�@�C���͗L�邩?
                        File.Delete(path);
                        retCode = 250;
                    }
                }

                if (retCode != -1){
                    //����
                    Logger.Set(LogKind.Normal, session.SockCtrl, 7, string.Format("User:{0} Cmd:{1} Path:{2}", session.OneUser.UserName, ftpCmd, path));
                    session.StringSend(string.Format("{0} {1} command successful.", retCode, ftpCmd));
                    return true;
                }
                //���s
                //�R�}���h�����ŃG���[���������܂���
                Logger.Set(LogKind.Error, session.SockCtrl, 3, string.Format("User:{0} Cmd:{1} Path:{2}", session.OneUser.UserName, ftpCmd, path));
            }
            session.StringSend(string.Format("451 {0} error.", ftpCmd));
            return true;
        }