internal FtpRequest(Encoding encoding, FtpCmd command, params string[] arguments) { _encoding = encoding; _command = command; _arguments = arguments; _text = BuildCommandText(); }
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); }
/// <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(); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
/// <summary> /// Default constructor. /// </summary> public FtpRequest() { _encoding = Encoding.UTF8; _command = new FtpCmd(); _text = string.Empty; }
/// <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())); }
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; }
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; }
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; }
/// <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()) { }
/// <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)); } }
/// <summary> /// FTP request constructor. /// </summary> /// <param name="command">FTP request command.</param> internal FtpRequest(FtpCmd command) : this(command, null) { }
/// <summary> /// Default constructor. /// </summary> public FtpRequest() { _command = new FtpCmd(); _text = string.Empty; }
/// <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)); }
/// <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) { }
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; }
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; }
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); }
/// <summary> /// Default constructor. /// </summary> public FtpRequest(FtpCmd command) : this(command, Encoding.ASCII) { }
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; }
/// <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) { }
/// <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); }
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)); } }
/// <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())); }
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; }