Exemplo n.º 1
0
        public void Write(WebServerEventArgs e)
        {
            try
            {
                var rawUrl = e.Context.Request.RawUrl.TrimStart('/');
                var args   = rawUrl.Split('/');
                if (args.Length < 3)
                {
                    WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                    return;
                }

                var pinNumber = Convert.ToInt32(args[1]);
                if (!_controller.IsPinOpen(pinNumber))
                {
                    WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                    return;
                }

                if ((args[2].ToLower() == "high") || (args[2] == "1"))
                {
                    _controller.Write(pinNumber, PinValue.High);
                }
                else if ((args[2].ToLower() == "low") || (args[2] == "0"))
                {
                    _controller.Write(pinNumber, PinValue.Low);
                }

                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK);
            }
            catch (Exception)
            {
                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
            }
        }
Exemplo n.º 2
0
        public void RoutePostTest(WebServerEventArgs e)
        {
            string route = $"The route asked is {e.Context.Request.RawUrl.TrimStart('/').Split('/')[0]}";

            e.Context.Response.ContentType = "text/plain";
            WebServer.OutPutStream(e.Context.Response, route);
        }
Exemplo n.º 3
0
        public void Close(WebServerEventArgs e)
        {
            try
            {
                var rawUrl = e.Context.Request.RawUrl.TrimStart('/');
                var args   = rawUrl.Split('/');
                if (args.Length < 2)
                {
                    WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                    return;
                }

                var pinNumber = Convert.ToInt32(args[1]);

                if (_controller.IsPinOpen(pinNumber))
                {
                    _controller.ClosePin(pinNumber);
                }

                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK);
            }
            catch (Exception)
            {
                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
            }
        }
Exemplo n.º 4
0
        public void Read(WebServerEventArgs e)
        {
            try
            {
                var rawUrl = e.Context.Request.RawUrl.TrimStart('/');
                var args   = rawUrl.Split('/');
                if (args.Length < 2)
                {
                    WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                    return;
                }

                var pinNumber = Convert.ToInt32(args[1]);
                if (!_controller.IsPinOpen(pinNumber))
                {
                    WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                    return;
                }

                var result = _controller.Read(pinNumber);
                e.Context.Response.ContentType = "text/plain";
                WebServer.OutPutStream(e.Context.Response, result.ToString());
            }
            catch (Exception)
            {
                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
            }
        }
Exemplo n.º 5
0
        public void AddPost(WebServerEventArgs e)
        {
            // Get the param from the body
            byte[] buff = new byte[e.Context.Request.ContentLength64];
            e.Context.Request.InputStream.Read(buff, 0, buff.Length);
            string rawData = new string(Encoding.UTF8.GetChars(buff));

            rawData = $"?{rawData}";
            AddPerson(e.Context.Response, rawData);
        }
Exemplo n.º 6
0
 public void HelloWorld(WebServerEventArgs e)
 {
     Debug.WriteLine("Hello World!");
     try
     {
         WebServer.OutPutStream(e.Context.Response, "Hello World!");
     }
     catch (Exception)
     {
         WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
     }
 }
Exemplo n.º 7
0
        private static void ApiDefault(WebServerEventArgs e)
        {
            string ret = $"HTTP/1.1 200 OK\r\nContent-Type: text/plain; charset=UTF-8\r\nCache-Control: no-cache\r\nConnection: close\r\n\r\n";

            ret += $"Your request type is: {e.Context.Request.HttpMethod}\r\n";
            ret += $"The request URL is: {e.Context.Request.RawUrl}\r\n";
            var parameters = WebServer.DecodeParam(e.Context.Request.RawUrl);

            if (parameters != null)
            {
                ret += "List of url parameters:\r\n";
                foreach (var param in parameters)
                {
                    ret += $"  Parameter name: {param.Name}, value: {param.Value}\r\n";
                }
            }

            if (e.Context.Request.Headers != null)
            {
                ret += $"Number of headers: {e.Context.Request.Headers.Count}\r\n";
            }
            else
            {
                ret += "There is no header in this request\r\n";
            }

            foreach (var head in e.Context.Request.Headers?.AllKeys)
            {
                ret += $"  Header name: {head}, Values:";
                var vals = e.Context.Request.Headers.GetValues(head);
                foreach (var val in vals)
                {
                    ret += $"{val} ";
                }

                ret += "\r\n";
            }

            if (e.Context.Request.ContentLength64 > 0)
            {
                ret += $"Size of content: {e.Context.Request.ContentLength64}\r\n";
                byte[] buff = new byte[e.Context.Request.ContentLength64];
                e.Context.Request.InputStream.Read(buff, 0, buff.Length);
                ret += $"Hex string representation:\r\n";
                for (int i = 0; i < buff.Length; i++)
                {
                    ret += buff[i].ToString("X") + " ";
                }
            }

            WebServer.OutPutStream(e.Context.Response, ret);
        }
