/// <summary>
            /// Processes incoming requests 
            /// </summary>
            protected void ProcessRequest()
            {
                // accept an incoming connection request and once we have one, spawn a new thread to accept more
                bool newThread = false;
                System.Net.Sockets.Socket clientSocket = null;
                Responder responder = null;
                while (IsRunning && !newThread)
                {
                    try
                    {
                        // process incoming request
                        clientSocket = LocalServer.Accept();
                        clientSocket.ReceiveTimeout = Timeout;
                        clientSocket.SendTimeout = Timeout;

                        // parse message an create an object containing parsed data 
                        responder = new Responder();
                        responder.ClientEndpoint = clientSocket.RemoteEndPoint.ToString();
                        responder.ClientSocket = clientSocket;

                        Debug.Print("Accepted connection from " + responder.ClientEndpoint);

                        Thread t = new Thread(new ThreadStart(ProcessRequest));
                        t.Start();
                        newThread = true;
                    }
                    catch
                    {
                        if (clientSocket != null)
                        {
                            try
                            {
                                clientSocket.Close();
                            }
                            catch { }
                        }
                    }
                }

                // now process the request
                try
                {
                    bool finishedParsing = false;

                    TimeSpan parseStart = Gadgeteer.Timer.GetMachineTime();

                    while (!finishedParsing)
                    {
                        if (Gadgeteer.Timer.GetMachineTime() - parseStart > MaxProcessingTime) return;
                        if (clientSocket == null) return;
                        // receiving data, add to an array to process later 
                        byte[] buffer = new byte[clientSocket.Available];
                        clientSocket.Receive(buffer);

                        finishedParsing = responder.parse(buffer);
                    }

                    // trigger event to get response
                    WebEvent webevent = null;

                    if (responder.Path != null && responder.Path.Length > 1)
                    {
                        webevent = serverManager.GetWebEventById(responder.Path);
                    }

                    if (webevent == null)
                    {
                        webevent = serverManager.DefaultEvent;
                    }

                    responder.webEvent = webevent;

                    webevent.OnWebEventReceived(responder.Path, responder.HttpMethod, responder);
                }
                catch
                {

                }
            }
Ejemplo n.º 2
0
        /// <summary>
        /// Raises the <see cref="WebEventReceived"/> event.
        /// </summary>
        /// <param name="responder">Contains request data sent by the the client and functionality to respond to the request.</param>
        /// <param name="method">The incoming http method. </param>
        /// <param name="path">The path of the requested resource.</param>
        internal virtual void OnWebEventReceived(string path, WebServer.HttpMethod method, Responder responder)
        {
            if (onWebEventReceived == null)
            {
                onWebEventReceived = new ReceivedWebEventHandler(OnWebEventReceived);
            }

            if (_WebEventReceived == null || noHandlerSet)
            {
                responder.SendResponse();
            }
            else if (Program.CheckAndInvoke(_WebEventReceived, onWebEventReceived, path, method, responder))
            {
                _WebEventReceived(path, method, responder);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Raises the <see cref="WebEventReceived"/> event.
        /// </summary>
        /// <param name="responder">Contains request data sent by the the client and functionality to respond to the request.</param>
        /// <param name="method">The incoming http method. </param>
        /// <param name="path">The path of the requested resource.</param>
        internal virtual void OnWebEventReceived(string path, WebServer.HttpMethod method, Responder responder)
        {
            if (onWebEventReceived == null) onWebEventReceived = new ReceivedWebEventHandler(OnWebEventReceived);

            if (_WebEventReceived == null || noHandlerSet)
            {
                responder.SendResponse();
            }
            else if (Program.CheckAndInvoke(_WebEventReceived, onWebEventReceived, path, method, responder))
            {
                _WebEventReceived(path, method, responder);
            }
        }
Ejemplo n.º 4
0
            /// <summary>
            /// Processes incoming requests
            /// </summary>
            protected void ProcessRequest()
            {
                // accept an incoming connection request and once we have one, spawn a new thread to accept more
                bool newThread = false;

                System.Net.Sockets.Socket clientSocket = null;
                Responder responder = null;

                while (IsRunning && !newThread)
                {
                    try
                    {
                        // process incoming request
                        clientSocket = LocalServer.Accept();
                        clientSocket.ReceiveTimeout = Timeout;
                        clientSocket.SendTimeout    = Timeout;

                        // parse message an create an object containing parsed data
                        responder = new Responder();
                        responder.ClientEndpoint = clientSocket.RemoteEndPoint.ToString();
                        responder.ClientSocket   = clientSocket;

                        Debug.Print("Accepted connection from " + responder.ClientEndpoint);

                        Thread t = new Thread(new ThreadStart(ProcessRequest));
                        t.Start();
                        newThread = true;
                    }
                    catch
                    {
                        if (clientSocket != null)
                        {
                            try
                            {
                                clientSocket.Close();
                            }
                            catch { }
                        }
                    }
                }

                // now process the request
                try
                {
                    bool finishedParsing = false;

                    TimeSpan parseStart = Gadgeteer.Timer.GetMachineTime();

                    while (!finishedParsing)
                    {
                        if (Gadgeteer.Timer.GetMachineTime() - parseStart > MaxProcessingTime)
                        {
                            return;
                        }
                        if (clientSocket == null)
                        {
                            return;
                        }
                        // receiving data, add to an array to process later
                        byte[] buffer = new byte[clientSocket.Available];
                        clientSocket.Receive(buffer);

                        finishedParsing = responder.parse(buffer);
                    }

                    // trigger event to get response
                    WebEvent webevent = null;

                    if (responder.Path != null && responder.Path.Length > 1)
                    {
                        webevent = serverManager.GetWebEventById(responder.Path);
                    }

                    if (webevent == null)
                    {
                        webevent = serverManager.DefaultEvent;
                    }

                    responder.webEvent = webevent;

                    webevent.OnWebEventReceived(responder.Path, responder.HttpMethod, responder);
                }
                catch
                {
                }
            }
 // secure reception of wifi credentials over wifi network - secured by receiving secret 
 void CredentialsWebEventReceived(string path, WebServer.HttpMethod method, Responder responder)
 {
     if (responder.UrlParameters == null || !responder.UrlParameters.Contains("ssid") || !responder.UrlParameters.Contains("setupauthcode"))
     {
         responder.Respond("ERROR::Syntax: " + path + "?ssid=SSID&setupauthcode=SETUPAUTHCODE[&key=WIFIKEY]");
         return;
     }
     if (((string)responder.UrlParameters["setupauthcode"]) != SetupAuthCode)
     {
         responder.Respond("ERROR::Incorrect setupauthcode");
         return;
     }
     var ssid = responder.UrlParameters["ssid"] as string;
     if (ssid == null || ssid == "")
     {
         responder.Respond("ERROR::Invalid SSID");
         return;
     }
     var key = "";
     if (responder.UrlParameters.Contains("key"))
     {
         key = responder.UrlParameters["key"] as string;
     }
     Debug.Print("Received (via web event) credentials for network " + ssid);
     bool newcreds = ReceivedCredentials(ssid, key);
     if (newcreds)
     {
         responder.Respond("OK::Got new credentials");
         SaveData();
         Thread.Sleep(10);
         WebServer.StopLocalServer();
         currentAP = null;
         SetLed();
         SetScreen();
         wifi.Interface.Disconnect();
     }
     else
     {
         responder.Respond("OK::Already had those");
     }
 }