Esempio n. 1
0
        private void startApplication()
        {
            logger = Logger.getInstance();
            logger.initialize(m_debug);
            logger.info("");
            logger.info("===============================");
            logger.info("*** Starting up WinTunnel ****");
            logger.info("===============================");

            logger.info("Starting thread... ");

            //create a signal handler to detect Ctrl-C to stop the service
            if (m_debug)
            {
                m_ctrl = new ConsoleCtrl();
                m_ctrl.ControlEvent += new ConsoleCtrl.ControlEventHandler(consoleEventHandler);
            }

            //Load configuration and startup
            m_config = new AppConfig();
            if (!m_config.initialize())
            {
                logger.error("Error loading configuration file.  Exiting...");
                return;
            }

            //Initialize the threadpool
            ThreadPool pool = ThreadPool.getInstance();

            pool.initialize(3);             //start pool with 3 threads

            m_connMgr = ConnectionManager.getInstance();

            foreach (ProxyConfig cfg in m_config.m_proxyConfigs)
            {
                ProxyClientListenerTask task = new ProxyClientListenerTask(cfg);
                pool.addTask(task);
            }

            shutdownEvent.WaitOne();             //now just wait for signal to exit
            logger.info("Thread is initiating shutdown... ");

            if (m_ctrl != null)
            {
                logger.info("Releasing Console Event handler. ");
                m_ctrl = null;
            }

            //Shutdown the connection manager
            m_connMgr.shutdown();
            logger.info("Connection Manager has been terminated. ");

            //Shutdown the thread pool
            pool.Stop();
            logger.info("ThreadPool has been stopped. ");

            logger.info("Terminating thread... ");
            logger.info("*** WinTunnel exited. ****");
            logger.close();
        }
Esempio n. 2
0
        //Call back when the socket has connected
        public static void acceptCallBack(IAsyncResult ar)
        {
            ProxyConnection conn = null;

            try
            {
                ProxyClientListenerTask listener = (ProxyClientListenerTask)ar.AsyncState;

                //create a new task for connecting to the server side.
                conn              = m_mgr.getConnection();
                conn.serviceName  = listener.m_config.serviceName;
                conn.clientSocket = listener.listenSocket.EndAccept(ar);                 //accept the client connection

                logger.info("[{0}] Conn#{1} Accepted new connection. Local: {2}, Remote: {3}.",
                            conn.serviceName,
                            conn.connNumber,
                            conn.clientSocket.LocalEndPoint.ToString(),
                            conn.clientSocket.RemoteEndPoint.ToString());

                conn.serverEP = listener.m_config.serverEP;

                //Start listening for connection on this port again
                listener.listenSocket.BeginAccept(new AsyncCallback(ProxyClientListenerTask.acceptCallBack), listener);

                ProxyServerConnectTask serverTask = new ProxyServerConnectTask(conn);                 //now try to connect to the server
                ThreadPool.getInstance().addTask(serverTask);
            }
            catch (SocketException se)
            {
                logger.error("[{0}] Conn# {1} Socket Error occurred when accepting client socket. Error Code is: {2}",
                             conn.serviceName, conn.connNumber, se.ErrorCode);
                if (conn != null)
                {
                    conn.Release();
                }
            }
            catch (Exception e)
            {
                logger.error("[{0}] Conn# {1} Error occurred when accepting client socket. Error is: {2}",
                             conn.serviceName, conn.connNumber, e);
                if (conn != null)
                {
                    conn.Release();
                }
            }
            finally
            {
                conn = null;                 //free reference to the object
            }
        }
Esempio n. 3
0
		private void startApplication()
		{
			
			logger = Logger.getInstance();
			logger.initialize(m_debug);
			logger.info("");
			logger.info("===============================");
			logger.info("*** Starting up WinTunnel ****");
			logger.info("===============================");

			logger.info("Starting thread... ");

			//create a signal handler to detect Ctrl-C to stop the service
			if (m_debug)
			{
				m_ctrl = new ConsoleCtrl();
				m_ctrl.ControlEvent += new ConsoleCtrl.ControlEventHandler(consoleEventHandler);
			}

			//Load configuration and startup
			m_config = new AppConfig();
			if ( ! m_config.initialize() )
			{
				logger.error("Error loading configuration file.  Exiting...");
				return;
			}

			//Initialize the threadpool
			ThreadPool pool = ThreadPool.getInstance();
			pool.initialize(3); //start pool with 3 threads

			m_connMgr = ConnectionManager.getInstance();
		
			foreach (ProxyConfig cfg in m_config.m_proxyConfigs)
			{
				ProxyClientListenerTask task = new ProxyClientListenerTask(cfg);
				pool.addTask(task);
			}

			shutdownEvent.WaitOne(); //now just wait for signal to exit
			logger.info("Thread is initiating shutdown... ");

			if (m_ctrl != null)
			{
				logger.info("Releasing Console Event handler. ");
				m_ctrl = null;
			}
			
			//Shutdown the connection manager
			m_connMgr.shutdown();
			logger.info("Connection Manager has been terminated. ");

			//Shutdown the thread pool
			pool.Stop();
			logger.info("ThreadPool has been stopped. ");

			logger.info("Terminating thread... ");
			logger.info("*** WinTunnel exited. ****");
			logger.close();
		}