Ejemplo n.º 1
0
        public static void StartServer()
        {
            string logfilepath, xmlfilepath, logfolder;

            using (XmlReader reader = new XmlTextReader("Server_config.xml"))
            {
                reader.MoveToContent();
                port = Int32.Parse(reader.GetAttribute("port"));

                //read log settings
                logfolder   = Environment.ExpandEnvironmentVariables(reader.GetAttribute("logfolder"));
                logfilepath = Path.Combine(logfolder, reader.GetAttribute("logfile"));     //log file path
                xmlfilepath = Path.Combine(logfolder, reader.GetAttribute("xml_logfile")); //xml log file path
                log4net.GlobalContext.Properties["LogFileName"] = logfilepath;
                log4net.GlobalContext.Properties["XMLFileName"] = xmlfilepath;
                certfile = reader.GetAttribute("cert");
            }

            serverCertificate = new X509Certificate2(certfile, ServerConfiguration.DEFAULT_PASSCODE, X509KeyStorageFlags.MachineKeySet);
            MsgUtil.StartLogger();
            log.Info("port = " + port);
            log.InfoFormat("logfile: {0}", logfilepath);
            log.InfoFormat("xmlfile: {0}", xmlfilepath);

            SslStream sslStream = null;

            serverSocket = new TcpListener(IPAddress.Any, port);
            TcpClient clientSocket = default(TcpClient);
            int       counter      = 0;

            WindowsScraper.WindowsScraper scraper = null;

#if !DEBUG
            Random rnd      = new Random();
            string passcode = rnd.Next(1, 999999).ToString();
#else
            string passcode = ServerConfiguration.DEFAULT_PASSCODE;
#endif

            serverSocket.Start();
            log.Info("Sinter Scrapper Started");
            log.InfoFormat("Passcode = {0}", passcode);
            Console.WriteLine("\nLet the Sinter proxy client know this passcode : {0}", passcode);

            try
            {
                while (true)
                {
                    counter     += 1;
                    clientSocket = serverSocket.AcceptTcpClient();
                    sslStream    = ProcessClient(clientSocket);
                    if (sslStream == null)
                    {
                        log.Info("Client No:" + counter + " rejected!");
                        clientSocket.Close();
                    }
                    else
                    {
                        log.Info("Client No:" + counter + " connected!");
                        if (scraper == null)
                        {
                            scraper = new WindowsScraper.WindowsScraper(passcode);
                        }
                        else
                        {
                            scraper.execute_stop_scraping(); //restart scraper
                        }

                        ClientHandler client = new ClientHandler(scraper, clientSocket, "" + counter, sslStream);
                        clients.Add(client);
                    }
                }
            }
            catch (SocketException e)
            {
                log.Error("SocketException: {0}", e);
            }
            catch (ArgumentException e)
            {
                log.Error("ArgumentException: {0}", e);
            }
        }