Esempio n. 1
0
 public void AddLines(ReplyLines InLines)
 {
     foreach (var line in InLines)
     {
         mLines.Add(line);
     }
 }
 public FtpResponse_DirList(
     FtpCommandId CommandId,
     CommLog InCommLog, string InCmdText, ReplyLines InReplyLines,
     List <FtpDirEntry> InRcvdData)
     : base(CommandId, InCommLog, InCmdText, InReplyLines, InRcvdData)
 {
 }
Esempio n. 3
0
 public FtpException(
     string InCmdText, FtpCommandId InCommandId, ReplyLines InReplyLines, Exception InInnerExcp)
     : base("FTP command failed. " + InCmdText, InInnerExcp)
 {
     mCmdText    = InCmdText;
     _CommandId  = InCommandId;
     mReplyLines = InReplyLines;
 }
Esempio n. 4
0
 public FtpException(
     string InCmdText, FtpCommandId InCommandId, ReplyLines InReplyLines,
     string InMoreInfo)
     : base("FTP command failed. " + InCmdText + " More info: " + InMoreInfo)
 {
     mCmdText       = InCmdText;
     this.CommandId = InCommandId;
     mMoreInfo      = InMoreInfo;
     mReplyLines    = InReplyLines;
 }
Esempio n. 5
0
//    CommLog mCommLog = null;

        public FtpResponse(
            FtpCommandId CommandId,
            CommLog InCommLog, string InCmdText, ReplyLines InReplyLines, object InRcvdData)
        {
            this.CommandId   = CommandId;
            CommLog          = InCommLog;
            CmdText          = InCmdText;
            ReplyLines       = InReplyLines;
            RcvdData         = InRcvdData;
            this.RunDateTime = DateTime.Now;
        }
Esempio n. 6
0
 public ReplyPair(bool InReplyFlag, ReplyLines InReplyLines)
 {
     mReplyFlag  = InReplyFlag;
     mReplyLines = InReplyLines;
 }
