public MainLauncherWindow()
        {
            InitializeComponent();

            fileService             = new WinFileService();
            dialogService           = new WinDialogService();
            freeLanDetectionService = new FreeLanDetectionService(fileService, dialogService);
            windowsServices         = new WindowsServices();
            networkAdapters         = new NetworkAdapters();
            freeLanService          = new FreeLanService(
                windowsServices,
                freeLanDetectionService,
                dialogService
                );



            if (!EnvHelper.IsAdministrator())
            {
                MessageBox.Show("To use this application you will need administrator privileges!");
                System.Environment.Exit(0);
            }

            UpdateWindow();
        }
        public NetworkAdaptersWindow()
        {
            InitializeComponent();

            networkAdapters = new NetworkAdapters();

            UpdateWindow();
        }
Esempio n. 3
0
 ///<summary>Initializes a new instance of the <see cref="VirtualMachineDefinition"/> class with the specified virtual machine name and configuration path.</summary>
 ///<param name="name">The name of the virtual machine.</param>
 ///<param name="path">The path where the configuration files will be stored.</param>
 public VirtualMachineDefinition(string name, string path)
 {
     Name  = name;
     Notes = "";
     Path  = path;
     ScsiControllers.Add(new ScsiController());
     NetworkAdapters.Add(new NetworkAdapter());
 }
        /// <summary>
        /// Save all the adapters' categories.
        /// </summary>
        private void Save()
        {
            var local = NetworkAdapters.Where(i => i.Category == NetworkAdapterCategory.Local);
            var vpn   = NetworkAdapters.Where(i => i.Category == NetworkAdapterCategory.Vpn);
            var none  = NetworkAdapters.Where(i => i.Category == NetworkAdapterCategory.None);

            _killSwitchServiceClient.RemoveLocalAdapters(none.ToArray());
            _killSwitchServiceClient.RemoveVpnAdapters(none.ToArray());

            _killSwitchServiceClient.AddLocalAdapters(local.ToArray());
            _killSwitchServiceClient.AddVpnAdapters(vpn.ToArray());
        }
Esempio n. 5
0
        /// <summary>
        /// Main constructor
        /// </summary>
        public MainWindow()
        {
            InitializeComponent();
            this.StopButton.IsEnabled = false;
            //Important assign the dispatcher at the beginning
            UIData.Initialize(this.Dispatcher);

            //Register for unhandled exceptions
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            //Initialize gui related things
            this.adapterListView.ItemsSource = UIData.AdapterCollection;
            this.serviceListView.ItemsSource = UIData.ServiceCollection;
            this.mmuView.ItemsSource         = UIData.MMUCollection;
            CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(this.mmuView.ItemsSource);

            //PropertyGroupDescription groupDescription = new PropertyGroupDescription("Language");
            //view.GroupDescriptions.Add(groupDescription);
            view.SortDescriptions.Add(new SortDescription("MotionType", ListSortDirection.Ascending));
            view.SortDescriptions.Add(new SortDescription("priority", ListSortDirection.Ascending));

            //Create an instance of the register service and register at events
            this.registerService = new MMIRegisterServiceImplementation();
            this.registerService.OnAdapterRegistered   += RegisterService_OnAdapterRegistered;
            this.registerService.OnAdapterUnregistered += RegisterService_OnAdapterUnregistered;
            this.registerService.OnServiceRegistered   += RegisterService_OnServiceRegistered;
            this.registerService.OnServiceUnregistered += RegisterService_OnServiceUnregistered;

            //Parse the settings from file
            try
            {
                //Load the settings file from json
                settings = Serialization.FromJsonString <ServerSettings>(File.ReadAllText("settings.json"));

                //Check if directory exists -> if not user must provide input
                if (!Directory.Exists(settings.DataPath))
                {
                    ShowFolderSelectionDialog("Invalid path: ");
                }
            }
            catch (Exception)
            {
                //Create a new settings file
                settings = new ServerSettings();

                //Show the folder selection dialog
                ShowFolderSelectionDialog("No settings file found: ");
                SaveSettings(); //if settings did not exist before save the default settings
            }

            //Read settings from system registry
            encryptionService = new Encrypt();
            LoadRegistrySettings();

            //Assign the port (common for loaded settings from file or settings from default settings file.
            RuntimeData.MMIRegisterAddress.Port    = settings.RegisterPort;
            RuntimeData.MMIRegisterAddress.Address = settings.RegisterAddress;

            //Sets up the performance bar which visualizes performance stats within the main window
            SetupPerformanceBar();

            //check if last selected adapter has the same ip address and update ip if needed
            NetworkAdapters = new NetworkAdapters();
            if (NetworkAdapters.updatedCurrentIp(settings.RegisterInterface, settings.RegisterAddress))
            { //update settings and save only if the interface or IP address has changed
                settings.RegisterAddress               = NetworkAdapters.AvailableIp[NetworkAdapters.currentIp].IP;
                settings.RegisterInterface             = NetworkAdapters.AvailableIp[NetworkAdapters.currentIp].Name;
                RuntimeData.MMIRegisterAddress.Address = settings.RegisterAddress;
                SaveSettings();
            }

            UpdateTitleBar();

            //Directly start all processes if autostart is enabled
            if (this.settings.AutoStart)
            {
                this.StartButton_Click(this, new RoutedEventArgs());
            }
        }