Exemplo n.º 8
0
        private static void ParamHtml(WebServerEventArgs e)
        {
            var url = e.Context.Request.RawUrl;
            // Test with parameters
            var    parameters = WebServer.DecodeParam(url);
            string toOutput   = "<html><head>" +
                                "<title>Hi from nanoFramework Server</title></head><body>Here are the parameters of this URL: <br />";

            foreach (var par in parameters)
            {
                toOutput += $"Parameter name: {par.Name}, Value: {par.Value}<br />";
            }
            toOutput += "</body></html>";
            WebServer.OutPutStream(e.Context.Response, toOutput);
        }
Exemplo n.º 9
0
        public void UrlEncode(WebServerEventArgs e)
        {
            var    rawUrl    = e.Context.Request.RawUrl;
            var    paramsUrl = WebServer.DecodeParam(rawUrl);
            string ret       = "Parameters | Encoded | Decoded";

            foreach (var param in paramsUrl)
            {
                ret += $"{param.Name} | ";
                ret += $"{param.Value} | ";
                // Need to wait for latest version of System.Net
                // See https://github.com/nanoframework/lib-nanoFramework.System.Net.Http/blob/develop/nanoFramework.System.Net.Http/Http/System.Net.HttpUtility.cs
                ret += $"{System.Web.HttpUtility.UrlDecode(param.Value)}";
                ret += "\r\n";
            }
            WebServer.OutPutStream(e.Context.Response, ret);
        }
Exemplo n.º 10
0
        public void Get(WebServerEventArgs e)
        {
            var ret = "[";

            lock (_lock)
            {
                foreach (var person in _persons)
                {
                    var per = (Person)person;
                    ret += $"{{\"First\"=\"{per.First}\",\"Last\"=\"{per.Last}\"}},";
                }
            }
            if (ret.Length > 1)
            {
                ret = ret.Substring(0, ret.Length - 1);
            }
            ret += "]";
            e.Context.Response.ContentType     = "text/html";
            e.Context.Response.ContentLength64 = ret.Length;
            WebServer.OutPutStream(e.Context.Response, ret);
        }
Exemplo n.º 11
0
        public void Open(WebServerEventArgs e)
        {
            try
            {
                var rawUrl = e.Context.Request.RawUrl.TrimStart('/');
                var args   = rawUrl.Split('/');
                if (args.Length < 3)
                {
                    WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                    return;
                }

                var pinNumber = Convert.ToInt32(args[1]);

                if (!_controller.IsPinOpen(pinNumber))
                {
                    _controller.OpenPin(pinNumber);
                }

                if (args[2].ToLower() == "output")
                {
                    _controller.SetPinMode(pinNumber, PinMode.Output);
                }
                else if (args[2].ToLower() == "input")
                {
                    _controller.SetPinMode(pinNumber, PinMode.Input);
                }
                else
                {
                    WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                    return;
                }

                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK);
            }
            catch (Exception)
            {
                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
            }
        }
Exemplo n.º 12
0
 public void RouteAnyTest(WebServerEventArgs e)
 {
     WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK);
 }
Exemplo n.º 13
0
 public void AddGet(WebServerEventArgs e)
 {
     AddPerson(e.Context.Response, e.Context.Request.RawUrl);
 }