Esempio n. 7
0
        public FtpResponse RunStorCommand(
            FtpCommandId CommandId,
            Nullable <bool> OutNotFound, string CmdText,
            CommLog CommLog, FileStream InPcFileStream)
        {
            ReplyLines replyLines = null;
            object     rcvdData   = null;
            Socket     cSocket    = null;

            // return flag. file or dir is not found.
            if (OutNotFound != null)
            {
                OutNotFound = false;
            }

            try
            {
                // create the socket to send on.
                cSocket = CreatePasvDataConnect(CommLog);

                // Send the FTP command,
                replyLines = SendCommand(CommandId, CmdText);

                // send the file bytes on the PASV channel.
                if (CommandId == FtpCommandId.STOR)
                {
                    byte[] buf = new byte[9999];
                    while (true)
                    {
                        int byteCx = InPcFileStream.Read(buf, 0, buf.Length);
                        if (byteCx == 0)
                        {
                            break;
                        }
                        cSocket.Send(buf, byteCx, 0);
                    }
                }
            }

            finally
            {
                if (cSocket != null)
                {
                    cSocket.Close();
                }
            }

            // receive back the response on the command connection after file bytes
            // sent on the data connection.
            if (CommandId == FtpCommandId.STOR)
            {
                ReplyLines postReplyLines = ReadReply();
                if (postReplyLines.IncludesReplyCode(550) == true)
                {
                    if (OutNotFound == null)
                    {
                        throw new FtpException(CmdText, CommandId, postReplyLines);
                    }
                    else
                    {
                        OutNotFound = true;
                    }
                }
                else
                {
                    if (postReplyLines.IncludesAnyReplyCode(new int[] { 226, 250 }) == false)
                    {
                        string moreInfo =
                            "Unexpected FTP server reply following " +
                            "data channel disconnect. " +
                            postReplyLines.Lines.ToArray();
                        throw new FtpException(CmdText, CommandId, replyLines, moreInfo);
                    }
                }
            }

            return(new FtpResponse(CommandId, CommLog, CmdText, replyLines, rcvdData));
        }
        public FtpResponse RunRetrCommand(
            FtpCommandId CommandId,
            Nullable <bool> OutNotFound, string CmdText,
            CommLog CommLog, FileStream InPcFileStream)
        {
            ReplyLines replyLines = null;
            object     rcvdData   = null;
            Socket     cSocket    = null;

            // return flag. file or dir is not found.
            if (OutNotFound != null)
            {
                OutNotFound = false;
            }

            try
            {
                // create the socket to receive on.
                cSocket = CreatePasvDataConnect(CommLog);

                // Send the FTP command,
                replyLines = SendCommand(CommandId, CmdText);

                if (replyLines.IncludesAnyReplyCode(new int[] { 125, 150 }) == false)
                {
                    throw new FtpException(CmdText, CommandId, replyLines);
                }

                // receive the file bytes on the PASV connection.
                while (true)
                {
                    Array.Clear(m_aBuffer, 0, m_aBuffer.Length);
                    m_iBytes = cSocket.Receive(m_aBuffer, m_aBuffer.Length, 0);
                    InPcFileStream.Write(m_aBuffer, 0, m_iBytes);

                    if (m_iBytes <= 0)
                    {
                        break;
                    }
                }
            }

            finally
            {
                if (cSocket != null)
                {
                    cSocket.Close();
                }
            }

            // receive back the response on the command connection after all file
            // bytes received on the PASV connection.
            {
                ReplyLines postReplyLines = ReadReply();
                if (postReplyLines.IncludesReplyCode(550) == true)
                {
                    if (OutNotFound == null)
                    {
                        throw new FtpException(CmdText, CommandId, postReplyLines);
                    }
                    else
                    {
                        OutNotFound = true;
                    }
                }
                else
                {
                    if (postReplyLines.IncludesAnyReplyCode(new int[] { 226, 250 }) == false)
                    {
                        string moreInfo =
                            "Unexpected FTP server reply following " +
                            "data channel disconnect. " +
                            postReplyLines.Lines.ToArray();
                        throw new FtpException(CmdText, CommandId, replyLines, moreInfo);
                    }
                }
            }

            return(new FtpResponse(CommandId, CommLog, CmdText, replyLines, rcvdData));
        }
        public FtpResponse RunListCommand(FtpCommandId CommandId, string CmdText)
        {
            ReplyLines         replyLines = null;
            CommLog            commLog    = new CommLog();
            Socket             cSocket    = null;
            List <FtpDirEntry> listDire   = null;

            try
            {
                cSocket = CreatePasvDataConnect(commLog);

                // Send the FTP command,
                replyLines = SendCommand(CommandId, CmdText);

                // 550 = directory not found
                if (replyLines.IncludesReplyCode(550))
                {
                    throw new FtpException(
                              "Directory to list is not found.", CommandId, replyLines);
                }

                // the reply from the list command on the command connection should say
                // to look on the passive connection for the directory listing.
                var replyLine = replyLines.FindAnyLine(new int[] { 125, 150, 250 });
                if (replyLine == null)
                {
                    throw new FtpException(
                              "not expected response to LIST command", CommandId, replyLines);
                }

                // receive the directory listing on the passive connection.
                string[] rcvdLines = null;
                {
                    Int32  bytes;
                    char[] seperator = new char[] { '\n' };

                    StringBuilder sb = new StringBuilder();
                    while (true)
                    {
                        Array.Clear(m_aBuffer, 0, m_aBuffer.Length);
                        bytes = cSocket.Receive(m_aBuffer, m_aBuffer.Length, 0);
                        sb.Append(ASCII.GetString(m_aBuffer, 0, bytes));
                        if (bytes == 0)
                        {
                            break;
                        }
                    }

                    rcvdLines = sb.ToString().Split(seperator);
                }

                // parse the directory listing
                if ((CommandId == FtpCommandId.LIST) || (CommandId == FtpCommandId.NLST))
                {
                    listDire = new List <FtpDirEntry>();
                    foreach (string line in rcvdLines)
                    {
                        if (line.Length > 0)
                        {
                            var dire = new FtpDirEntry(line);
                            listDire.Add(dire);
                        }
                    }
                }
            }

            finally
            {
                if (cSocket != null)
                {
                    cSocket.Close();
                }
            }

            // receive back the response on the command connection after dir listing
            // sent on the data connection.
            {
                ReplyLines postReplyLines = ReadReply( );
                if (postReplyLines.IncludesReplyCode(550) == true)
                {
                    throw new FtpException(
                              "Directory to list is not found", CommandId, postReplyLines);
                }
                else
                {
                    if (postReplyLines.IncludesAnyReplyCode(new int[] { 226, 250 }) == false)
                    {
                        string moreInfo =
                            "Unexpected FTP server reply following " +
                            "data channel disconnect. " +
                            postReplyLines.Lines.ToArray();
                        throw new FtpException(moreInfo, CommandId, replyLines);
                    }
                }
            }

            return(new FtpResponse_DirList(
                       CommandId,
                       commLog, CommandId.ToString(), replyLines, listDire));
        }