Example #1
0
        private void Connect(object sender, RoutedEventArgs e)
        {
            LogLine("Connecting...");

            // Before we actually do anything, all of the fields need to be uneditable at this point
            WanIpTextBox.IsReadOnly                     = true;
            WanPortTextBox.IsReadOnly                   = true;
            LanIpTextBox.IsReadOnly                     = true;
            LanPortTextBox.IsReadOnly                   = true;
            RegisterWithAwsCheckBox.IsEnabled           = false;
            AutoConfigureCheckBox.IsEnabled             = false;
            OpenSshExecutableLocationTextBox.IsReadOnly = true;
            LocalStorageDirectoryTextBox.IsReadOnly     = true;
            LocateOpenSshFileButton.IsEnabled           = false;
            LocateLocalDirectoryButton.IsEnabled        = false;

            if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
            {
                LogLine("Network is available.");
                if (!AutoconfigureIpSettings)
                {
                    LogLine("Setting OpenSSH settings from user configured settings.");
                    controller.SetLocalIp(DataBinding.LanIp);

                    int wanPort;
                    if (Int32.TryParse(DataBinding.WanPort, out wanPort))
                    {
                        controller.SetRemotePort(wanPort);
                    }

                    int lanPort;
                    if (Int32.TryParse(DataBinding.LanPort, out lanPort))
                    {
                        controller.SetLocalPort(lanPort);
                    }
                }
                else
                {
                    controller.SetRemotePort(OpenSshController.GetRandomPortValue());
                }

                bool portRedirected = controller.AddPortRedirection();
                LogLine("Redirecting LAN IP/Port combination for WAN availability...");
                LogLine("Server WAN access available: " + portRedirected);

                bool sshdStarted = false;
                if (controller.SetSftpDirectory(FolderManager.DirectoryPath))
                {
                    LogLine("Creating OpenSSH sshd_config and starting OpenSSH service...");
                    controller.CreateSshdConfig();
                    controller.UpdateSshdConfig(DataBinding.OpenSshInstallLocation);
                    sshdStarted = controller.StartSshd();
                    LogLine("OpenSSH service started: " + sshdStarted);

                    // Fill in the WAN info for the UI
                    DataBinding.WanIp   = controller.GetRemoteIp();
                    DataBinding.WanPort = controller.GetRemotePort().ToString();
                }

                if (!portRedirected && !sshdStarted)
                {
                    SetConnectionStatusLabelToDisconnected();
                    LogLine("COULD NOT CONNECT! UNABLE TO REDIRECT PORT, UNABLE TO START OPENSSH.");
                }
                if (!portRedirected && sshdStarted)
                {
                    var converter = new System.Windows.Media.BrushConverter();
                    ConnectionStatusLabel.Background = (Brush)converter.ConvertFromString("#F7f937");
                    LogLine("COULD NOT CONNECT! UNABLE TO REDIRECT PORT.");
                }

                if (portRedirected && sshdStarted)
                {
                    LogLine("Connected. Starting Registration...");
                    var converter = new System.Windows.Media.BrushConverter();
                    ConnectionStatusLabel.Background = (Brush)converter.ConvertFromString("#41F618");

                    if (RegisterWithAwsCheckBox.IsChecked.GetValueOrDefault())
                    {
                        connected = true;
                        StartAwsThread();
                    }
                }
            }
            else
            {
                LogLine("Network was not available. Please connect to a network before starting Flingr.");
            }
        }