Exemplo n.º 14
0
        private static void ServerCommandReceived(object source, WebServerEventArgs e)
        {
            try
            {
                var url = e.Context.Request.RawUrl;
                Debug.WriteLine($"Command received: {url}, Method: {e.Context.Request.HttpMethod}");

                if (url.ToLower() == "/sayhello")
                {
                    // This is simple raw text returned
                    WebServer.OutPutStream(e.Context.Response, "It's working, url is empty, this is just raw text, /sayhello is just returning a raw text");
                }
                else if (url.Length <= 1)
                {
                    // Here you can return a real html page for example

                    WebServer.OutPutStream(e.Context.Response, "<html><head>" +
                                           "<title>Hi from nanoFramework Server</title></head><body>You want me to say hello in a real HTML page!<br/><a href='/useinternal'>Generate an internal text.txt file</a><br />" +
                                           "<a href='/Text.txt'>Download the Text.txt file</a><br>" +
                                           "Try this url with parameters: <a href='/param.htm?param1=42&second=24&NAme=Ellerbach'>/param.htm?param1=42&second=24&NAme=Ellerbach</a></body></html>");
                }
#if HAS_STORAGE
                else if (url.ToLower() == "/useinternal")
                {
                    // This tells the web server to use the internal storage and create a simple text file
                    _storage = KnownFolders.InternalDevices.GetFolders()[0];
                    var testFile = _storage.CreateFile("text.txt", CreationCollisionOption.ReplaceExisting);
                    FileIO.WriteText(testFile, "This is an example of file\r\nAnd this is the second line");
                    WebServer.OutPutStream(e.Context.Response, "Created a test file text.txt on internal storage");
                }
#endif
                else if (url.ToLower().IndexOf("/param.htm") == 0)
                {
                    ParamHtml(e);
                }
                else if (url.ToLower().IndexOf("/api/") == 0)
                {
                    // Check the routes and dispatch
                    var routes = url.TrimStart('/').Split('/');
                    if (routes.Length > 3)
                    {
                        // Check the security key
                        if (!CheckAPiKey(e.Context.Request.Headers))
                        {
                            WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.Forbidden);
                            return;
                        }

                        var pinNumber = Convert.ToInt16(routes[2]);

                        // Do we have gpio ?
                        if (routes[1].ToLower() == "gpio")
                        {
                            if ((routes[3].ToLower() == "high") || (routes[3].ToLower() == "1"))
                            {
                                _controller.Write(pinNumber, PinValue.High);
                            }
                            else if ((routes[3].ToLower() == "low") || (routes[3].ToLower() == "0"))
                            {
                                _controller.Write(pinNumber, PinValue.Low);
                            }
                            else
                            {
                                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                                return;
                            }

                            WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK);
                            return;
                        }
                        else if (routes[1].ToLower() == "open")
                        {
                            if (routes[3].ToLower() == "input")
                            {
                                if (!_controller.IsPinOpen(pinNumber))
                                {
                                    _controller.OpenPin(pinNumber);
                                }

                                _controller.SetPinMode(pinNumber, PinMode.Input);
                            }
                            else if (routes[3].ToLower() == "output")
                            {
                                if (!_controller.IsPinOpen(pinNumber))
                                {
                                    _controller.OpenPin(pinNumber);
                                }

                                _controller.SetPinMode(pinNumber, PinMode.Output);
                            }
                            else
                            {
                                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                                return;
                            }
                        }
                        else if (routes[1].ToLower() == "close")
                        {
                            if (_controller.IsPinOpen(pinNumber))
                            {
                                _controller.ClosePin(pinNumber);
                            }
                        }
                        else
                        {
                            WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                            return;
                        }

                        WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK);
                        return;
                    }
                    else if (routes.Length == 2)
                    {
                        if (routes[1].ToLower() == "apikey")
                        {
                            // Check the security key
                            if (!CheckAPiKey(e.Context.Request.Headers))
                            {
                                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.Forbidden);
                                return;
                            }

                            if (e.Context.Request.HttpMethod != "POST")
                            {
                                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                                return;
                            }

                            // Get the param from the body
                            if (e.Context.Request.ContentLength64 == 0)
                            {
                                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                                return;
                            }

                            byte[] buff = new byte[e.Context.Request.ContentLength64];
                            e.Context.Request.InputStream.Read(buff, 0, buff.Length);
                            string rawData    = new string(Encoding.UTF8.GetChars(buff));
                            var    parameters = rawData.Split('=');
                            if (parameters.Length < 2)
                            {
                                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                                return;
                            }

                            if (parameters[0].ToLower() == "newkey")
                            {
                                _securityKey = parameters[1];
                                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK);
                                return;
                            }

                            WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
                            return;
                        }
                    }
                    else
                    {
                        ApiDefault(e);
                    }
                }
                else if (url.ToLower().IndexOf("/favicon.ico") == 0)
                {
                    WebServer.SendFileOverHTTP(e.Context.Response, "favicon.ico", Resources.GetBytes(Resources.BinaryResources.favicon));
                }
#if HAS_STORAGE
                else
                {
                    // Very simple example serving a static file on an SD card
                    var files = _storage.GetFiles();
                    foreach (var file in files)
                    {
                        if (file.Name == url)
                        {
                            WebServer.SendFileOverHTTP(e.Context.Response, file);
                            return;
                        }
                    }

                    WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.NotFound);
                }
#endif
            }
            catch (Exception)
            {
                WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.InternalServerError);
            }
        }
Exemplo n.º 15
0
 public void DefaultApi(WebServerEventArgs e)
 {
     WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK);
 }
Exemplo n.º 16
0
 public void Special(WebServerEventArgs e)
 {
     WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK);
 }