Exemplo n.º 1
0
 public void mozillaWithParameters()
 {
     var requestString = @"GET /sayhello/trajko?surname=trajkovski&birthplace=konopishte HTTP/1.1
                         Host: localhost:5050
                         User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
                         Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
                         Accept-Language: en-US,en;q=0.5
                         Accept-Encoding: gzip, deflate
                         Connection: keep-alive";
     var parser = new RequestParser(requestString);
     Assert.AreEqual(RequestKind.Action, parser.Kind);
     Assert.AreEqual("localhost:5050", parser.Host);
     Assert.AreEqual("GET", parser.Method);
     Assert.AreEqual("/sayhello/trajko", parser.PathString);
     Assert.AreEqual(null, parser.Extension);
     Assert.AreEqual(null, parser.FileName);
     var expected = new List<QueryParameter> { 
         new QueryParameter{ Name = "surname", Value = "trajkovski"},
         new QueryParameter{ Name = "birthplace", Value = "konopishte"}
     };
     for (int i = 0; i < expected.Count; i++)
     {
         Assert.AreEqual(expected[i], parser.QueryParameters[i]);
     }
     Assert.AreEqual("sayhello", parser.Action);
     Assert.AreEqual("trajko", parser.Parameter);
     Assert.AreEqual(5050, parser.Port);
     Assert.AreEqual("Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0", parser.UserAgent);
 }
        public ProcessResult Process(RequestParser parser)
        {
            var result = DataProvider.GetTableNames();

            //poor-man's json
            var json = string.Format("[\"{0}\"]", string.Join("\", \"", result));
            var byteResponse = Encoding.UTF8.GetBytes(json);

            return new ProcessResult
            {
                StatusCode = StatusCode.OK,
                Bytes = byteResponse,
                ContentType = "application/json"
            };
        }
Exemplo n.º 3
0
        private void HandleRequest(Socket clientSocket)
        {
            //Thread.Sleep(5000);
            //Console.WriteLine("Server request at {0}", DateTime.UtcNow);
            string        requestString = DecodeRequest(clientSocket);
            RequestParser parser        = new RequestParser(requestString);

            Console.WriteLine("Received request {0}", requestString);

            RequestProcessor processor = new RequestProcessor(parser);
            var result = processor.ProcessRequest();

            byte[] byteHeader = CreateHeader(result.StatusCode, result.Bytes.Length, result.ContentType);
            clientSocket.Send(byteHeader);
            clientSocket.Send(result.Bytes);
            clientSocket.Close();
        }
Exemplo n.º 4
0
        public ProcessResult Process(RequestParser parser)
        {
            var tableName = parser.Parameter;
            var tableNames = DataProvider.GetTableNames();
            if (!tableNames.Contains(tableName))
            {
                string badResponse = "<h1>Please don't do that. There is not a table named " + tableName + "</h1>";
                badResponse += "<p>There is a action listTables that lists all available tables</p>";
                var badByteResponse = Encoding.UTF8.GetBytes(badResponse);

                return new ProcessResult
                {
                    StatusCode = StatusCode.NotFound,
                    Bytes = badByteResponse,
                    ContentType = "text/html"
                };
            }

            var data = DataProvider.GetTableData(tableName);
            var columns = DataProvider.GetTableColumns(tableName);

            StringBuilder response = new StringBuilder();

            response.Append("[");
            foreach (var row in data)
            {
                response.Append("{");
                foreach (var column in columns)
                {
                    var name = column.Value;
                    var value = row[column.Key - 1];
                    response.AppendFormat("\"{0}\":\"{1}\",", name, value);
                }
                response.Append("},");
            }
            response.Append("]");
            var byteResponse = Encoding.UTF8.GetBytes(response.ToString());
            return new ProcessResult
            {
                StatusCode = StatusCode.OK,
                Bytes = byteResponse,
                ContentType = "application/json"
            };
        }
Exemplo n.º 5
0
 public void mozillaWithAction()
 {
     var requestString = @"GET /sayhello/trajko HTTP/1.1
                         Host: localhost:5050
                         User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
                         Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
                         Accept-Language: en-US,en;q=0.5
                         Accept-Encoding: gzip, deflate
                         Connection: keep-alive";
     var parser = new RequestParser(requestString);
     Assert.AreEqual(RequestKind.Action, parser.Kind);
     Assert.AreEqual("localhost:5050", parser.Host);
     Assert.AreEqual("GET", parser.Method);
     Assert.AreEqual("/sayhello/trajko", parser.PathString);
     Assert.AreEqual(null, parser.Extension);
     Assert.AreEqual(null, parser.FileName);
     Assert.AreEqual(null, parser.QueryParameters);
     Assert.AreEqual("sayhello", parser.Action);
     Assert.AreEqual("trajko", parser.Parameter);
     Assert.AreEqual(5050, parser.Port);
     Assert.AreEqual("Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0", parser.UserAgent);
 }
Exemplo n.º 6
0
        private void HandleTheRequest(Socket clientSocket)
        {
            //Thread.Sleep(5000);
            //Console.WriteLine("Server request at {0}", DateTime.UtcNow);
            string requestString = DecodeRequest(clientSocket);
            RequestParser parser = new RequestParser(requestString);

            Console.WriteLine("Received request {0}", requestString);

            byte[] byteResponse = new byte[0];
            string statusCode = "200";
            string contentType = "text/html";
            switch (parser.Kind)
            {
                case RequestKind.Action:
                    switch (parser.Action.ToLower())
                    {
                        case "sayhello":
                            {
                                string response = "<h1>Hello " + parser.Parameter + "</h1>";
                                byteResponse = Encoding.UTF8.GetBytes(response);
                                break;
                            }
                        default:
                            {
                                string response = "<h1>Unsupported action " + parser.Action + "</h1>";
                                byteResponse = Encoding.UTF8.GetBytes(response);
                                break;
                            }
                    } 
                    break;
                case RequestKind.File:
                    if (File.Exists(parser.FileName))
                    {
                        switch (parser.Extension)
                        {
                            case "ico":
                            {
                                byteResponse = File.ReadAllBytes(parser.FileName);
                                contentType = "image/ico";
                                break;
                            }
                            case "html":
                            {
                                byteResponse = File.ReadAllBytes(parser.FileName);
                                break;
                            }
                            default:
                            {
                                byteResponse = File.ReadAllBytes(parser.FileName);
                                contentType = "text/plain";
                                break;
                            }
                        }
                    }
                    else
                    {
                        statusCode = "404";
                    }
                    break;
                case RequestKind.Error:
                    statusCode = "501";
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }



            byte[] byteHeader = CreateHeader(statusCode, byteResponse.Length, contentType);
            clientSocket.Send(byteHeader);
            clientSocket.Send(byteResponse);
            clientSocket.Close();
        }
Exemplo n.º 7
0
 public RequestProcessor(RequestParser parser)
 {
     this.parser = parser;
 }
Exemplo n.º 8
0
 public RequestProcessor(RequestParser parser)
 {
     this.parser = parser;
 }