private void httpServer_OnPOSTRequest(HttpProcessor p, StreamReader inputData)
        {
            switch (p.http_url)
            {
                case "/settings":
                    {
                        string data = inputData.ReadToEnd();
                        var dataList = GetDataList(data);
                        var command = (from item in dataList where item.Key == "command" select item).SingleOrDefault().Value;

                        p.writeSuccess();
                        Settings.Default.Save();
                        p.outputStream.WriteLine("<html><body><h3>Balance Checker settings saved</h3>");
                        p.outputStream.WriteLine("<a href=/>main</a><p>");
                    }
                    break;
                case "/sipgsmsettings":
                    {
                        string data = inputData.ReadToEnd();
                        var dataList = GetDataList(data);
                        p.outputStream.WriteLine("<html><body><h3>Balance Checker settings saved</h3>");
                        p.outputStream.WriteLine("<a href=/>main</a><p>");
                    }
                    break;
                case "/conf":
                    Log.Write("Получение конфигурации с сервера");
                    string postData = inputData.ReadToEnd();
                    try
                    {
                        Log.Write("Запись конфигурации в файл");
                        File.WriteAllText(@"../Cfg/conf.xml", postData);
                    }
                    catch (Exception ex)
                    {
                        Log.Write("[Ошибка] :: " + ex.Message);
                    }
                    break;
                default:
                    break;
            }
        }
        private void UpdateSipGSMConfig(HttpProcessor p)
        {
            StopService(Settings.Default.SipGsmServiceName, 1000);

            Log.Write("Обновление списка модемов");
            modemList = null;
            modemList = Modem.GetList();
            int i = 1;

            Log.Write("Найдено модемов :: " + modemList.Count);
            p.outputStream.WriteLine(string.Format("<h5>Найдено модемов :: {0}</h5>", i));
            foreach (var item in modemList)
            {
                Log.Write(string.Format("{0} ::  {1}", i, item.IMEI));
                p.outputStream.WriteLine(string.Format("<h5>{0} ::  {1}</h5>", i, item.IMEI));
                i++;
            }

            DeleteConfigFiles(p);

            Thread.Sleep(5000);
            i = 1;
            foreach (UsbDevice item in modemList)
            {
                Log.Write("Чтение настроек сервера");

                using (var connection = PostgreSQL.Get())
                {

                    try
                    {
                        Log.Write("Открытие соединения");
                        connection.Open();
                        NpgsqlCommand dbcmd = connection.CreateCommand();
            #if DEBUG
                        string imei = "354183026627980";
            #else
                    string imei = item.IMEI;
            #endif
                        dbcmd.Parameters.AddWithValue("@imei", imei);

                        dbcmd.CommandText = @"
            SELECT
            id,
            port
            FROM " + "\"Getaways\"" +
            @"
            WHERE imei = @imei
            ";
                        Log.Write("Чтение данных с сервера");
                        NpgsqlDataReader reader = dbcmd.ExecuteReader();
                        if(reader.Read())
                        {
                            string id = reader[0].ToString();
                            string port = reader[1].ToString();
                            Log.Write(string.Format("Добавление конфигурации для {0} :: p:{1}, id:{2}", imei, port, id));
                            WriteConfigFile(imei, port, id);
                            p.outputStream.WriteLine(string.Format("<h5>Добавление конфигурации для {0} :: p:{1}, id:{2}<h5>", imei, port, id));
                        }
                    }
                    catch (NpgsqlException ex)
                    {
                        Log.Write(ex.Message);
                    }
                    finally
                    {
                        Log.Write("Закрытие соединения");
                        connection.Close();
                    }
                }
                i++;
            }
            StartService(Settings.Default.SipGsmServiceName, 1000);
        }
        private void httpServer_OnGETRequest(HttpProcessor p)
        {
            switch (p.http_url)
            {
                case "/":
                    {
                        p.outputStream.WriteLine(@"
            <html>
            <head>" +
            "\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n" +
            @"</head>
            <body>
            <h3>Balance Checker</h3>
            </body>
            </html>
            ");
                    }
                    break;
                case "/reconf":
                    {
                        p.writeSuccess();
                        p.outputStream.WriteLine(@"
            <html>
            <head>" +
            "\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n" +
            @"</head>
            <body>
            <h4>Добавлены конфигурации для IMEI :</h4>
            ");
                        UpdateSipGSMConfig(p);
                        p.outputStream.WriteLine(@"
            <h4>Конфигурация обновлена!</h4>
            </body>
            </html>
            ");
                    }
                    break;
                case "/settings":
                    {
                        p.Show("html/settings.html");
                    }
                    break;
                case "/sipgsmsettings":
                    {
                        p.Show("html/sipgsmsettings.html");
                    }
                    break;
                case "/onoff":
                    {
                        OnOff();
                        var result = CheckSipGsm();
                        string htmlText = string.Format(Settings.Default.SipGsmStatusHtml, "Stopped" == result ? "#CC3300" : "#006600", result);
                        p.writeSuccess();
                        p.outputStream.WriteLine(htmlText);

                    }
                    break;
                case "/checksipgsm":
                    {
                        var result = CheckSipGsm();
                        string htmlText = string.Format(Settings.Default.SipGsmStatusHtml, ("Stopped" == result ? "#CC3300" : "#006600"), result);
                        p.writeSuccess();
                        p.outputStream.WriteLine(htmlText);
                    }
                    break;
                case "/check":
                    p.writeSuccess();
                    p.outputStream.WriteLine(@"
            <html>
            <head>" +
            "\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n" +
            @"<title>Checking Balance</title>
            </head>
            <body>
            <h3>Processing...</h3>
            ");
                    StartCheckBalance();
                    p.outputStream.WriteLine(@"
            </body>
            </html>
            ");
                    break;
                case "/favicon.ico" :
                    Stream fs = File.Open("html/favicon.ico", FileMode.Open);
                    p.writeSuccess("image/x-icon");
                    fs.CopyTo (p.outputStream.BaseStream);
                    p.outputStream.BaseStream.Flush ();
                    break;
                default:
                    p.writeSuccess();
                    p.outputStream.WriteLine("<html><body><h5>Command \"" + p.http_url + "\" not founded</h5>");
                    break;
            }
        }
        private void DeleteConfigFiles(HttpProcessor p)
        {
            Log.Write("Удаление старых файлов конфигурации");
            int i = 0;
            if (Directory.Exists(SipGSMPath))
            {
                foreach (string path in Directory.GetFiles(SipGSMPath))
                {
                    try
                    {
                        File.Delete(path);
                        i++;
                    }
                    catch (Exception e)
                    {
                        p.outputStream.WriteLine(string.Format("<h5>{0} ::  {1}</h5>", "Ошибка", e.Message));
                    }

                }
            }
            Log.Write(string.Format("Удалено файлов :: {0} ", i));
        }
 public void listen()
 {
     listener = new TcpListener(IPAddress.Any, port);
     listener.Start();
     if (null != OnHTTPServerStarted)
     {
         OnHTTPServerStarted.Invoke(listener);
     }
     while (is_active)
     {
         TcpClient s = listener.AcceptTcpClient();
         HttpProcessor processor = new HttpProcessor(s, this);
         Thread thread = new Thread(new ThreadStart(processor.process));
         thread.Start();
         Thread.Sleep(1);
     }
 }
 public virtual void handlePOSTRequest(HttpProcessor p, StreamReader inputData)
 {
     if (null != OnPOSTRequest)
     {
         OnPOSTRequest.Invoke(p, inputData);
     }
 }
 public virtual void handleGETRequest(HttpProcessor p)
 {
     if (null != OnGETRequest)
     {
         OnGETRequest.Invoke(p);
     }
 }