Esempio n. 6
0
        private void workerThread_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                log.Write(TraceLevel.Info, "Adding Windows Firewall Rule");

                try
                {
                    WindowsFirewall.AuthorizeProgram(AppMain.DisplayName,
                                                     new FileInfo(Assembly.GetExecutingAssembly().Location));
                }
                catch (Exception ex)
                {
                    log.Write(TraceLevel.Error, "Failed to add rule to Windows firewall", ex);
                }

                if (_worker.CancellationPending)
                {
                    return;
                }
                _worker.ReportProgress(10, "Starting Miracle Server");
                log.Write(TraceLevel.Info, "Starting Miracle Server");

                _vncManager.StartVncServer();

                if (_worker.CancellationPending)
                {
                    return;
                }
                _worker.ReportProgress(30, "Detecting NAT/Firewall");
                log.Write(TraceLevel.Info, "Detecting NAT/Firewall");

                _apiClient = new MiracleSticksAPIClient("BasicHttpBinding_IMiracleSticksAPI");

                // Are we behind a UPnP-enabled NAT/firewall?
                if (UPnP.NatDeviceFound)
                {
                    try
                    {
                        if (_worker.CancellationPending)
                        {
                            return;
                        }
                        _worker.ReportProgress(50, "Configuring NAT/Firewall");
                        log.Write(TraceLevel.Info, "Configuring NAT/Firewall");

                        _externalEP = UPnP.GetExternalEndpoint(ConfigManager.Data.Port);
                    }
                    catch (Exception ex)
                    {
                        log.Write(TraceLevel.Warning, "UPnP Error", ex);
                    }

                    if (_externalEP == null)
                    {
                        if (_worker.CancellationPending)
                        {
                            return;
                        }
                        log.Write(TraceLevel.Info, "Creating UPnP port mapping");

                        try
                        {
                            _externalEP = UPnP.MapPort(ConfigManager.Data.Port, ConfigManager.Data.Port);
                        }
                        catch (Exception ex)
                        {
                            log.Write(TraceLevel.Warning, "UPnP Error", ex);
                        }

                        if (_externalEP == null)
                        {
                            log.Write(TraceLevel.Warning, "UPnP port mapping failed");
                            e.Result = RegisterForPacketRelay();
                        }
                    }
                    else
                    {
                        log.Write(TraceLevel.Info, "UPnP port mapping already exists");
                    }

                    if (_externalEP != null)
                    {
                        if (_worker.CancellationPending)
                        {
                            return;
                        }
                        _worker.ReportProgress(70, "Verifying NAT/Firewall Configuration");

                        // See if the server can access our listen port
                        bool pingSuccess;
                        try
                        {
                            var pingResponse = _apiClient.PortTest(new PortTestRequest {
                                Port = _externalEP.Port
                            });
                            pingSuccess = pingResponse.Success;
                        }
                        catch (EndpointNotFoundException ex)
                        {
                            log.Write(TraceLevel.Error, "Failed to connect to MiracleSticks service", ex);
                            e.Result = new Exception("Failed to connect to MiracleSticks service");
                            return;
                        }

                        if (pingSuccess && !AppMain.DebugMode)
                        {
                            e.Result = RegisterForDirectConnection(_externalEP);
                        }
                        else
                        {
                            log.Write(TraceLevel.Warning, "Port test failed");
                            e.Result = RegisterForPacketRelay();
                        }
                    }
                }
                else
                {
                    if (_worker.CancellationPending)
                    {
                        return;
                    }
                    log.Write(TraceLevel.Info, "No NAT/firewall detected");

                    // See if the server can access our listen port
                    bool pingSuccess;
                    try
                    {
                        var pingResponse = _apiClient.PortTest(new PortTestRequest {
                            Port = ConfigManager.Data.Port
                        });
                        pingSuccess = pingResponse.Success;
                    }
                    catch (EndpointNotFoundException ex)
                    {
                        log.Write(TraceLevel.Error, "Failed to connect to MiracleSticks service", ex);
                        e.Result = new Exception("Failed to connect to MiracleSticks service");
                        return;
                    }

                    if (pingSuccess && !AppMain.DebugMode)
                    {
                        IPEndPoint ep = new IPEndPoint(NetworkAdapters.GetRoutedInterface(), ConfigManager.Data.Port);
                        e.Result = RegisterForDirectConnection(ep);
                    }
                    else
                    {
                        log.Write(TraceLevel.Warning, "Port test failed");
                        e.Result = RegisterForPacketRelay();
                    }
                }
            }
            catch (ThreadAbortException) { throw; }
            catch (ThreadInterruptedException) { throw; }
            catch (Exception ex)
            {
                log.Write(TraceLevel.Error, "Fatal error", ex);
                e.Result = ex;
            }
        }