From e078a2887cf2dc61da49ce302324ff1485f95af9 Mon Sep 17 00:00:00 2001 From: Ian C Date: Mon, 1 Oct 2012 20:59:12 +0000 Subject: Added non-working code for an attempt at FTP --- Noddybox.WindowsPhone.FTP/ServerDialog.cs | 178 ++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 Noddybox.WindowsPhone.FTP/ServerDialog.cs (limited to 'Noddybox.WindowsPhone.FTP/ServerDialog.cs') diff --git a/Noddybox.WindowsPhone.FTP/ServerDialog.cs b/Noddybox.WindowsPhone.FTP/ServerDialog.cs new file mode 100644 index 0000000..4291afb --- /dev/null +++ b/Noddybox.WindowsPhone.FTP/ServerDialog.cs @@ -0,0 +1,178 @@ +// This file is part of the Noddybox.WindowsPhone C# suite. +// +// Noddybox.Emulation is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Noddybox.Emulation is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Noddybox.Emulation. If not, see . +// +// Copyright (c) 2012 Ian Cowburn +// +using System; +using System.Net; +using System.Net.Sockets; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; + +namespace Noddybox.WindowsPhone.Net +{ + /// + /// Provides a wrapper around a stream to interact with servers + /// + public class ServerDialog + { + // ------------------------------------------------- + // - PUBLIC MEMBERS - + // ------------------------------------------------- + + /// + /// Used for returns from the server + /// + public class Reply + { + /// + /// Default constructor - initializes all fields to default values + /// + public Reply() + { + m_code=-1; + m_text=""; + } + + /// + /// The code returned by the server + /// + public int Code + { + get {return m_code;} + set {m_code=value;} + } + + /// + /// The text returned by the server + /// + public string Text + { + get {return m_text;} + set {m_text=value;} + } + + private int m_code; + private string m_text; + + } + + /// + /// Default constructor - initializes all fields to default values + /// + public ServerDialog() + { + m_encode=new System.Text.ASCIIEncoding(); + m_code=new Regex("^[0-9][0-9][0-9]"); + m_code_end=new Regex("^[0-9][0-9][0-9][^-]"); + + } + + /// + /// Sends a command to the server and returns the reply + /// + public Reply Send(Stream str, string command) + { + Reply r=new Reply(); + + if (command!=null) + { + byte[] b=ToBytes(command); + + str.Write(b,0,b.Length); + } + + GetResult(str,r); + + return r; + } + + // ------------------------------------------------- + // - PRIVATE MEMBERS - + // ------------------------------------------------- + + private ASCIIEncoding m_encode; + private Regex m_code; + private Regex m_code_end; + + + + private byte[] ToBytes(string s) + { + return m_encode.GetBytes(s); + } + + private string GetLine(Stream str) + { + byte[] b=new byte[1]; + int c; + string r=""; + + while((c=str.ReadByte())!=-1) + { + b[0]=(byte)c; + r+=m_encode.GetString(b); + + if (c==10) + { + break; + } + } + + return r; + } + + private void GetResult(Stream str, Reply r) + { + string s; + string all=""; + bool first_line=true; + + do + { + s=GetLine(str); + + if (first_line) + { + if (m_code.IsMatch(s)) + { + r.Code=Convert.ToInt32(s.Substring(0,3)); + } + else + { + throw new NetException(NetException.Type.ALL_NoReplyCode); + } + + first_line=false; + } + + if (m_code.IsMatch(s)) + { + all+=s.Substring(4); + } + else + { + all+=s; + } + + } while (!m_code_end.IsMatch(s)); + + all=all.TrimEnd(null); + r.Text=all; + } + + } +} -- cgit v1.2.3