View Single Post
Old Dec 1st, 2005, 2:04 PM   #5
lucifer
Programmer
 
lucifer's Avatar
 
Join Date: Oct 2005
Posts: 84
Rep Power: 3 lucifer is on a distinguished road
code update and new problem

i have almost created the basic part of the server
the updated code is as follows
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;

    class Program
    {
    static int BUFSIZE= 8096;
       

    enum msg
    {
    ERROR =42,
    SORRY =43,
    LOG = 44,
        }

       static void log(msg type,string s1,string s2) //used for logging of errors
    {
        string logfile = "http.log";
         string logbuffer;
         FileStream file = new FileStream(logfile, FileMode.Append);
         StreamWriter sw = new StreamWriter(file);
         switch (type)
         {
             case msg.ERROR: logbuffer = "Error: " + s1 +" "+ s2 + " exiting ";
                 sw.WriteLine(logbuffer);
                 sw.WriteLine();
                 sw.Close();
                 break;
             case msg.SORRY: logbuffer = "sorry: " + s1 + " " + s2 + " ";
                 sw.WriteLine(logbuffer);
                 //add funtion to send data to user;
                 sw.WriteLine();
                 sw.Close();
                 break;
             case msg.LOG: logbuffer = "info: " + s1 + " " + s1 + " ";
                 sw.WriteLine(logbuffer);
                 sw.WriteLine();
                 sw.Close();
                 break;
         }
         if (type == msg.ERROR || type == msg.SORRY)
         {
             System.Environment.Exit(0);
         }

         
        
    }
        	public static extn[] fileextsused( )
		{
			extn []extentions =new extn[10];
			extentions[1].ext= "gif"; 
			extentions[1].filetype="image/gif" ;
			extentions[2].ext="jpg";
			extentions[2].filetype="image/jpeg";
			extentions[3].ext="png";
			extentions[3].filetype= "image/png";
			extentions[4].ext="zip";
			extentions[4].filetype="image/zip";
			extentions[5].ext="gz";
			extentions[5].filetype= "image/gz";
			extentions[6].ext="tar";
			extentions[6].filetype= "image/tar";
			extentions[7].ext="htm";
			extentions[7].filetype="text/html";
			extentions[8].ext="html";
			extentions[8].filetype="text/html";
			extentions[9].ext="0";
			extentions[9].filetype="0";
			return extentions;
		
		}
        	public	struct extn
	{
		public String ext;
		public string filetype;
	}
        public static void web(Socket suck ) //used for sending data to the                                                     //client
        {
            Encoding enc = Encoding.Unicode;
            byte [] rbuffer =new byte[BUFSIZE+1];//recieve buffer 
            byte [] sbuffer =new byte[BUFSIZE+1];//data to be send
            byte[] header = enc.GetBytes("HTTP/1.0 200 OK\r\nContent-Type: %s\r\n\r\n");//http header
            string  str="<HTML><BODY><H1>nweb Web Server Sorry:</H1></BODY></HTML>\r\n";//actual page
          
          sbuffer = enc.GetBytes(str);
          suck.Receive(rbuffer);
          suck.Send(header);
          suck.Send(sbuffer);

          
            
        }

        static void Main(string[] args)
        {
            DirectoryInfo dir;
            
            args = new string[2];
            args[0] = "80";
            args[1] = @"c:\a";
            int port;
            port = Convert.ToInt32(args[0]);
            dir = new DirectoryInfo(args[1]);
            

            
            int i=0;
            extn []extentions =new extn[10];
			extentions=fileextsused();
            if (args.Length <2 || args.Length >2 || args[0] == "/?") 
            {
                Console.WriteLine("hint: nweb Port-Number Top-Directory\n\n"+
        "\tnweb is a small and very safe mini web server\n"+
        "\tnweb only servers out file/web pages with extensions named below\n"+
        "\t and only from the named directory or its sub-directories.\n"+
        "\tThere is no fancy features = safe and secure.\n\n"+
        "\tExample: nweb 8181\n c:\\web &\n\n"+
        "\tOnly Supports:");
                for(i=0;i<extentions.Length;i++)
                {
                    Console.WriteLine("\t"+extentions[i].ext+"\t"+extentions[i].filetype+"");
                }

                Console.WriteLine("\n\tNot Supported: URLs including \"..\",Java, Javascript, CGI\n"+
                    "\tNot Supported: directories \n\tc:\\ " + "\n\t" 
                    + Environment.GetFolderPath(Environment.SpecialFolder.System)+"\n\t"
                    +Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\n\t" 
                    + Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\n\t" 
                    + Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles)+"\n"
                    +"\tNo warranty given or implied\n\tUmesh Tangnu umeshktangnu@gmail.com\n");
                Console.ReadLine();
                System.Environment.Exit(0);
            }
                 
            else
            {
                if ((args[1] == Environment.GetFolderPath(Environment.SpecialFolder.System)) || (args[1] == Environment.GetFolderPath(Environment.SpecialFolder.Personal)) || (args[1] == Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)))
                {
                    Console.WriteLine("ERROR: Bad top directory "+ args[1]+" see nweb /?\n");
                    Console.ReadLine();
                    System.Environment.Exit(0);
                }
                if(!dir.Exists)
                {
                    Console.WriteLine("ERROR : Top Directory "+args[1]+"  doesnot exist");
                    Console.Read();
                    System.Environment.Exit(0);
                }
                
            }
            if (port < 0 || port > 60000)
                log(msg.ERROR, "Invalid port number (try 1->60000)", args[0]);
            log(msg.LOG, "nweb starting", args[0]);
            
            IPAddress iadd =IPAddress.Parse("192.168.1.2");
            IPEndPoint ipe = new IPEndPoint(iadd, port);
            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sock.Bind(ipe);
            sock.Listen(32);
            sock = sock.Accept();
            web(sock);
            sock.Shutdown(SocketShutdown.Both);
            sock.Close();                  
        }
    }

u can compile the code then use ur browser if it is IE then the it shows the page but the http header is also shown
HTTP/1.0 200 OK Content-Type: text/html
nweb Web Server Sorry:
but if the browser is mozilla/Firefox it shows the recieved data as an application and tells me to save it.
__________________
"You're good... but me, I'm magic"
lucifer is offline   Reply With Quote