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(); }
//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 } }
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(); }