Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

1657 lines (1382 sloc) 76.77 kb
Imports WeifenLuo.WinFormsUI.Docking
Imports System.IO
Imports Crownwood
Imports System.Threading
Namespace App
Public Class Runtime
#Region "Public Declarations"
Public Shared sL As Config.Settings.Load
Public Shared sS As Config.Settings.Save
Public Shared cL As Connection.List
Public Shared prevCL As Connection.List
Public Shared ctL As Container.List
Public Shared prevCTL As Container.List
Public Shared crL As Credential.List
Public Shared prevCRL As Credential.List
Public Shared wL As UI.Window.List
Public Shared mC As Messages.Collector
Public Shared SysTrayIcon As Tools.Controls.SysTrayIcon
Public Shared SysMenu As Tools.SystemMenu
Public Shared log As log4net.ILog
Public Shared IsUpdateAvailable As Boolean
Public Shared IsAnnouncementAvailable As Boolean
Public Shared ConnectionsFileLoaded As Boolean
Public Shared WithEvents tmrSqlWatcher As Timers.Timer
Public Shared LastSQLUpdate As Date
Public Shared LastSelected As String
Public Shared DefaultConnection As mRemote.Connection.Info
Public Shared DefaultInheritance As mRemote.Connection.Info.Inheritance
Public Shared ExtApps As New ArrayList()
#End Region
Public Class Windows
Public Shared treeForm As UI.Window.Tree
Public Shared treePanel As New DockContent
Public Shared configForm As UI.Window.Config
Public Shared configPanel As New DockContent
Public Shared errorsForm As UI.Window.ErrorsAndInfos
Public Shared errorsPanel As New DockContent
Public Shared sessionsForm As UI.Window.Sessions
Public Shared sessionsPanel As New DockContent
Public Shared screenshotForm As UI.Window.ScreenshotManager
Public Shared screenshotPanel As New DockContent
Public Shared quickyForm As UI.Window.QuickConnect
Public Shared quickyPanel As New DockContent
Public Shared optionsForm As UI.Window.Options
Public Shared optionsPanel As New DockContent
Public Shared saveasForm As UI.Window.SaveAs
Public Shared saveasPanel As New DockContent
Public Shared aboutForm As UI.Window.About
Public Shared aboutPanel As New DockContent
Public Shared updateForm As UI.Window.Update
Public Shared updatePanel As New DockContent
Public Shared sshtransferForm As UI.Window.SSHTransfer
Public Shared sshtransferPanel As New DockContent
Public Shared adimportForm As UI.Window.ADImport
Public Shared adimportPanel As New DockContent
Public Shared helpForm As UI.Window.Help
Public Shared helpPanel As New DockContent
Public Shared externalappsForm As UI.Window.ExternalApps
Public Shared externalappsPanel As New DockContent
Public Shared portscanForm As UI.Window.PortScan
Public Shared portscanPanel As New DockContent
Public Shared ultravncscForm As UI.Window.UltraVNCSC
Public Shared ultravncscPanel As New DockContent
Public Shared componentscheckForm As UI.Window.ComponentsCheck
Public Shared componentscheckPanel As New DockContent
Public Shared AnnouncementForm As UI.Window.Announcement
Public Shared AnnouncementPanel As New DockContent
Public Shared Sub Show(ByVal WindowType As UI.Window.Type, Optional ByVal PortScanMode As Tools.PortScan.PortScanMode = Tools.PortScan.PortScanMode.Normal)
Try
Select Case WindowType
Case UI.Window.Type.About
Windows.aboutForm = New UI.Window.About(Windows.aboutPanel)
Windows.aboutPanel = Windows.aboutForm
Windows.aboutForm.Show(frmMain.pnlDock)
Case UI.Window.Type.ADImport
Windows.adimportForm = New UI.Window.ADImport(Windows.adimportPanel)
Windows.adimportPanel = Windows.adimportForm
Windows.adimportPanel.Show(frmMain.pnlDock)
Case UI.Window.Type.Options
Windows.optionsForm = New UI.Window.Options(Windows.optionsPanel)
Windows.optionsPanel = Windows.optionsForm
Windows.optionsForm.Show(frmMain.pnlDock)
Case UI.Window.Type.SaveAs
Windows.saveasForm = New UI.Window.SaveAs(Windows.saveasPanel)
Windows.saveasPanel = Windows.saveasForm
Windows.saveasForm.Show(frmMain.pnlDock)
Case UI.Window.Type.SSHTransfer
Windows.sshtransferForm = New UI.Window.SSHTransfer(Windows.sshtransferPanel)
Windows.sshtransferPanel = Windows.sshtransferForm
Windows.sshtransferForm.Show(frmMain.pnlDock)
Case UI.Window.Type.Update
Windows.updateForm = New UI.Window.Update(Windows.updatePanel)
Windows.updatePanel = Windows.updateForm
Windows.updateForm.Show(frmMain.pnlDock)
Case UI.Window.Type.Help
Windows.helpForm = New UI.Window.Help(Windows.helpPanel)
Windows.helpPanel = Windows.helpForm
Windows.helpForm.Show(frmMain.pnlDock)
Case UI.Window.Type.ExternalApps
Windows.externalappsForm = New UI.Window.ExternalApps(Windows.externalappsPanel)
Windows.externalappsPanel = Windows.externalappsForm
Windows.externalappsForm.Show(frmMain.pnlDock)
Case UI.Window.Type.PortScan
Windows.portscanForm = New UI.Window.PortScan(Windows.portscanPanel, PortScanMode)
Windows.portscanPanel = Windows.portscanForm
Windows.portscanForm.Show(frmMain.pnlDock)
Case UI.Window.Type.UltraVNCSC
Windows.ultravncscForm = New UI.Window.UltraVNCSC(Windows.ultravncscPanel)
Windows.ultravncscPanel = Windows.ultravncscForm
Windows.ultravncscForm.Show(frmMain.pnlDock)
Case UI.Window.Type.ComponentsCheck
Windows.componentscheckForm = New UI.Window.ComponentsCheck(Windows.componentscheckPanel)
Windows.componentscheckPanel = Windows.componentscheckForm
Windows.componentscheckForm.Show(frmMain.pnlDock)
Case UI.Window.Type.Announcement
Windows.AnnouncementForm = New UI.Window.Announcement(AnnouncementPanel)
Windows.AnnouncementPanel = Windows.AnnouncementForm
Windows.AnnouncementForm.Show(frmMain.pnlDock)
End Select
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Show (App.Runtime.Windows) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
End Class
Public Class Screens
Public Shared Sub SendFormToScreen(ByVal Screen As Screen)
Dim wasMax As Boolean
If frmMain.WindowState = FormWindowState.Maximized Then
wasMax = True
frmMain.WindowState = FormWindowState.Normal
End If
frmMain.Location = Screen.Bounds.Location
If wasMax Then
frmMain.WindowState = FormWindowState.Maximized
End If
End Sub
Public Shared Sub SendPanelToScreen(ByVal Panel As DockContent, ByVal Screen As Screen)
Panel.DockState = DockState.Float
Panel.ParentForm.Left = Screen.Bounds.Location.X
Panel.ParentForm.Top = Screen.Bounds.Location.Y
End Sub
End Class
Public Class Startup
Public Shared Sub CreatePanels(Optional ByVal ShowDefault As Boolean = False)
Windows.configForm = New UI.Window.Config(Windows.configPanel)
Windows.configPanel = Windows.configForm
If ShowDefault Then
Windows.configPanel.Show(frmMain.pnlDock, DockState.DockLeft)
End If
Windows.treeForm = New UI.Window.Tree(Windows.treePanel)
Windows.treePanel = Windows.treeForm
Tree.Node.TreeView = Windows.treeForm.tvConnections
If ShowDefault Then
Windows.treePanel.Show(frmMain.pnlDock, DockState.DockLeft)
Windows.treePanel.DockTo(frmMain.pnlDock.Panes(frmMain.pnlDock.Panes.Count - 1), DockStyle.Top, 0)
End If
Windows.errorsForm = New UI.Window.ErrorsAndInfos(Windows.errorsPanel)
Windows.errorsPanel = Windows.errorsForm
If ShowDefault Then
Windows.errorsPanel.Show(frmMain.pnlDock, DockState.DockBottomAutoHide)
End If
Windows.sessionsForm = New UI.Window.Sessions(Windows.sessionsPanel)
Windows.sessionsPanel = Windows.sessionsForm
If ShowDefault Then
Windows.sessionsPanel.Show(frmMain.pnlDock, DockState.DockBottomAutoHide)
End If
Windows.screenshotForm = New UI.Window.ScreenshotManager(Windows.screenshotPanel)
Windows.screenshotPanel = Windows.screenshotForm
Windows.quickyForm = New UI.Window.QuickConnect(Windows.quickyPanel)
Windows.quickyPanel = Windows.quickyForm
Windows.updateForm = New UI.Window.Update(Windows.updatePanel)
Windows.updatePanel = Windows.updateForm
Windows.AnnouncementForm = New UI.Window.Announcement(Windows.AnnouncementPanel)
Windows.AnnouncementPanel = Windows.AnnouncementForm
End Sub
Public Shared Sub GetConnectionIcons()
Dim iPath As String = My.Application.Info.DirectoryPath & "\Icons\"
If Directory.Exists(iPath) = False Then
Exit Sub
End If
For Each f As String In Directory.GetFiles(iPath, "*.ico", SearchOption.AllDirectories)
Dim fInfo As New FileInfo(f)
Array.Resize(Connection.Icon.Icons, Connection.Icon.Icons.Length + 1)
Connection.Icon.Icons.SetValue(fInfo.Name.Replace(".ico", ""), Connection.Icon.Icons.Length - 1)
Next
End Sub
Public Shared Sub GetPuttySessions()
Connection.PuttySession.PuttySessions = Connection.Protocol.PuttyBase.GetSessions()
End Sub
Public Shared Sub CreateLogger()
log4net.Config.XmlConfigurator.Configure(New FileInfo("mRemote.exe.config"))
log = log4net.LogManager.GetLogger("mRemoteNG.Log")
End Sub
Public Shared Sub UpdateCheck()
If My.Settings.CheckForUpdatesAsked And My.Settings.CheckForUpdatesOnStartup Then
If My.Settings.UpdatePending Or My.Settings.CheckForUpdatesLastCheck < Date.Now.Subtract(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays)) Then
frmMain.tmrShowUpdate.Enabled = True
Windows.updateForm.CheckForUpdate()
AddHandler Windows.updateForm.UpdateCheckCompleted, AddressOf UpdateCheckComplete
End If
End If
End Sub
Private Shared Sub UpdateCheckComplete(ByVal UpdateAvailable As Boolean)
My.Settings.CheckForUpdatesLastCheck = Date.Now
My.Settings.UpdatePending = UpdateAvailable
IsUpdateAvailable = UpdateAvailable
End Sub
Public Shared Sub AnnouncementCheck()
If My.Settings.CheckForUpdatesAsked And My.Settings.CheckForUpdatesOnStartup And App.Editions.Spanlink.Enabled = False Then
If My.Settings.CheckForUpdatesLastCheck < Date.Now.Subtract(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays)) Then
frmMain.tmrShowUpdate.Enabled = True
Windows.AnnouncementForm.CheckForAnnouncement()
AddHandler Windows.AnnouncementForm.AnnouncementCheckCompleted, AddressOf AnnouncementCheckComplete
End If
End If
End Sub
Private Shared Sub AnnouncementCheckComplete(ByVal AnnouncementAvailable As Boolean)
My.Settings.CheckForUpdatesLastCheck = Date.Now
IsAnnouncementAvailable = AnnouncementAvailable
End Sub
Public Shared Sub ParseCommandLineArgs()
Try
Dim cmd As New Tools.Misc.CMDArguments(Environment.GetCommandLineArgs)
Dim ConsParam As String = ""
If cmd("cons") IsNot Nothing Then
ConsParam = "cons"
End If
If cmd("c") IsNot Nothing Then
ConsParam = "c"
End If
Dim ResetPosParam As String = ""
If cmd("resetpos") IsNot Nothing Then
ResetPosParam = "resetpos"
End If
If cmd("rp") IsNot Nothing Then
ResetPosParam = "rp"
End If
Dim ResetPanelsParam As String = ""
If cmd("resetpanels") IsNot Nothing Then
ResetPanelsParam = "resetpanels"
End If
If cmd("rpnl") IsNot Nothing Then
ResetPanelsParam = "rpnl"
End If
Dim ResetToolbarsParam As String = ""
If cmd("resettoolbar") IsNot Nothing Then
ResetToolbarsParam = "resettoolbar"
End If
If cmd("rtbr") IsNot Nothing Then
ResetToolbarsParam = "rtbr"
End If
If cmd("reset") IsNot Nothing Then
ResetPosParam = "rp"
ResetPanelsParam = "rpnl"
ResetToolbarsParam = "rtbr"
End If
Dim NoReconnectParam As String = ""
If cmd("noreconnect") IsNot Nothing Then
NoReconnectParam = "noreconnect"
End If
If cmd("norc") IsNot Nothing Then
NoReconnectParam = "norc"
End If
If ConsParam <> "" Then
If File.Exists(cmd(ConsParam)) = False Then
If File.Exists(My.Application.Info.DirectoryPath & "\" & cmd(ConsParam)) Then
My.Settings.LoadConsFromCustomLocation = True
My.Settings.CustomConsPath = My.Application.Info.DirectoryPath & "\" & cmd(ConsParam)
Exit Sub
ElseIf File.Exists(App.Info.Connections.DefaultConnectionsPath & "\" & cmd(ConsParam)) Then
My.Settings.LoadConsFromCustomLocation = True
My.Settings.CustomConsPath = App.Info.Connections.DefaultConnectionsPath & "\" & cmd(ConsParam)
Exit Sub
End If
Else
My.Settings.LoadConsFromCustomLocation = True
My.Settings.CustomConsPath = cmd(ConsParam)
Exit Sub
End If
End If
If ResetPosParam <> "" Then
My.Settings.MainFormKiosk = False
My.Settings.MainFormLocation = New Point(999, 999)
My.Settings.MainFormSize = New Size(900, 600)
My.Settings.MainFormState = FormWindowState.Normal
End If
If ResetPanelsParam <> "" Then
My.Settings.ResetPanels = True
End If
If NoReconnectParam <> "" Then
My.Settings.NoReconnect = True
End If
If ResetToolbarsParam <> "" Then
My.Settings.ResetToolbars = True
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't parse command line args" & vbNewLine & ex.Message)
End Try
End Sub
Public Shared Sub CreateSQLUpdateHandlerAndStartTimer()
If My.Settings.UseSQLServer = True Then
AddHandler Tools.Misc.SQLUpdateCheckFinished, AddressOf SQLUpdateCheckFinished
tmrSqlWatcher = New Timers.Timer(3000)
tmrSqlWatcher.Start()
End If
End Sub
Public Shared Sub DestroySQLUpdateHandlerAndStopTimer()
Try
LastSQLUpdate = Nothing
RemoveHandler Tools.Misc.SQLUpdateCheckFinished, AddressOf SQLUpdateCheckFinished
tmrSqlWatcher.Stop()
tmrSqlWatcher.Close()
Catch ex As Exception
End Try
End Sub
End Class
Public Class Shutdown
Public Shared Sub Quit()
frmMain.Close()
End Sub
Public Shared Sub BeforeQuit()
Try
If App.Runtime.SysTrayIcon IsNot Nothing Then
If App.Runtime.SysTrayIcon.Disposed = False Then
App.Runtime.SysTrayIcon.Dispose()
End If
End If
If My.Settings.SaveConsOnExit Then
SaveConnections()
End If
If Editions.Spanlink.Enabled Then
If SaveReport() Then
File.Delete(My.Application.Info.DirectoryPath & "\Report.log")
End If
End If
sS.Save()
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't save settings or dispose SysTray Icon" & vbNewLine & ex.Message, True)
End Try
End Sub
End Class
#Region "Default Connection"
Public Shared Function DefaultConnectionFromSettings() As mRemote.Connection.Info
DefaultConnection = New mRemote.Connection.Info
DefaultConnection.IsDefault = True
Return DefaultConnection
End Function
Public Shared Sub DefaultConnectionToSettings()
With DefaultConnection
My.Settings.ConDefaultDescription = .Description
My.Settings.ConDefaultIcon = .Icon
My.Settings.ConDefaultPanel = .Panel
My.Settings.ConDefaultUsername = .Username
My.Settings.ConDefaultPassword = .Password
My.Settings.ConDefaultDomain = .Domain
My.Settings.ConDefaultProtocol = .Protocol.ToString
My.Settings.ConDefaultPuttySession = .PuttySession
My.Settings.ConDefaultICAEncryptionStrength = .ICAEncryption.ToString
My.Settings.ConDefaultRDPAuthenticationLevel = .RDPAuthenticationLevel.ToString
My.Settings.ConDefaultUseConsoleSession = .UseConsoleSession
My.Settings.ConDefaultRenderingEngine = .RenderingEngine.ToString
My.Settings.ConDefaultResolution = .Resolution.ToString
My.Settings.ConDefaultColors = .Colors.ToString
My.Settings.ConDefaultCacheBitmaps = .CacheBitmaps
My.Settings.ConDefaultDisplayWallpaper = .DisplayWallpaper
My.Settings.ConDefaultDisplayThemes = .DisplayThemes
My.Settings.ConDefaultRedirectKeys = .RedirectKeys
My.Settings.ConDefaultRedirectDiskDrives = .RedirectDiskDrives
My.Settings.ConDefaultRedirectPrinters = .RedirectPrinters
My.Settings.ConDefaultRedirectPorts = .RedirectPorts
My.Settings.ConDefaultRedirectSmartCards = .RedirectSmartCards
My.Settings.ConDefaultRedirectSound = .RedirectSound.ToString
My.Settings.ConDefaultPreExtApp = .PreExtApp
My.Settings.ConDefaultPostExtApp = .PostExtApp
My.Settings.ConDefaultMacAddress = .MacAddress
My.Settings.ConDefaultUserField = .UserField
My.Settings.ConDefaultVNCAuthMode = .VNCAuthMode.ToString
My.Settings.ConDefaultVNCColors = .VNCColors.ToString
My.Settings.ConDefaultVNCCompression = .VNCCompression.ToString
My.Settings.ConDefaultVNCEncoding = .VNCEncoding.ToString
My.Settings.ConDefaultVNCProxyIP = .VNCProxyIP
My.Settings.ConDefaultVNCProxyPassword = .VNCProxyPassword
My.Settings.ConDefaultVNCProxyPort = .VNCProxyPort
My.Settings.ConDefaultVNCProxyType = .VNCProxyType.ToString
My.Settings.ConDefaultVNCProxyUsername = .VNCProxyUsername
My.Settings.ConDefaultVNCSmartSizeMode = .VNCSmartSizeMode.ToString
My.Settings.ConDefaultVNCViewOnly = .VNCViewOnly
My.Settings.ConDefaultExtApp = .ExtApp
End With
End Sub
#End Region
#Region "Default Inheritance"
Public Shared Function DefaultInheritanceFromSettings() As mRemote.Connection.Info.Inheritance
DefaultInheritance = New mRemote.Connection.Info.Inheritance(Nothing)
DefaultInheritance.IsDefault = True
Return DefaultInheritance
End Function
Public Shared Sub DefaultInheritanceToSettings()
With DefaultInheritance
My.Settings.InhDefaultDescription = .Description
My.Settings.InhDefaultIcon = .Icon
My.Settings.InhDefaultPanel = .Panel
My.Settings.InhDefaultUsername = .Username
My.Settings.InhDefaultPassword = .Password
My.Settings.InhDefaultDomain = .Domain
My.Settings.InhDefaultProtocol = .Protocol
My.Settings.InhDefaultPort = .Port
My.Settings.InhDefaultPuttySession = .PuttySession
My.Settings.InhDefaultUseConsoleSession = .UseConsoleSession
My.Settings.InhDefaultRenderingEngine = .RenderingEngine
My.Settings.InhDefaultICAEncryptionStrength = .ICAEncryption
My.Settings.InhDefaultRDPAuthenticationLevel = .RDPAuthenticationLevel
My.Settings.InhDefaultResolution = .Resolution
My.Settings.InhDefaultColors = .Colors
My.Settings.InhDefaultCacheBitmaps = .CacheBitmaps
My.Settings.InhDefaultDisplayWallpaper = .DisplayWallpaper
My.Settings.InhDefaultDisplayThemes = .DisplayThemes
My.Settings.InhDefaultRedirectKeys = .RedirectKeys
My.Settings.InhDefaultRedirectDiskDrives = .RedirectDiskDrives
My.Settings.InhDefaultRedirectPrinters = .RedirectPrinters
My.Settings.InhDefaultRedirectPorts = .RedirectPorts
My.Settings.InhDefaultRedirectSmartCards = .RedirectSmartCards
My.Settings.InhDefaultRedirectSound = .RedirectSound
My.Settings.InhDefaultPreExtApp = .PreExtApp
My.Settings.InhDefaultPostExtApp = .PostExtApp
My.Settings.InhDefaultMacAddress = .MacAddress
My.Settings.InhDefaultUserField = .UserField
My.Settings.InhDefaultVNCAuthMode = .VNCAuthMode
My.Settings.InhDefaultVNCColors = .VNCColors
My.Settings.InhDefaultVNCCompression = .VNCCompression
My.Settings.InhDefaultVNCEncoding = .VNCEncoding
My.Settings.InhDefaultVNCProxyIP = .VNCProxyIP
My.Settings.InhDefaultVNCProxyPassword = .VNCProxyPassword
My.Settings.InhDefaultVNCProxyPort = .VNCProxyPort
My.Settings.InhDefaultVNCProxyType = .VNCProxyType
My.Settings.InhDefaultVNCProxyUsername = .VNCProxyUsername
My.Settings.InhDefaultVNCSmartSizeMode = .VNCSmartSizeMode
My.Settings.InhDefaultVNCViewOnly = .VNCViewOnly
My.Settings.InhDefaultExtApp = .ExtApp
End With
End Sub
#End Region
#Region "Panels"
Public Shared Function AddPanel(Optional ByVal Title As String = Language.Base.NewPanel, Optional ByVal NoTabber As Boolean = False) As Form
Try
Dim pnlcForm As New DockContent
Dim cForm As New UI.Window.Connection(pnlcForm)
pnlcForm = cForm
'create context menu
Dim cMen As New ContextMenuStrip
'create rename item
Dim cMenRen As New ToolStripMenuItem
cMenRen.Text = Language.Base.Rename
cMenRen.Image = My.Resources.Rename
cMenRen.Tag = pnlcForm
AddHandler cMenRen.Click, AddressOf cMenConnectionPanelRename_Click
Dim cMenScreens As New ToolStripMenuItem
cMenScreens.Text = Language.Base.SendTo
cMenScreens.Image = My.Resources.Monitor
cMenScreens.Tag = pnlcForm
cMenScreens.DropDownItems.Add("Dummy")
AddHandler cMenScreens.DropDownOpening, AddressOf cMenConnectionPanelScreens_DropDownOpening
cMen.Items.AddRange(New ToolStripMenuItem() {cMenRen, cMenScreens})
pnlcForm.TabPageContextMenuStrip = cMen
TryCast(cForm, UI.Window.Connection).SetFormText(Title.Replace("&", "&&"))
pnlcForm.Show(frmMain.pnlDock, DockState.Document)
If NoTabber = True Then
TryCast(cForm, UI.Window.Connection).TabController.Dispose()
End If
If NoTabber = False Then
wL.Add(cForm)
End If
Return cForm
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't add panel" & vbNewLine & ex.Message)
Return Nothing
End Try
End Function
Private Shared Sub cMenConnectionPanelRename_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Try
Dim conW As UI.Window.Connection
conW = sender.Tag
Dim nTitle As String = InputBox(Language.Base.NewTitle & ":", , sender.Tag.Text.Replace("&&", "&"))
If nTitle <> "" Then
conW.SetFormText(nTitle.Replace("&", "&&"))
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't rename panel" & vbNewLine & ex.Message)
End Try
End Sub
Private Shared Sub cMenConnectionPanelScreens_DropDownOpening(ByVal sender As System.Object, ByVal e As System.EventArgs)
Try
Dim cMenScreens As ToolStripMenuItem = sender
cMenScreens.DropDownItems.Clear()
For i As Integer = 0 To Screen.AllScreens.Length - 1
Dim cMenScreen As New ToolStripMenuItem(Language.Base.Screen & " " & i + 1)
cMenScreen.Tag = New ArrayList
cMenScreen.Image = My.Resources.Monitor_GoTo
TryCast(cMenScreen.Tag, ArrayList).Add(Screen.AllScreens(i))
TryCast(cMenScreen.Tag, ArrayList).Add(cMenScreens.Tag)
AddHandler cMenScreen.Click, AddressOf cMenConnectionPanelScreen_Click
cMenScreens.DropDownItems.Add(cMenScreen)
Next
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't enumerate screens" & vbNewLine & ex.Message)
End Try
End Sub
Private Shared Sub cMenConnectionPanelScreen_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Try
Dim screen As Screen = TryCast(sender, ToolStripMenuItem).Tag(0)
Dim panel As DockContent = TryCast(sender, ToolStripMenuItem).Tag(1)
Screens.SendPanelToScreen(panel, screen)
Catch ex As Exception
End Try
End Sub
#End Region
#Region "Credential Loading/Saving"
Public Shared Sub LoadCredentials()
End Sub
#End Region
#Region "Connections Loading/Saving"
Public Shared Sub NewConnections()
Try
cL = New Connection.List
ctL = New Container.List
Dim conL As New Config.Connections.Load
If File.Exists(App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile) = False Then
If Directory.Exists(App.Info.Connections.DefaultConnectionsPath) = False Then
Directory.CreateDirectory(App.Info.Connections.DefaultConnectionsPath)
End If
File.Copy(My.Application.Info.DirectoryPath & "\" & App.Info.Connections.DefaultConnectionsFileNew, App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile)
conL.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile
My.Settings.LoadConsFromCustomLocation = False
Else
Dim lD As SaveFileDialog = Tools.Controls.ConnectionsSaveAsDialog
If lD.ShowDialog = System.Windows.Forms.DialogResult.OK Then
File.Copy(My.Application.Info.DirectoryPath & "\" & App.Info.Connections.DefaultConnectionsFileNew, lD.FileName, True)
conL.ConnectionFileName = lD.FileName
If conL.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile Then
My.Settings.LoadConsFromCustomLocation = False
Else
My.Settings.LoadConsFromCustomLocation = True
My.Settings.CustomConsPath = conL.ConnectionFileName
End If
Else
Exit Sub
End If
End If
conL.ConnectionList = cL
conL.ContainerList = ctL
conL.Import = False
Tree.Node.ResetTree()
conL.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
conL.Load()
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't create new connections file" & vbNewLine & ex.Message)
End Try
End Sub
Private Shared Sub LoadConnectionsBG(Optional ByVal WithDialog As Boolean = False, Optional ByVal Update As Boolean = False)
_WithDialog = False
_LoadUpdate = True
Dim t As New Thread(AddressOf LoadConnectionsBGd)
t.Start()
End Sub
Private Shared _WithDialog As Boolean = False
Private Shared _LoadUpdate As Boolean = False
Private Shared Sub LoadConnectionsBGd()
LoadConnections(_WithDialog, _LoadUpdate)
End Sub
Public Shared Sub LoadConnections(Optional ByVal WithDialog As Boolean = False, Optional ByVal Update As Boolean = False)
Try
Dim tmrWasEnabled As Boolean
If tmrSqlWatcher IsNot Nothing Then
tmrWasEnabled = tmrSqlWatcher.Enabled
If tmrSqlWatcher.Enabled = True Then
tmrSqlWatcher.Stop()
End If
End If
If cL IsNot Nothing And ctL IsNot Nothing Then
prevCL = cL.Copy
prevCTL = ctL.Copy
End If
cL = New Connection.List
ctL = New Container.List
Dim conL As New Config.Connections.Load
If My.Settings.UseSQLServer = False Then
If WithDialog Then
Dim lD As OpenFileDialog = Tools.Controls.ConnectionsLoadDialog
If lD.ShowDialog = System.Windows.Forms.DialogResult.OK Then
conL.ConnectionFileName = lD.FileName
If conL.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile Then
My.Settings.LoadConsFromCustomLocation = False
Else
My.Settings.LoadConsFromCustomLocation = True
My.Settings.CustomConsPath = conL.ConnectionFileName
End If
Else
Exit Sub
End If
Else
If My.Settings.LoadConsFromCustomLocation = False Then
conL.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile
Else
conL.ConnectionFileName = My.Settings.CustomConsPath
End If
End If
If File.Exists(conL.ConnectionFileName) = False Then
If WithDialog Then
mC.AddMessage(Messages.MessageClass.WarningMsg, "Connections file could not be loaded!" & vbNewLine & "Location was: " & conL.ConnectionFileName)
Else
mC.AddMessage(Messages.MessageClass.InformationMsg, "Connections file could not be loaded!" & vbNewLine & "Location was: " & conL.ConnectionFileName & vbNewLine & "Starting with new connections file.")
App.Runtime.NewConnections()
End If
Exit Sub
End If
Try
If App.Editions.Spanlink.Enabled = False Then
File.Copy(conL.ConnectionFileName, conL.ConnectionFileName & "_BAK", True)
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.WarningMsg, "Couldn't create backup of connections file" & vbNewLine & vbNewLine & ex.Message)
End Try
End If
conL.ConnectionList = cL
conL.ContainerList = ctL
If prevCL IsNot Nothing And prevCTL IsNot Nothing Then
conL.PreviousConnectionList = prevCL
conL.PreviousContainerList = prevCTL
End If
If Update = True Then
conL.PreviousSelected = LastSelected
End If
conL.Import = False
Tree.Node.ResetTree()
conL.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
conL.UseSQL = My.Settings.UseSQLServer
conL.SQLHost = My.Settings.SQLHost
conL.SQLUsername = My.Settings.SQLUser
conL.SQLPassword = Security.Crypt.Decrypt(My.Settings.SQLPass, App.Info.General.EncryptionKey)
conL.SQLUpdate = Update
conL.Load()
If My.Settings.UseSQLServer = True Then
LastSQLUpdate = Now
End If
If tmrWasEnabled And tmrSqlWatcher IsNot Nothing Then
tmrSqlWatcher.Start()
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't load connections file" & vbNewLine & ex.Message)
End Try
End Sub
Public Shared Sub ImportConnections()
Try
Dim lD As OpenFileDialog = Tools.Controls.ConnectionsLoadDialog
lD.Multiselect = True
If lD.ShowDialog = DialogResult.OK Then
Dim nNode As TreeNode = Nothing
For i As Integer = 0 To lD.FileNames.Length - 1
nNode = Tree.Node.AddNode(Tree.Node.Type.Container, "Import #" & i)
Dim nContI As New mRemote.Container.Info()
nContI.TreeNode = nNode
nContI.ConnectionInfo = New mRemote.Connection.Info(nContI)
If Tree.Node.SelectedNode IsNot Nothing Then
If Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.Container Then
nContI.Parent = Tree.Node.SelectedNode.Tag
End If
End If
nNode.Tag = nContI
ctL.Add(nContI)
Dim conL As New Config.Connections.Load
conL.ConnectionFileName = lD.FileNames(i)
conL.RootTreeNode = nNode
conL.Import = True
conL.ConnectionList = App.Runtime.cL
conL.ContainerList = App.Runtime.ctL
conL.Load()
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode)
Next
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't import connections file" & vbNewLine & ex.Message)
End Try
End Sub
Public Shared Sub ImportConnectionsFromRDPFiles()
Try
Dim lD As OpenFileDialog = Tools.Controls.ConnectionsRDPImportDialog
lD.Multiselect = True
If lD.ShowDialog = DialogResult.OK Then
For i As Integer = 0 To lD.FileNames.Length - 1
Dim lines As String() = File.ReadAllLines(lD.FileNames(i))
Dim nNode As TreeNode = Tree.Node.AddNode(Tree.Node.Type.Connection, Path.GetFileNameWithoutExtension(lD.FileNames(i)))
Dim nConI As New mRemote.Connection.Info()
nConI.Inherit = New Connection.Info.Inheritance(nConI)
nConI.Name = nNode.Text
For Each l As String In lines
Dim pName As String = l.Substring(0, l.IndexOf(":"))
Dim pValue As String = l.Substring(l.LastIndexOf(":") + 1)
Select Case LCase(pName)
Case "full address"
nConI.Hostname = pValue
Case "server port"
nConI.Port = pValue
Case "username"
nConI.Username = pValue
Case "domain"
nConI.Domain = pValue
Case "session bpp"
Select Case pValue
Case 8
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors256
Case 16
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors16Bit
Case 24
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors24Bit
Case 32
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors32Bit
End Select
Case "bitmapcachepersistenable"
If pValue = 1 Then
nConI.CacheBitmaps = True
Else
nConI.CacheBitmaps = False
End If
Case "screen mode id"
If pValue = 2 Then
nConI.Resolution = Connection.Protocol.RDP.RDPResolutions.Fullscreen
Else
nConI.Resolution = Connection.Protocol.RDP.RDPResolutions.FitToWindow
End If
Case "connect to console"
If pValue = 1 Then
nConI.UseConsoleSession = True
End If
Case "disable wallpaper"
If pValue = 1 Then
nConI.DisplayWallpaper = True
Else
nConI.DisplayWallpaper = False
End If
Case "disable themes"
If pValue = 1 Then
nConI.DisplayThemes = True
Else
nConI.DisplayThemes = False
End If
Case "redirectsmartcards"
If pValue = 1 Then
nConI.RedirectSmartCards = True
Else
nConI.RedirectSmartCards = False
End If
Case "redirectdrives"
If pValue = 1 Then
nConI.RedirectDiskDrives = True
Else
nConI.RedirectDiskDrives = False
End If
Case "redirectcomports"
If pValue = 1 Then
nConI.RedirectPorts = True
Else
nConI.RedirectPorts = False
End If
Case "redirectprinters"
If pValue = 1 Then
nConI.RedirectPrinters = True
Else
nConI.RedirectPrinters = False
End If
Case "audiomode"
Select Case pValue
Case 0
nConI.RedirectSound = Connection.Protocol.RDP.RDPSounds.BringToThisComputer
Case 1
nConI.RedirectSound = Connection.Protocol.RDP.RDPSounds.LeaveAtRemoteComputer
Case 2
nConI.RedirectSound = Connection.Protocol.RDP.RDPSounds.DoNotPlay
End Select
End Select
Next
nNode.Tag = nConI
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode)
If Tree.Node.GetNodeType(nNode.Parent) = Tree.Node.Type.Container Then
nConI.Parent = nNode.Parent.Tag
End If
cL.Add(nConI)
Next
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't import rdp file" & vbNewLine & vbNewLine & ex.Message)
End Try
End Sub
Public Shared Sub ImportConnectionsFromPortScan(ByVal Hosts As ArrayList, ByVal Protocol As mRemote.Connection.Protocol.Protocols)
For Each Host As Tools.PortScan.ScanHost In Hosts
Dim finalProt As mRemote.Connection.Protocol.Protocols
Dim protOK As Boolean = False
Dim nNode As TreeNode = Tree.Node.AddNode(Tree.Node.Type.Connection, Host.HostNameWithoutDomain)
Dim nConI As New mRemote.Connection.Info()
nConI.Inherit = New Connection.Info.Inheritance(nConI)
nConI.Name = Host.HostNameWithoutDomain
nConI.Hostname = Host.HostName
Select Case Protocol
Case Connection.Protocol.Protocols.SSH2
If Host.SSH Then
finalProt = Connection.Protocol.Protocols.SSH2
protOK = True
End If
Case Connection.Protocol.Protocols.Telnet
If Host.Telnet Then
finalProt = Connection.Protocol.Protocols.Telnet
protOK = True
End If
Case Connection.Protocol.Protocols.HTTP
If Host.HTTP Then
finalProt = Connection.Protocol.Protocols.HTTP
protOK = True
End If
Case Connection.Protocol.Protocols.HTTPS
If Host.HTTPS Then
finalProt = Connection.Protocol.Protocols.HTTPS
protOK = True
End If
Case Connection.Protocol.Protocols.Rlogin
If Host.Rlogin Then
finalProt = Connection.Protocol.Protocols.Rlogin
protOK = True
End If
Case Connection.Protocol.Protocols.RDP
If Host.RDP Then
finalProt = Connection.Protocol.Protocols.RDP
protOK = True
End If
Case Connection.Protocol.Protocols.VNC
If Host.VNC Then
finalProt = Connection.Protocol.Protocols.VNC
protOK = True
End If
End Select
If protOK = False Then
nConI = Nothing
Else
nConI.Protocol = finalProt
nConI.SetDefaultPort()
nNode.Tag = nConI
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode)
If Tree.Node.GetNodeType(nNode.Parent) = Tree.Node.Type.Container Then
nConI.Parent = nNode.Parent.Tag
End If
cL.Add(nConI)
End If
Next
End Sub
Public Shared Sub ImportConnectionsFromCSV()
End Sub
Public Shared Sub SaveConnectionsBG()
_SaveUpdate = True
Dim t As New Thread(AddressOf SaveConnectionsBGd)
t.Start()
End Sub
Private Shared _SaveUpdate As Boolean = False
Private Shared _SaveLock As Object = New Object
Private Shared Sub SaveConnectionsBGd()
Monitor.Enter(_SaveLock)
SaveConnections(_SaveUpdate)
Monitor.Exit(_SaveLock)
End Sub
Public Shared Sub SaveConnections(Optional ByVal Update As Boolean = False)
Try
If Update = True And My.Settings.UseSQLServer = False Then
Exit Sub
End If
Dim tmrWasEnabled As Boolean
If tmrSqlWatcher IsNot Nothing Then
tmrWasEnabled = tmrSqlWatcher.Enabled
If tmrSqlWatcher.Enabled = True Then
tmrSqlWatcher.Stop()
End If
End If
Dim conS As New Config.Connections.Save
If My.Settings.UseSQLServer = False Then
If My.Settings.LoadConsFromCustomLocation = False Then
conS.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile
Else
conS.ConnectionFileName = My.Settings.CustomConsPath
End If
End If
conS.ConnectionList = cL
conS.ContainerList = ctL
conS.Export = False
conS.SaveSecurity = New Security.Save(False)
conS.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
If My.Settings.UseSQLServer = True Then
conS.SaveFormat = Config.Connections.Save.Format.SQL
conS.SQLHost = My.Settings.SQLHost
conS.SQLUsername = My.Settings.SQLUser
conS.SQLPassword = Security.Crypt.Decrypt(My.Settings.SQLPass, App.Info.General.EncryptionKey)
End If
conS.Save()
If My.Settings.UseSQLServer = True Then
LastSQLUpdate = Now
End If
If tmrWasEnabled Then
tmrSqlWatcher.Start()
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't save connections file" & vbNewLine & ex.Message)
End Try
End Sub
Public Shared Sub SaveConnectionsAs(ByVal SaveSecurity As Security.Save, ByVal RootNode As TreeNode)
Try
Dim tmrWasEnabled As Boolean
If tmrSqlWatcher IsNot Nothing Then
tmrWasEnabled = tmrSqlWatcher.Enabled
If tmrSqlWatcher.Enabled = True Then
tmrSqlWatcher.Stop()
End If
End If
Dim conS As New Config.Connections.Save
Dim sD As SaveFileDialog = Tools.Controls.ConnectionsSaveAsDialog
If sD.ShowDialog = System.Windows.Forms.DialogResult.OK Then
conS.ConnectionFileName = sD.FileName
Else
Exit Sub
End If
Select Case sD.FilterIndex
Case 1
conS.SaveFormat = Config.Connections.Save.Format.mRXML
Case 2
conS.SaveFormat = Config.Connections.Save.Format.mRCSV
Case 3
conS.SaveFormat = Config.Connections.Save.Format.vRDCSV
End Select
If RootNode Is Windows.treeForm.tvConnections.Nodes(0) Then
If conS.SaveFormat <> Config.Connections.Save.Format.mRXML And conS.SaveFormat <> Config.Connections.Save.Format.None Then
Else
If conS.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile Then
My.Settings.LoadConsFromCustomLocation = False
Else
My.Settings.LoadConsFromCustomLocation = True
My.Settings.CustomConsPath = conS.ConnectionFileName
End If
End If
End If
conS.ConnectionList = cL
conS.ContainerList = ctL
If RootNode IsNot Windows.treeForm.tvConnections.Nodes(0) Then
conS.Export = True
End If
conS.SaveSecurity = SaveSecurity
conS.RootTreeNode = RootNode
conS.Save()
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't save connections file as" & vbNewLine & ex.Message)
End Try
End Sub
#End Region
#Region "Opening Connection"
Private Shared nProt As Connection.Protocol.Base
Private Shared nCi As Connection.Info
Public Shared Function CreateQuicky(ByVal ConString As String, Optional ByVal Protocol As Connection.Protocol.Protocols = Connection.Protocol.Protocols.NONE) As Connection.Info
Try
nCi = New Connection.Info
If Protocol <> Connection.Protocol.Protocols.NONE Then
nCi.Protocol = Protocol
End If
Dim qConS() As String = Split(ConString, ":")
Dim qHost As String = ""
Dim qPort As Integer = 0
For i As Integer = 0 To qConS.Length - 1
If i = 0 Then
qHost = qConS(i)
End If
If i = 1 Then
Try
qPort = Int(qConS(i))
Catch ex As Exception
qHost += ":" & qConS(i)
End Try
End If
If i = 2 Then
Try
qPort = Int(qConS(i))
Catch ex As Exception
End Try
End If
Next
If qHost <> "" Then
nCi.Name = "Quick: " & qHost
nCi.Hostname = qHost
nCi.Port = qPort
nCi.IsQuicky = True
Windows.quickyForm.ConnectionInfo = nCi
If Protocol = Connection.Protocol.Protocols.NONE Then
Windows.quickyPanel.Show(frmMain.pnlDock, DockState.DockBottomAutoHide)
Else
End If
Return nCi
Else
'--------
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Creating quick connect failed" & vbNewLine & ex.Message)
End Try
Return Nothing
End Function
Public Shared Sub OpenConnection()
Try
OpenConnection(Connection.Info.Force.None)
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
End Try
End Sub
Public Shared Sub OpenConnection(ByVal Force As mRemote.Connection.Info.Force)
Try
If Windows.treeForm.tvConnections.SelectedNode.Tag Is Nothing Then
Exit Sub
End If
If Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.Connection Then
OpenConnection(Windows.treeForm.tvConnections.SelectedNode.Tag, Force)
ElseIf Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.Container Then
For Each tNode As TreeNode In Tree.Node.SelectedNode.Nodes
If Tree.Node.GetNodeType(tNode) = Tree.Node.Type.Connection Then
If tNode.Tag IsNot Nothing Then
OpenConnection(tNode.Tag, Force)
End If
End If
Next
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
End Try
End Sub
Public Shared Sub OpenConnection(ByVal ConnectionInfo As mRemote.Connection.Info)
Try
OpenConnection(ConnectionInfo, Connection.Info.Force.None)
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
End Try
End Sub
Public Shared Sub OpenConnection(ByVal ConnectionInfo As mRemote.Connection.Info, ByVal ConnectionForm As Form)
Try
OpenConnectionFinal(ConnectionInfo, Connection.Info.Force.None, ConnectionForm)
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
End Try
End Sub
Public Shared Sub OpenConnection(ByVal ConnectionInfo As mRemote.Connection.Info, ByVal ConnectionForm As Form, ByVal Force As Connection.Info.Force)
Try
OpenConnectionFinal(ConnectionInfo, Force, ConnectionForm)
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
End Try
End Sub
Public Shared Sub OpenConnection(ByVal ConnectionInfo As mRemote.Connection.Info, ByVal Force As mRemote.Connection.Info.Force)
Try
OpenConnectionFinal(ConnectionInfo, Force, Nothing)
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
End Try
End Sub
Private Shared Sub OpenConnectionFinal(ByVal nCi As mRemote.Connection.Info, ByVal Force As mRemote.Connection.Info.Force, ByVal ConForm As Form)
Try
If nCi.Hostname = "" And nCi.Protocol <> Connection.Protocol.Protocols.IntApp Then
mC.AddMessage(Messages.MessageClass.WarningMsg, "Cannot open connection: No hostname specified")
Exit Sub
End If
If nCi.PreExtApp <> "" Then
Dim extA As Tools.ExternalApp = App.Runtime.GetExtAppByName(nCi.PreExtApp)
If extA IsNot Nothing Then
extA.Start(nCi)
End If
End If
If (Force And Connection.Info.Force.DoNotJump) <> Connection.Info.Force.DoNotJump Then
If SwitchToOpenConnection(nCi) Then
Exit Sub
End If
End If
Select Case nCi.Protocol
Case Connection.Protocol.Protocols.RDP
nProt = New Connection.Protocol.RDP
Case Connection.Protocol.Protocols.VNC
nProt = New Connection.Protocol.VNC
Case Connection.Protocol.Protocols.SSH1
nProt = New Connection.Protocol.SSH1
Case Connection.Protocol.Protocols.SSH2
nProt = New Connection.Protocol.SSH2
Case Connection.Protocol.Protocols.Telnet
nProt = New Connection.Protocol.Telnet
Case Connection.Protocol.Protocols.Rlogin
nProt = New Connection.Protocol.Rlogin
Case Connection.Protocol.Protocols.RAW
nProt = New Connection.Protocol.RAW
Case Connection.Protocol.Protocols.HTTP
nProt = New Connection.Protocol.HTTP(nCi.RenderingEngine)
Case Connection.Protocol.Protocols.HTTPS
nProt = New Connection.Protocol.HTTPS(nCi.RenderingEngine)
Case Connection.Protocol.Protocols.ICA
nProt = New Connection.Protocol.ICA
Case Connection.Protocol.Protocols.IntApp
nProt = New Connection.Protocol.IntApp
If nCi.ExtApp = "" Then
Throw New Exception("No Ext. App specified.")
End If
Case Else
Exit Sub
End Select
Dim cContainer As Control
Dim cForm As Form
Dim cPnl As String
If nCi.Panel = "" Or (Force And Connection.Info.Force.OverridePanel) = Connection.Info.Force.OverridePanel Or My.Settings.AlwaysShowPanelSelectionDlg Then
Dim frmPnl As New frmChoosePanel
If frmPnl.ShowDialog = DialogResult.OK Then
cPnl = frmPnl.Panel
Else
Exit Sub
End If
Else
cPnl = nCi.Panel
End If
If ConForm Is Nothing Then
cForm = wL.FromString(cPnl)
Else
cForm = ConForm
End If
If cForm Is Nothing Then
cForm = AddPanel(cPnl)
cForm.Focus()
Else
TryCast(cForm, UI.Window.Connection).Show(frmMain.pnlDock)
TryCast(cForm, UI.Window.Connection).Focus()
End If
cContainer = TryCast(cForm, UI.Window.Connection).AddConnectionTab(nCi)
If nCi.Protocol = Connection.Protocol.Protocols.IntApp Then
If App.Runtime.GetExtAppByName(nCi.ExtApp).Icon IsNot Nothing Then
TryCast(cContainer, Magic.Controls.TabPage).Icon = App.Runtime.GetExtAppByName(nCi.ExtApp).Icon
End If
End If
AddHandler nProt.Closed, AddressOf TryCast(cForm, UI.Window.Connection).Prot_Event_Closed
AddHandler nProt.Disconnected, AddressOf Prot_Event_Disconnected
AddHandler nProt.Connected, AddressOf Prot_Event_Connected
AddHandler nProt.Closed, AddressOf Prot_Event_Closed
AddHandler nProt.ErrorOccured, AddressOf Prot_Event_ErrorOccured
nProt.InterfaceControl = New Connection.InterfaceControl(cContainer, nProt, nCi)
nProt.Force = Force
If nProt.SetProps() = False Then
nProt.Close()
Exit Sub
End If
If nProt.Connect() = False Then
nProt.Close()
Exit Sub
End If
nCi.OpenConnections.Add(nProt)
If nCi.IsQuicky = False Then
If nCi.Protocol <> Connection.Protocol.Protocols.IntApp Then
Tree.Node.SetNodeImage(nCi.TreeNode, Images.Enums.TreeImage.ConnectionOpen)
Else
Dim extApp As Tools.ExternalApp = GetExtAppByName(nCi.ExtApp)
If extApp IsNot Nothing Then
If extApp.TryIntegrate Then
If nCi.TreeNode IsNot Nothing Then
Tree.Node.SetNodeImage(nCi.TreeNode, Images.Enums.TreeImage.ConnectionOpen)
End If
End If
End If
End If
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
End Try
End Sub
Public Shared Function SwitchToOpenConnection(ByVal nCi As Connection.Info) As Boolean
Dim IC As mRemote.Connection.InterfaceControl = FindConnectionContainer(nCi)
If IC IsNot Nothing Then
TryCast(IC.FindForm, UI.Window.Connection).Focus()
TryCast(IC.FindForm, UI.Window.Connection).Show(frmMain.pnlDock)
Dim t As Magic.Controls.TabPage = IC.Parent
t.Selected = True
Return True
End If
Return False
End Function
#End Region
#Region "Event Handlers"
Public Shared Sub Prot_Event_Disconnected(ByVal sender As Object, ByVal DisconnectedMessage As String)
Try
mC.AddMessage(Messages.MessageClass.InformationMsg, "Protocol Event Disconnected" & vbNewLine & "Message: " & DisconnectedMessage, True)
Dim Prot As Connection.Protocol.Base = sender
If Prot.InterfaceControl.Info.Protocol = Connection.Protocol.Protocols.RDP Then
If DisconnectedMessage > 3 Then
mC.AddMessage(Messages.MessageClass.WarningMsg, "RDP Disconnected!" & vbNewLine & "Error Code: " & DisconnectedMessage & vbNewLine & "Error Description: " & Connection.Protocol.RDP.DisconnectionErrors.GetError(DisconnectedMessage))
End If
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Protocol Event Disconnected failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Public Shared Sub Prot_Event_Closed(ByVal sender As Object)
Try
Dim Prot As Connection.Protocol.Base = sender
mC.AddMessage(Messages.MessageClass.InformationMsg, "Protocol Event Closed", True)
If App.Editions.Spanlink.Enabled Then
mC.AddMessage(Messages.MessageClass.ReportMsg, "Connection to " & Prot.InterfaceControl.Info.Hostname & " via " & Prot.InterfaceControl.Info.Protocol.ToString & " closed by user " & My.User.Name & " (Description: " & Prot.InterfaceControl.Info.Description & "; User Field: " & Prot.InterfaceControl.Info.UserField & ")")
Else
mC.AddMessage(Messages.MessageClass.ReportMsg, "Connection to " & Prot.InterfaceControl.Info.Hostname & " via " & Prot.InterfaceControl.Info.Protocol.ToString & " closed by user " & My.User.Name)
End If
Prot.InterfaceControl.Info.OpenConnections.Remove(Prot)
If Prot.InterfaceControl.Info.OpenConnections.Count < 1 And Prot.InterfaceControl.Info.IsQuicky = False Then
Tree.Node.SetNodeImage(Prot.InterfaceControl.Info.TreeNode, Images.Enums.TreeImage.ConnectionClosed)
End If
If Prot.InterfaceControl.Info.PostExtApp <> "" Then
Dim extA As Tools.ExternalApp = App.Runtime.GetExtAppByName(Prot.InterfaceControl.Info.PostExtApp)
If extA IsNot Nothing Then
extA.Start(Prot.InterfaceControl.Info)
End If
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Protocol Event Closed failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Public Shared Sub Prot_Event_Connected(ByVal sender As Object)
Dim prot As mRemote.Connection.Protocol.Base = sender
mC.AddMessage(Messages.MessageClass.InformationMsg, "Protocol Event Connected", True)
mC.AddMessage(Messages.MessageClass.ReportMsg, "Connection to " & prot.InterfaceControl.Info.Hostname & " via " & prot.InterfaceControl.Info.Protocol.ToString & " established by user " & My.User.Name & " (Description: " & prot.InterfaceControl.Info.Description & "; User Field: " & prot.InterfaceControl.Info.UserField & ")")
End Sub
Public Shared Sub Prot_Event_ErrorOccured(ByVal sender As Object, ByVal ErrorMessage As String)
Try
mC.AddMessage(Messages.MessageClass.InformationMsg, "Protocol Event ErrorOccured", True)
Dim Prot As Connection.Protocol.Base = sender
If Prot.InterfaceControl.Info.Protocol = Connection.Protocol.Protocols.RDP Then
If ErrorMessage > -1 Then
mC.AddMessage(Messages.MessageClass.WarningMsg, "RDP Error!" & vbNewLine & "Error Code: " & ErrorMessage & vbNewLine & "Error Description: " & Connection.Protocol.RDP.FatalErrors.GetError(ErrorMessage))
End If
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Protocol Event ErrorOccured failed" & vbNewLine & ex.Message, True)
End Try
End Sub
#End Region
#Region "External Apps"
Public Shared Sub GetExtApps()
Array.Clear(Tools.ExternalAppsTypeConverter.ExternalApps, 0, Tools.ExternalAppsTypeConverter.ExternalApps.Length)
Array.Resize(Tools.ExternalAppsTypeConverter.ExternalApps, ExtApps.Count + 1)
Dim i As Integer = 0
For Each extA As Tools.ExternalApp In ExtApps
Tools.ExternalAppsTypeConverter.ExternalApps(i) = extA.DisplayName
i += 1
Next
Tools.ExternalAppsTypeConverter.ExternalApps(i) = ""
End Sub
Public Shared Function GetExtAppByName(ByVal Name As String) As Tools.ExternalApp
For Each extA As Tools.ExternalApp In ExtApps
If extA.DisplayName = Name Then
Return extA
End If
Next
Return Nothing
End Function
#End Region
#Region "Misc"
Public Shared Sub GoToURL(ByVal URL As String)
Dim cI As New mRemote.Connection.Info
cI.Name = "Website"
cI.Hostname = URL
If URL.StartsWith("https:") Then
cI.Protocol = Connection.Protocol.Protocols.HTTPS
Else
cI.Protocol = Connection.Protocol.Protocols.HTTP
End If
cI.SetDefaultPort()
cI.IsQuicky = True
App.Runtime.OpenConnection(cI, mRemote.Connection.Info.Force.DoNotJump)
End Sub
Public Shared Sub GoToWebsite()
GoToURL(App.Info.General.URLHome)
End Sub
Public Shared Sub GoToDonate()
GoToURL(App.Info.General.URLDonate)
End Sub
Public Shared Sub GoToForum()
GoToURL(App.Info.General.URLForum)
End Sub
Public Shared Sub GoToBugs()
GoToURL(App.Info.General.URLBugs)
End Sub
Public Shared Sub Report(ByVal Text As String)
Try
Dim sWr As New StreamWriter(My.Application.Info.DirectoryPath & "\Report.log", True)
sWr.WriteLine(Text)
sWr.Close()
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Writing to report file failed!")
End Try
End Sub
Public Shared Function SaveReport() As Boolean
Try
Dim sRd As New StreamReader(My.Application.Info.DirectoryPath & "\Report.log")
Dim Text As String = sRd.ReadToEnd
sRd.Close()
Dim sWr As New StreamWriter(App.Info.General.ReportingFilePath, True)
sWr.Write(Text)
sWr.Close()
Return True
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't save report to final location. (App.Runtime.SaveReport)" & vbNewLine & ex.Message, True)
Return False
End Try
End Function
Public Shared Sub SetMainFormText(Optional ByVal ConnectionFileName As String = "")
Try
Dim txt As String = "mRemoteNG"
If App.Editions.Spanlink.Enabled Then
txt &= " | Spanlink Communications"
Else
If ConnectionFileName <> "" And ConnectionsFileLoaded = True Then
If My.Settings.ShowCompleteConsPathInTitle Then
txt &= " - " & ConnectionFileName
Else
txt &= " - " & ConnectionFileName.Substring(ConnectionFileName.LastIndexOf("\") + 1)
End If
End If
End If
ChangeMainFormText(txt)
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Setting main form text failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Delegate Sub ChangeMainFormTextCB(ByVal Text As String)
Private Shared Sub ChangeMainFormText(ByVal Text As String)
If frmMain.InvokeRequired = True Then
Dim d As New ChangeMainFormTextCB(AddressOf ChangeMainFormText)
frmMain.Invoke(d, New Object() {Text})
Else
frmMain.Text = Text
End If
End Sub
Public Shared Function FindConnectionContainer(ByVal ConI As Connection.Info) As Connection.InterfaceControl
If ConI.OpenConnections.Count > 0 Then
For i As Integer = 0 To wL.Count - 1
If TypeOf wL.Items(i) Is UI.Window.Connection Then
Dim conW As UI.Window.Connection = wL.Items(i)
If conW.TabController IsNot Nothing Then
For Each t As Magic.Controls.TabPage In conW.TabController.TabPages
If t.Controls(0) IsNot Nothing Then
If TypeOf t.Controls(0) Is Connection.InterfaceControl Then
Dim IC As Connection.InterfaceControl = t.Controls(0)
If IC.Info Is ConI Then
Return IC
End If
End If
End If
Next
End If
End If
Next
End If
Return Nothing
End Function
' Override the font of all controls in a container with the default font based on the OS version
Public Shared Sub FontOverride(ByRef ctlParent As Control)
Dim ctlChild As Control
For Each ctlChild In ctlParent.Controls
ctlChild.Font = New System.Drawing.Font(SystemFonts.MessageBoxFont.Name, ctlChild.Font.Size, ctlChild.Font.Style, ctlChild.Font.Unit, ctlChild.Font.GdiCharSet)
If ctlChild.Controls.Count > 0 Then
FontOverride(ctlChild)
End If
Next
End Sub
#End Region
#Region "SQL Watcher"
Private Shared Sub tmrSqlWatcher_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles tmrSqlWatcher.Elapsed
Tools.Misc.IsSQLUpdateAvailableBG()
End Sub
Private Shared Sub SQLUpdateCheckFinished(ByVal UpdateAvailable As Boolean)
If UpdateAvailable = True Then
mC.AddMessage(Messages.MessageClass.InformationMsg, "SQL Update check finished and there is an update available! Going to refresh connections.", True)
LoadConnectionsBG()
End If
End Sub
#End Region
End Class
End Namespace
Jump to Line
Something went wrong with that request. Please try again.