Files
mRemoteNG/mRemoteV1/Config/Config.Connections.Load.vb
Andreas Rehm ccebf41645 Changed/Fixed language based data
* Fixed some german grammer mistakes
* Changed some weird translations
* moved all language strings to resx files
* added missing translations
* removed old language classes
2010-08-01 01:12:29 +08:00

1040 lines
52 KiB
VB.net

Imports System.Windows.Forms
Imports System.Xml
Imports mRemote.App.Runtime
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Namespace Config
Namespace Connections
Public Class Load
#Region "Private Properties"
Private xDom As XmlDocument
Private confVersion As Double
Private pW As String = App.Info.General.EncryptionKey
Private sqlCon As SqlConnection
Private sqlQuery As SqlCommand
Private sqlRd As SqlDataReader
Private sqlDB As String = "mRemote"
Private selNode As TreeNode
#End Region
#Region "Public Properties"
Private _UseSQL As Boolean
Public Property UseSQL() As Boolean
Get
Return _UseSQL
End Get
Set(ByVal value As Boolean)
_UseSQL = value
End Set
End Property
Private _SQLHost As String
Public Property SQLHost() As String
Get
Return _SQLHost
End Get
Set(ByVal value As String)
_SQLHost = value
End Set
End Property
Private _SQLUsername As String
Public Property SQLUsername() As String
Get
Return _SQLUsername
End Get
Set(ByVal value As String)
_SQLUsername = value
End Set
End Property
Private _SQLPassword As String
Public Property SQLPassword() As String
Get
Return _SQLPassword
End Get
Set(ByVal value As String)
_SQLPassword = value
End Set
End Property
Private _SQLUpdate As Boolean
Public Property SQLUpdate() As Boolean
Get
Return _SQLUpdate
End Get
Set(ByVal value As Boolean)
_SQLUpdate = value
End Set
End Property
Private _PreviousSelected As String
Public Property PreviousSelected() As String
Get
Return _PreviousSelected
End Get
Set(ByVal value As String)
_PreviousSelected = value
End Set
End Property
Private _ConnectionFileName As String
Public Property ConnectionFileName() As String
Get
Return Me._ConnectionFileName
End Get
Set(ByVal value As String)
Me._ConnectionFileName = value
End Set
End Property
Private _RootTreeNode As TreeNode
Public Property RootTreeNode() As TreeNode
Get
Return Me._RootTreeNode
End Get
Set(ByVal value As TreeNode)
Me._RootTreeNode = value
End Set
End Property
Private _Import As Boolean
Public Property Import() As Boolean
Get
Return Me._Import
End Get
Set(ByVal value As Boolean)
Me._Import = value
End Set
End Property
Private _ConnectionList As Connection.List
Public Property ConnectionList() As Connection.List
Get
Return Me._ConnectionList
End Get
Set(ByVal value As Connection.List)
Me._ConnectionList = value
End Set
End Property
Private _ContainerList As Container.List
Public Property ContainerList() As Container.List
Get
Return Me._ContainerList
End Get
Set(ByVal value As Container.List)
Me._ContainerList = value
End Set
End Property
Private _PreviousConnectionList As Connection.List
Public Property PreviousConnectionList() As Connection.List
Get
Return _PreviousConnectionList
End Get
Set(ByVal value As Connection.List)
_PreviousConnectionList = value
End Set
End Property
Private _PreviousContainerList As Container.List
Public Property PreviousContainerList() As Container.List
Get
Return _PreviousContainerList
End Get
Set(ByVal value As Container.List)
_PreviousContainerList = value
End Set
End Property
#End Region
#Region "Public Methods"
Public Sub Load()
If _UseSQL = True Then
LoadFromSQL()
SetMainFormText("SQL Server")
Else
Dim strCons As String = DecryptCompleteFile()
LoadFromXML(strCons)
End If
If Import = False Then
SetMainFormText(ConnectionFileName)
End If
End Sub
#End Region
#Region "SQL"
Private Sub LoadFromSQL()
Try
App.Runtime.ConnectionsFileLoaded = False
If _SQLUsername <> "" Then
sqlCon = New SqlConnection("Data Source=" & _SQLHost & ";Initial Catalog=" & sqlDB & ";User Id=" & _SQLUsername & ";Password=" & _SQLPassword)
Else
sqlCon = New SqlConnection("Data Source=" & _SQLHost & ";Initial Catalog=" & sqlDB & ";Integrated Security=True")
End If
sqlCon.Open()
sqlQuery = New SqlCommand("SELECT * FROM tblRoot", sqlCon)
sqlRd = sqlQuery.ExecuteReader(CommandBehavior.CloseConnection)
sqlRd.Read()
If sqlRd.HasRows = False Then
App.Runtime.SaveConnections()
sqlQuery = New SqlCommand("SELECT * FROM tblRoot", sqlCon)
sqlRd = sqlQuery.ExecuteReader(CommandBehavior.CloseConnection)
sqlRd.Read()
End If
Dim originalCulture As System.Globalization.CultureInfo = My.Application.Culture
My.Application.ChangeCulture("en-US")
Me.confVersion = Convert.ToDouble(sqlRd.Item("confVersion"))
My.Application.ChangeCulture(originalCulture.ToString)
Dim rootNode As TreeNode
rootNode = New TreeNode(sqlRd.Item("Name"))
Dim rInfo As New Root.Info(Root.Info.RootType.Connection)
rInfo.Name = rootNode.Text
rInfo.TreeNode = rootNode
rootNode.Tag = rInfo
rootNode.ImageIndex = Images.Enums.TreeImage.Root
rootNode.SelectedImageIndex = Images.Enums.TreeImage.Root
If Security.Crypt.Decrypt(sqlRd.Item("Protected"), pW) <> "ThisIsNotProtected" Then
If Authenticate(sqlRd.Item("Protected"), False, rInfo) = False Then
My.Settings.LoadConsFromCustomLocation = False
My.Settings.CustomConsPath = ""
rootNode.Remove()
Exit Sub
End If
End If
'Me._RootTreeNode.Text = rootNode.Text
'Me._RootTreeNode.Tag = rootNode.Tag
'Me._RootTreeNode.ImageIndex = Images.Enums.TreeImage.Root
'Me._RootTreeNode.SelectedImageIndex = Images.Enums.TreeImage.Root
sqlRd.Close()
' SECTION 3. Populate the TreeView with the DOM nodes.
AddNodesFromSQL(rootNode)
'AddNodeFromXML(xDom.DocumentElement, Me._RootTreeNode)
rootNode.Expand()
'expand containers
For Each contI As Container.Info In Me._ContainerList
If contI.IsExpanded = True Then
contI.TreeNode.Expand()
End If
Next
'open connections from last mremote session
If My.Settings.OpenConsFromLastSession = True And My.Settings.NoReconnect = False Then
For Each conI As Connection.Info In Me._ConnectionList
If conI.PleaseConnect = True Then
App.Runtime.OpenConnection(conI)
End If
Next
End If
'Tree.Node.TreeView.Nodes.Clear()
'Tree.Node.TreeView.Nodes.Add(rootNode)
AddNodeToTree(rootNode)
SetSelectedNode(selNode)
App.Runtime.ConnectionsFileLoaded = True
'App.Runtime.Windows.treeForm.InitialRefresh()
sqlCon.Close()
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "LoadFromSQL failed (Config.Connections.Load)" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Delegate Sub AddNodeToTreeCB(ByVal TreeNode As TreeNode)
Private Sub AddNodeToTree(ByVal TreeNode As TreeNode)
If Tree.Node.TreeView.InvokeRequired Then
Dim d As New AddNodeToTreeCB(AddressOf AddNodeToTree)
App.Runtime.Windows.treeForm.Invoke(d, New Object() {TreeNode})
Else
App.Runtime.Windows.treeForm.tvConnections.Nodes.Clear()
App.Runtime.Windows.treeForm.tvConnections.Nodes.Add(TreeNode)
App.Runtime.Windows.treeForm.InitialRefresh()
End If
End Sub
Private Delegate Sub SetSelectedNodeCB(ByVal TreeNode As TreeNode)
Private Sub SetSelectedNode(ByVal TreeNode As TreeNode)
If Tree.Node.TreeView.InvokeRequired Then
Dim d As New SetSelectedNodeCB(AddressOf SetSelectedNode)
App.Runtime.Windows.treeForm.Invoke(d, New Object() {TreeNode})
Else
App.Runtime.Windows.treeForm.tvConnections.SelectedNode = TreeNode
End If
End Sub
Private Sub AddNodesFromSQL(ByVal baseNode As TreeNode)
Try
sqlCon.Open()
sqlQuery = New SqlCommand("SELECT * FROM tblCons ORDER BY PositionID ASC", sqlCon)
sqlRd = sqlQuery.ExecuteReader(CommandBehavior.CloseConnection)
If sqlRd.HasRows = False Then
Exit Sub
End If
Dim tNode As TreeNode
While sqlRd.Read
tNode = New TreeNode(sqlRd.Item("Name"))
'baseNode.Nodes.Add(tNode)
If Tree.Node.GetNodeTypeFromString(sqlRd.Item("Type")) = Tree.Node.Type.Connection Then
Dim conI As Connection.Info = GetConnectionInfoFromSQL()
conI.TreeNode = tNode
'conI.Parent = prevCont 'NEW
Me._ConnectionList.Add(conI)
tNode.Tag = conI
If SQLUpdate = True Then
Dim prevCon As Connection.Info = PreviousConnectionList.FindByConstantID(conI.ConstantID)
If prevCon IsNot Nothing Then
For Each prot As Connection.Protocol.Base In prevCon.OpenConnections
prot.InterfaceControl.Info = conI
conI.OpenConnections.Add(prot)
Next
If conI.OpenConnections.Count > 0 Then
tNode.ImageIndex = Images.Enums.TreeImage.ConnectionOpen
tNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionOpen
Else
tNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed
tNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed
End If
Else
tNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed
tNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed
End If
If conI.ConstantID = _PreviousSelected Then
selNode = tNode
End If
Else
tNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed
tNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed
End If
ElseIf Tree.Node.GetNodeTypeFromString(sqlRd.Item("Type")) = Tree.Node.Type.Container Then
Dim contI As New Container.Info
'If tNode.Parent IsNot Nothing Then
' If Tree.Node.GetNodeType(tNode.Parent) = Tree.Node.Type.Container Then
' contI.Parent = tNode.Parent.Tag
' End If
'End If
'prevCont = contI 'NEW
contI.TreeNode = tNode
contI.Name = sqlRd.Item("Name")
Dim conI As Connection.Info
conI = GetConnectionInfoFromSQL()
conI.Parent = contI
conI.IsContainer = True
contI.ConnectionInfo = conI
If SQLUpdate = True Then
Dim prevCont As Container.Info = PreviousContainerList.FindByConstantID(conI.ConstantID)
If prevCont IsNot Nothing Then
contI.IsExpanded = prevCont.IsExpanded
End If
If conI.ConstantID = _PreviousSelected Then
selNode = tNode
End If
Else
If sqlRd.Item("Expanded") = True Then
contI.IsExpanded = True
Else
contI.IsExpanded = False
End If
End If
Me._ContainerList.Add(contI)
Me._ConnectionList.Add(conI)
tNode.Tag = contI
tNode.ImageIndex = Images.Enums.TreeImage.Container
tNode.SelectedImageIndex = Images.Enums.TreeImage.Container
End If
If sqlRd.Item("ParentID") <> 0 Then
Dim pNode As TreeNode = Tree.Node.GetNodeFromConstantID(sqlRd.Item("ParentID"))
If pNode IsNot Nothing Then
pNode.Nodes.Add(tNode)
If Tree.Node.GetNodeType(tNode) = Tree.Node.Type.Connection Then
TryCast(tNode.Tag, Connection.Info).Parent = pNode.Tag
ElseIf Tree.Node.GetNodeType(tNode) = Tree.Node.Type.Container Then
TryCast(tNode.Tag, Container.Info).Parent = pNode.Tag
End If
Else
baseNode.Nodes.Add(tNode)
End If
Else
baseNode.Nodes.Add(tNode)
End If
'AddNodesFromSQL(tNode)
End While
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "AddNodesFromSQL failed (Config.Connections.Load)" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Function GetConnectionInfoFromSQL() As Connection.Info
Try
Dim conI As New Connection.Info
With sqlRd
conI.PositionID = .Item("PositionID")
conI.ConstantID = .Item("ConstantID")
conI.Name = .Item("Name")
conI.Description = .Item("Description")
conI.Hostname = .Item("Hostname")
conI.Username = .Item("Username")
conI.Password = Security.Crypt.Decrypt(.Item("Password"), pW)
conI.Domain = .Item("DomainName")
conI.DisplayWallpaper = .Item("DisplayWallpaper")
conI.DisplayThemes = .Item("DisplayThemes")
conI.CacheBitmaps = .Item("CacheBitmaps")
conI.UseConsoleSession = .Item("ConnectToConsole")
conI.RedirectDiskDrives = .Item("RedirectDiskDrives")
conI.RedirectPrinters = .Item("RedirectPrinters")
conI.RedirectPorts = .Item("RedirectPorts")
conI.RedirectSmartCards = .Item("RedirectSmartCards")
conI.RedirectKeys = .Item("RedirectKeys")
conI.RedirectSound = Tools.Misc.StringToEnum(GetType(Connection.Protocol.RDP.RDPSounds), .Item("RedirectSound"))
conI.Protocol = Tools.Misc.StringToEnum(GetType(Connection.Protocol.Protocols), .Item("Protocol"))
conI.Port = .Item("Port")
conI.PuttySession = .Item("PuttySession")
conI.Colors = .Item("Colors")
conI.Resolution = Tools.Misc.StringToEnum(GetType(Connection.Protocol.RDP.RDPResolutions), .Item("Resolution"))
conI.Inherit = New Connection.Info.Inheritance(conI)
conI.Inherit.CacheBitmaps = .Item("InheritCacheBitmaps")
conI.Inherit.Colors = .Item("InheritColors")
conI.Inherit.Description = .Item("InheritDescription")
conI.Inherit.DisplayThemes = .Item("InheritDisplayThemes")
conI.Inherit.DisplayWallpaper = .Item("InheritDisplayWallpaper")
conI.Inherit.Domain = .Item("InheritDomain")
conI.Inherit.Icon = .Item("InheritIcon")
conI.Inherit.Panel = .Item("InheritPanel")
conI.Inherit.Password = .Item("InheritPassword")
conI.Inherit.Port = .Item("InheritPort")
conI.Inherit.Protocol = .Item("InheritProtocol")
conI.Inherit.PuttySession = .Item("InheritPuttySession")
conI.Inherit.RedirectDiskDrives = .Item("InheritRedirectDiskDrives")
conI.Inherit.RedirectKeys = .Item("InheritRedirectKeys")
conI.Inherit.RedirectPorts = .Item("InheritRedirectPorts")
conI.Inherit.RedirectPrinters = .Item("InheritRedirectPrinters")
conI.Inherit.RedirectSmartCards = .Item("InheritRedirectSmartCards")
conI.Inherit.RedirectSound = .Item("InheritRedirectSound")
conI.Inherit.Resolution = .Item("InheritResolution")
conI.Inherit.UseConsoleSession = .Item("InheritUseConsoleSession")
conI.Inherit.Username = .Item("InheritUsername")
conI.Icon = .Item("Icon")
conI.Panel = .Item("Panel")
If Me.confVersion > 1.5 Then '1.6
conI.ICAEncryption = Tools.Misc.StringToEnum(GetType(Connection.Protocol.ICA.EncryptionStrength), .Item("ICAEncryptionStrength"))
conI.Inherit.ICAEncryption = .Item("InheritICAEncryptionStrength")
conI.PreExtApp = .Item("PreExtApp")
conI.PostExtApp = .Item("PostExtApp")
conI.Inherit.PreExtApp = .Item("InheritPreExtApp")
conI.Inherit.PostExtApp = .Item("InheritPostExtApp")
End If
If Me.confVersion > 1.6 Then '1.7
conI.VNCCompression = Tools.Misc.StringToEnum(GetType(Connection.Protocol.VNC.Compression), .Item("VNCCompression"))
conI.VNCEncoding = Tools.Misc.StringToEnum(GetType(Connection.Protocol.VNC.Encoding), .Item("VNCEncoding"))
conI.VNCAuthMode = Tools.Misc.StringToEnum(GetType(Connection.Protocol.VNC.AuthMode), .Item("VNCAuthMode"))
conI.VNCProxyType = Tools.Misc.StringToEnum(GetType(Connection.Protocol.VNC.ProxyType), .Item("VNCProxyType"))
conI.VNCProxyIP = .Item("VNCProxyIP")
conI.VNCProxyPort = .Item("VNCProxyPort")
conI.VNCProxyUsername = .Item("VNCProxyUsername")
conI.VNCProxyPassword = Security.Crypt.Decrypt(.Item("VNCProxyPassword"), pW)
conI.VNCColors = Tools.Misc.StringToEnum(GetType(Connection.Protocol.VNC.Colors), .Item("VNCColors"))
conI.VNCSmartSizeMode = Tools.Misc.StringToEnum(GetType(Connection.Protocol.VNC.SmartSizeMode), .Item("VNCSmartSizeMode"))
conI.VNCViewOnly = .Item("VNCViewOnly")
conI.Inherit.VNCCompression = .Item("InheritVNCCompression")
conI.Inherit.VNCEncoding = .Item("InheritVNCEncoding")
conI.Inherit.VNCAuthMode = .Item("InheritVNCAuthMode")
conI.Inherit.VNCProxyType = .Item("InheritVNCProxyType")
conI.Inherit.VNCProxyIP = .Item("InheritVNCProxyIP")
conI.Inherit.VNCProxyPort = .Item("InheritVNCProxyPort")
conI.Inherit.VNCProxyUsername = .Item("InheritVNCProxyUsername")
conI.Inherit.VNCProxyPassword = .Item("InheritVNCProxyPassword")
conI.Inherit.VNCColors = .Item("InheritVNCColors")
conI.Inherit.VNCSmartSizeMode = .Item("InheritVNCSmartSizeMode")
conI.Inherit.VNCViewOnly = .Item("InheritVNCViewOnly")
End If
If Me.confVersion > 1.7 Then '1.8
conI.RDPAuthenticationLevel = Tools.Misc.StringToEnum(GetType(Connection.Protocol.RDP.AuthenticationLevel), .Item("RDPAuthenticationLevel"))
conI.Inherit.RDPAuthenticationLevel = .Item("InheritRDPAuthenticationLevel")
End If
If Me.confVersion > 1.8 Then '1.9
conI.RenderingEngine = Tools.Misc.StringToEnum(GetType(Connection.Protocol.HTTPBase.RenderingEngine), .Item("RenderingEngine"))
conI.MacAddress = .Item("MacAddress")
conI.Inherit.RenderingEngine = .Item("InheritRenderingEngine")
conI.Inherit.MacAddress = .Item("InheritMacAddress")
End If
If Me.confVersion > 1.9 Then '2.0
conI.UserField = .Item("UserField")
conI.Inherit.UserField = .Item("InheritUserField")
End If
If Me.confVersion > 2.0 Then '2.1
conI.ExtApp = .Item("ExtApp")
conI.Inherit.ExtApp = .Item("InheritExtApp")
End If
If Me.confVersion >= 2.2 Then
conI.RDGatewayUsageMethod = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.RDP.RDGatewayUsageMethod), .Item("RDGatewayUsageMethod"))
conI.RDGatewayHostname = .Item("RDGatewayHostname")
conI.RDGatewayUseConnectionCredentials = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.RDP.RDGatewayUseConnectionCredentials), .Item("RDGatewayUseConnectionCredentials"))
conI.RDGatewayUsername = .Item("RDGatewayUsername")
conI.RDGatewayPassword = Security.Crypt.Decrypt(.Item("RDGatewayPassword"), pW)
conI.RDGatewayDomain = .Item("RDGatewayDomain")
conI.Inherit.RDGatewayUsageMethod = .Item("InheritRDGatewayUsageMethod")
conI.Inherit.RDGatewayHostname = .Item("InheritRDGatewayHostname")
conI.Inherit.RDGatewayUsername = .Item("InheritRDGatewayUsername")
conI.Inherit.RDGatewayPassword = .Item("InheritRDGatewayPassword")
conI.Inherit.RDGatewayDomain = .Item("InheritRDGatewayDomain")
End If
If SQLUpdate = True Then
conI.PleaseConnect = .Item("Connected")
End If
End With
Return conI
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "GetConnectionInfoFromSQL failed (Config.Connections.Load)" & vbNewLine & ex.Message, True)
End Try
Return Nothing
End Function
#End Region
#Region "XML"
Private Function DecryptCompleteFile() As String
Dim sRd As New StreamReader(Me._ConnectionFileName)
Dim strCons As String
strCons = sRd.ReadToEnd
sRd.Close()
If strCons <> "" Then
Dim strDecr As String = ""
Dim notDecr As Boolean = True
If strCons.Contains("<?xml version=""1.0"" encoding=""utf-8""?>") Then
strDecr = strCons
Return strDecr
End If
Try
strDecr = Security.Crypt.Decrypt(strCons, pW)
If strDecr <> strCons Then
notDecr = False
Else
notDecr = True
End If
Catch ex As Exception
notDecr = True
End Try
If notDecr Then
If Authenticate(strCons, True) = True Then
strDecr = Security.Crypt.Decrypt(strCons, pW)
notDecr = False
Else
notDecr = True
End If
If notDecr = False Then
Return strDecr
End If
Else
Return strDecr
End If
End If
Return ""
End Function
Private Sub LoadFromXML(Optional ByVal cons As String = "")
Try
App.Runtime.ConnectionsFileLoaded = False
' SECTION 1. Create a DOM Document and load the XML data into it.
Me.xDom = New XmlDocument()
If cons <> "" Then
xDom.LoadXml(cons)
Else
xDom.Load(Me._ConnectionFileName)
End If
If xDom.DocumentElement.HasAttribute("ConfVersion") Then
Dim originalCulture As System.Globalization.CultureInfo = My.Application.Culture
My.Application.ChangeCulture("en-US")
Me.confVersion = Convert.ToDouble(xDom.DocumentElement.Attributes("ConfVersion").Value)
My.Application.ChangeCulture(originalCulture.ToString)
Else
mC.AddMessage(Messages.MessageClass.WarningMsg, "You are trying to load a connection file that was created using an very early version of mRemote, this could result in an runtime error." & vbNewLine & "If you run into such an error, please create a new connection file!")
End If
' SECTION 2. Initialize the treeview control.
Dim rootNode As TreeNode
Try
rootNode = New TreeNode(xDom.DocumentElement.Attributes("Name").Value)
Catch ex As Exception
rootNode = New TreeNode(xDom.DocumentElement.Name)
End Try
Dim rInfo As New Root.Info(Root.Info.RootType.Connection)
rInfo.Name = rootNode.Text
rInfo.TreeNode = rootNode
rootNode.Tag = rInfo
If Me.confVersion > 1.3 Then '1.4
If Security.Crypt.Decrypt(xDom.DocumentElement.Attributes("Protected").Value, pW) <> "ThisIsNotProtected" Then
If Authenticate(xDom.DocumentElement.Attributes("Protected").Value, False, rInfo) = False Then
My.Settings.LoadConsFromCustomLocation = False
My.Settings.CustomConsPath = ""
rootNode.Remove()
Exit Sub
End If
End If
End If
Dim imp As Boolean = False
If Me.confVersion > 0.9 Then '1.0
If xDom.DocumentElement.Attributes("Export").Value = True Then
imp = True
End If
End If
If Me._Import = True And imp = False Then
mC.AddMessage(Messages.MessageClass.InformationMsg, "You cannot import a normal connection file." & vbNewLine & "Please use File - Load Connections for normal connection files!")
Exit Sub
End If
If imp = False Then
Me._RootTreeNode.Text = rootNode.Text
Me._RootTreeNode.Tag = rootNode.Tag
Me._RootTreeNode.ImageIndex = Images.Enums.TreeImage.Root
Me._RootTreeNode.SelectedImageIndex = Images.Enums.TreeImage.Root
End If
' SECTION 3. Populate the TreeView with the DOM nodes.
AddNodeFromXML(xDom.DocumentElement, Me._RootTreeNode)
Me._RootTreeNode.Expand()
'expand containers
For Each contI As Container.Info In Me._ContainerList
If contI.IsExpanded = True Then
contI.TreeNode.Expand()
End If
Next
'open connections from last mremote session
If My.Settings.OpenConsFromLastSession = True And My.Settings.NoReconnect = False Then
For Each conI As Connection.Info In Me._ConnectionList
If conI.PleaseConnect = True Then
App.Runtime.OpenConnection(conI)
End If
Next
End If
Me._RootTreeNode.EnsureVisible()
App.Runtime.ConnectionsFileLoaded = True
App.Runtime.Windows.treeForm.InitialRefresh()
Catch ex As Exception
App.Runtime.ConnectionsFileLoaded = False
mC.AddMessage(Messages.MessageClass.ErrorMsg, "LoadFromXML failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private prevCont As Container.Info
Private Sub AddNodeFromXML(ByRef inXmlNode As XmlNode, ByRef inTreeNode As TreeNode)
Try
Dim i As Integer
Dim xNode As XmlNode
Dim xNodeList As XmlNodeList
Dim tNode As TreeNode
' Loop through the XML nodes until the leaf is reached.
' Add the nodes to the TreeView during the looping process.
If inXmlNode.HasChildNodes() Then
xNodeList = inXmlNode.ChildNodes
For i = 0 To xNodeList.Count - 1
xNode = xNodeList(i)
inTreeNode.Nodes.Add(New TreeNode(xNode.Attributes("Name").Value))
tNode = inTreeNode.Nodes(i)
If Tree.Node.GetNodeTypeFromString(xNode.Attributes("Type").Value) = Tree.Node.Type.Connection Then 'connection info
Dim conI As Connection.Info = GetConnectionInfoFromXml(xNode)
conI.TreeNode = tNode
conI.Parent = prevCont 'NEW
Me._ConnectionList.Add(conI)
tNode.Tag = conI
tNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed
tNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed
ElseIf Tree.Node.GetNodeTypeFromString(xNode.Attributes("Type").Value) = Tree.Node.Type.Container Then 'container info
Dim contI As New Container.Info
If tNode.Parent IsNot Nothing Then
If Tree.Node.GetNodeType(tNode.Parent) = Tree.Node.Type.Container Then
contI.Parent = tNode.Parent.Tag
End If
End If
prevCont = contI 'NEW
contI.TreeNode = tNode
contI.Name = xNode.Attributes("Name").Value
If Me.confVersion > 0.7 Then '0.8
If xNode.Attributes("Expanded").Value = "True" Then
contI.IsExpanded = True
Else
contI.IsExpanded = False
End If
End If
Dim conI As Connection.Info
If Me.confVersion > 0.8 Then '0.9
conI = GetConnectionInfoFromXml(xNode)
Else
conI = New Connection.Info
End If
conI.Parent = contI
conI.IsContainer = True
contI.ConnectionInfo = conI
Me._ContainerList.Add(contI)
tNode.Tag = contI
tNode.ImageIndex = Images.Enums.TreeImage.Container
tNode.SelectedImageIndex = Images.Enums.TreeImage.Container
End If
AddNodeFromXML(xNode, tNode)
Next
Else
inTreeNode.Text = inXmlNode.Attributes("Name").Value.Trim
End If
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "AddNodeFromXML failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Function GetConnectionInfoFromXml(ByVal xxNode As XmlNode) As Connection.Info
Try
Dim conI As New Connection.Info
With xxNode
If Me.confVersion > 0.1 Then '0.2
conI.Name = .Attributes("Name").Value
conI.Description = .Attributes("Descr").Value
conI.Hostname = .Attributes("Hostname").Value
conI.Username = .Attributes("Username").Value
conI.Password = Security.Crypt.Decrypt(.Attributes("Password").Value, pW)
conI.Domain = .Attributes("Domain").Value
conI.DisplayWallpaper = .Attributes("DisplayWallpaper").Value
conI.DisplayThemes = .Attributes("DisplayThemes").Value
conI.CacheBitmaps = .Attributes("CacheBitmaps").Value
If Me.confVersion < 1.1 Then '1.0 - 0.1
If .Attributes("Fullscreen").Value = True Then
conI.Resolution = Connection.Protocol.RDP.RDPResolutions.Fullscreen
Else
conI.Resolution = Connection.Protocol.RDP.RDPResolutions.FitToWindow
End If
End If
End If
If Me.confVersion > 0.2 Then '0.3
If Me.confVersion < 0.7 Then
If CType(.Attributes("UseVNC").Value, Boolean) = True Then
conI.Protocol = Connection.Protocol.Protocols.VNC
conI.Port = .Attributes("VNCPort").Value
Else
conI.Protocol = Connection.Protocol.Protocols.RDP
End If
End If
Else
conI.Port = Connection.Protocol.RDP.Defaults.Port
conI.Protocol = Connection.Protocol.Protocols.RDP
End If
If Me.confVersion > 0.3 Then '0.4
If Me.confVersion < 0.7 Then
If CType(.Attributes("UseVNC").Value, Boolean) = True Then
conI.Port = .Attributes("VNCPort").Value
Else
conI.Port = .Attributes("RDPPort").Value
End If
End If
conI.UseConsoleSession = .Attributes("ConnectToConsole").Value
Else
If Me.confVersion < 0.7 Then
If CType(.Attributes("UseVNC").Value, Boolean) = True Then
conI.Port = Connection.Protocol.VNC.Defaults.Port
Else
conI.Port = Connection.Protocol.RDP.Defaults.Port
End If
End If
conI.UseConsoleSession = False
End If
If Me.confVersion > 0.4 Then '0.5 and 0.6
conI.RedirectDiskDrives = .Attributes("RedirectDiskDrives").Value
conI.RedirectPrinters = .Attributes("RedirectPrinters").Value
conI.RedirectPorts = .Attributes("RedirectPorts").Value
conI.RedirectSmartCards = .Attributes("RedirectSmartCards").Value
Else
conI.RedirectDiskDrives = False
conI.RedirectPrinters = False
conI.RedirectPorts = False
conI.RedirectSmartCards = False
End If
If Me.confVersion > 0.6 Then '0.7
conI.Protocol = Tools.Misc.StringToEnum(GetType(Connection.Protocol.Protocols), .Attributes("Protocol").Value)
conI.Port = .Attributes("Port").Value
End If
If Me.confVersion > 0.9 Then '1.0
conI.RedirectKeys = .Attributes("RedirectKeys").Value
End If
If Me.confVersion > 1.1 Then '1.2
conI.PuttySession = .Attributes("PuttySession").Value
End If
If Me.confVersion > 1.2 Then '1.3
conI.Colors = Tools.Misc.StringToEnum(GetType(Connection.Protocol.RDP.RDPColors), .Attributes("Colors").Value)
conI.Resolution = Tools.Misc.StringToEnum(GetType(Connection.Protocol.RDP.RDPResolutions), .Attributes("Resolution").Value)
conI.RedirectSound = Tools.Misc.StringToEnum(GetType(Connection.Protocol.RDP.RDPSounds), .Attributes("RedirectSound").Value)
Else
Select Case .Attributes("Colors").Value
Case 0
conI.Colors = Connection.Protocol.RDP.RDPColors.Colors256
Case 1
conI.Colors = Connection.Protocol.RDP.RDPColors.Colors16Bit
Case 2
conI.Colors = Connection.Protocol.RDP.RDPColors.Colors24Bit
Case 3
conI.Colors = Connection.Protocol.RDP.RDPColors.Colors32Bit
End Select
conI.RedirectSound = .Attributes("RedirectSound").Value
End If
If Me.confVersion > 1.2 Then '1.3
conI.Inherit = New Connection.Info.Inheritance(conI)
conI.Inherit.CacheBitmaps = .Attributes("InheritCacheBitmaps").Value
conI.Inherit.Colors = .Attributes("InheritColors").Value
conI.Inherit.Description = .Attributes("InheritDescription").Value
conI.Inherit.DisplayThemes = .Attributes("InheritDisplayThemes").Value
conI.Inherit.DisplayWallpaper = .Attributes("InheritDisplayWallpaper").Value
conI.Inherit.Domain = .Attributes("InheritDomain").Value
conI.Inherit.Icon = .Attributes("InheritIcon").Value
conI.Inherit.Panel = .Attributes("InheritPanel").Value
conI.Inherit.Password = .Attributes("InheritPassword").Value
conI.Inherit.Port = .Attributes("InheritPort").Value
conI.Inherit.Protocol = .Attributes("InheritProtocol").Value
conI.Inherit.PuttySession = .Attributes("InheritPuttySession").Value
conI.Inherit.RedirectDiskDrives = .Attributes("InheritRedirectDiskDrives").Value
conI.Inherit.RedirectKeys = .Attributes("InheritRedirectKeys").Value
conI.Inherit.RedirectPorts = .Attributes("InheritRedirectPorts").Value
conI.Inherit.RedirectPrinters = .Attributes("InheritRedirectPrinters").Value
conI.Inherit.RedirectSmartCards = .Attributes("InheritRedirectSmartCards").Value
conI.Inherit.RedirectSound = .Attributes("InheritRedirectSound").Value
conI.Inherit.Resolution = .Attributes("InheritResolution").Value
conI.Inherit.UseConsoleSession = .Attributes("InheritUseConsoleSession").Value
conI.Inherit.Username = .Attributes("InheritUsername").Value
conI.Icon = .Attributes("Icon").Value
conI.Panel = .Attributes("Panel").Value
Else
conI.Inherit = New Connection.Info.Inheritance(conI, .Attributes("Inherit").Value)
conI.Icon = .Attributes("Icon").Value.Replace(".ico", "")
conI.Panel = "General"
End If
If Me.confVersion > 1.4 Then '1.5
conI.PleaseConnect = .Attributes("Connected").Value
End If
If Me.confVersion > 1.5 Then '1.6
conI.ICAEncryption = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.ICA.EncryptionStrength), .Attributes("ICAEncryptionStrength").Value)
conI.Inherit.ICAEncryption = .Attributes("InheritICAEncryptionStrength").Value
conI.PreExtApp = .Attributes("PreExtApp").Value
conI.PostExtApp = .Attributes("PostExtApp").Value
conI.Inherit.PreExtApp = .Attributes("InheritPreExtApp").Value
conI.Inherit.PostExtApp = .Attributes("InheritPostExtApp").Value
End If
If Me.confVersion > 1.6 Then '1.7
conI.VNCCompression = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.VNC.Compression), .Attributes("VNCCompression").Value)
conI.VNCEncoding = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.VNC.Encoding), .Attributes("VNCEncoding").Value)
conI.VNCAuthMode = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.VNC.AuthMode), .Attributes("VNCAuthMode").Value)
conI.VNCProxyType = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.VNC.ProxyType), .Attributes("VNCProxyType").Value)
conI.VNCProxyIP = .Attributes("VNCProxyIP").Value
conI.VNCProxyPort = .Attributes("VNCProxyPort").Value
conI.VNCProxyUsername = .Attributes("VNCProxyUsername").Value
conI.VNCProxyPassword = Security.Crypt.Decrypt(.Attributes("VNCProxyPassword").Value, pW)
conI.VNCColors = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.VNC.Colors), .Attributes("VNCColors").Value)
conI.VNCSmartSizeMode = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.VNC.SmartSizeMode), .Attributes("VNCSmartSizeMode").Value)
conI.VNCViewOnly = .Attributes("VNCViewOnly").Value
conI.Inherit.VNCCompression = .Attributes("InheritVNCCompression").Value
conI.Inherit.VNCEncoding = .Attributes("InheritVNCEncoding").Value
conI.Inherit.VNCAuthMode = .Attributes("InheritVNCAuthMode").Value
conI.Inherit.VNCProxyType = .Attributes("InheritVNCProxyType").Value
conI.Inherit.VNCProxyIP = .Attributes("InheritVNCProxyIP").Value
conI.Inherit.VNCProxyPort = .Attributes("InheritVNCProxyPort").Value
conI.Inherit.VNCProxyUsername = .Attributes("InheritVNCProxyUsername").Value
conI.Inherit.VNCProxyPassword = .Attributes("InheritVNCProxyPassword").Value
conI.Inherit.VNCColors = .Attributes("InheritVNCColors").Value
conI.Inherit.VNCSmartSizeMode = .Attributes("InheritVNCSmartSizeMode").Value
conI.Inherit.VNCViewOnly = .Attributes("InheritVNCViewOnly").Value
End If
If Me.confVersion > 1.7 Then '1.8
conI.RDPAuthenticationLevel = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.RDP.AuthenticationLevel), .Attributes("RDPAuthenticationLevel").Value)
conI.Inherit.RDPAuthenticationLevel = .Attributes("InheritRDPAuthenticationLevel").Value
End If
If Me.confVersion > 1.8 Then '1.9
conI.RenderingEngine = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.HTTPBase.RenderingEngine), .Attributes("RenderingEngine").Value)
conI.MacAddress = .Attributes("MacAddress").Value
conI.Inherit.RenderingEngine = .Attributes("InheritRenderingEngine").Value
conI.Inherit.MacAddress = .Attributes("InheritMacAddress").Value
End If
If Me.confVersion > 1.9 Then '2.0
conI.UserField = .Attributes("UserField").Value
conI.Inherit.UserField = .Attributes("InheritUserField").Value
End If
If Me.confVersion > 2.0 Then '2.1
conI.ExtApp = .Attributes("ExtApp").Value
conI.Inherit.ExtApp = .Attributes("InheritExtApp").Value
End If
If Me.confVersion > 2.1 Then '2.2
conI.RDGatewayUsageMethod = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.RDP.RDGatewayUsageMethod), .Attributes("RDGatewayUsageMethod").Value)
conI.RDGatewayHostname = .Attributes("RDGatewayHostname").Value
conI.RDGatewayUseConnectionCredentials = Tools.Misc.StringToEnum(GetType(mRemote.Connection.Protocol.RDP.RDGatewayUseConnectionCredentials), .Attributes("RDGatewayUseConnectionCredentials").Value)
conI.RDGatewayUsername = .Attributes("RDGatewayUsername").Value
conI.RDGatewayPassword = Security.Crypt.Decrypt(.Attributes("RDGatewayPassword").Value, pW)
conI.RDGatewayDomain = .Attributes("RDGatewayDomain").Value
conI.Inherit.RDGatewayUsageMethod = .Attributes("InheritRDGatewayUsageMethod").Value
conI.Inherit.RDGatewayHostname = .Attributes("InheritRDGatewayHostname").Value
conI.Inherit.RDGatewayUsername = .Attributes("InheritRDGatewayUsername").Value
conI.Inherit.RDGatewayPassword = .Attributes("InheritRDGatewayPassword").Value
conI.Inherit.RDGatewayDomain = .Attributes("InheritRDGatewayDomain").Value
End If
End With
Return conI
Catch ex As Exception
mC.AddMessage(Messages.MessageClass.ErrorMsg, "GetConnectionInfoFromXml failed" & vbNewLine & ex.Message, True)
Return Nothing
End Try
End Function
Private Function Authenticate(ByVal Value As String, ByVal CompareToOriginalValue As Boolean, Optional ByVal RootInfo As mRemote.Root.Info = Nothing) As Boolean
If CompareToOriginalValue Then
Do Until Security.Crypt.Decrypt(Value, pW) <> Value
pW = Tools.Misc.PasswordDialog(False)
If pW = "" Then
Return False
End If
Loop
Else
Do Until Security.Crypt.Decrypt(Value, pW) = "ThisIsProtected"
pW = Tools.Misc.PasswordDialog(False)
If pW = "" Then
Return False
End If
Loop
RootInfo.Password = True
RootInfo.PasswordString = pW
End If
Return True
End Function
#End Region
End Class
End Namespace
End Namespace