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); } }
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); }
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); } }
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); } }
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); }
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); } }
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); }
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); }
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); }
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); }
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); } }
public void RouteAnyTest(WebServerEventArgs e) { WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK); }
public void AddGet(WebServerEventArgs e) { AddPerson(e.Context.Response, e.Context.Request.RawUrl); }
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); } }
public void DefaultApi(WebServerEventArgs e) { WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK); }
public void Special(WebServerEventArgs e) { WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK); }