Compare commits

...

674 Commits

Author SHA1 Message Date
David Sparer
6f79954989 re-added a few more missing menu icons 2016-11-16 15:07:43 -07:00
David Sparer
8d4622dc31 re-add Options menu icon 2016-11-16 15:00:39 -07:00
David Sparer
fecdc48b09 Merge branch 'trying_to_fix_the_main_menu_position' into develop 2016-11-16 14:35:29 -07:00
David Sparer
0edb51a32a set safe default positions for the quick connect and external tools menu items 2016-11-16 14:27:02 -07:00
David Sparer
750bd2f61b another attempt to fix the main menu default location 2016-11-16 13:29:56 -07:00
Sean Kaim
f6fa9821f0 Add PayPal badge to the readme 2016-11-15 14:50:08 -05:00
Sean Kaim
3ed06dafb0 suppress complier warning MSB3305
Processing COM reference "" from path "". At least one of the arguments
for '' cannot be marshaled by the runtime marshaler.  Such arguments
will therefore be passed as a pointer and may require unsafe code to
manipulate.
2016-11-15 14:17:17 -05:00
Sean Kaim
4be6a5b5a9 ReSharper - code clean up 2016-11-15 14:08:55 -05:00
Sean Kaim
a4c77ce33e Fix complier error CA2213 2016-11-15 14:02:06 -05:00
Sean Kaim
f6babd01ca Fix complier warning 2016-11-15 14:00:22 -05:00
Sean Kaim
17ce9a0903 Remove unused / unreferenced UI element 2016-11-15 13:43:57 -05:00
David Sparer
824b4681e4 Merge pull request #248 from mRemoteNG/247_inheritance_not_applied_correctly
Resolves #247
2016-11-15 10:20:34 -07:00
David Sparer
7ba7e0b2d8 resolved the issue with inheritance not being applied correctly for folders. created a few tests to help guard against this from happening again. 2016-11-15 10:15:49 -07:00
David Sparer
0391eabc79 fixed some test files 2016-11-15 10:14:35 -07:00
Sean Kaim
e2ebf6b8fe code clean up 2016-11-15 12:05:50 -05:00
Sean Kaim
58d3d678ca code clean up 2016-11-15 11:41:50 -05:00
David Sparer
b52b68595b set changelog version and date 2016-11-15 08:32:14 -07:00
Sean Kaim
0a8d606686 About: line some things up a little better 2016-11-15 09:45:09 -05:00
Sean Kaim
d1ef9f3e99 Fix build errors 2016-11-11 17:31:26 -05:00
Sean Kaim
5a830c17db ReShaper Cleanup 2016-11-11 17:24:02 -05:00
Sean Kaim
10c4a4d665 CA1034: Nested types should not be visible
https://msdn.microsoft.com/library/ms182162.aspx
2016-11-11 16:43:46 -05:00
Sean Kaim
e93e7f05c6 CA1031: Do not catch general exception types
https://msdn.microsoft.com/library/ms182137.aspx
2016-11-11 16:40:59 -05:00
Sean Kaim
e2c6240798 Fix Release build failure 2016-11-11 16:35:14 -05:00
Sean Kaim
24ad483214 Fix other complier warnings & code clean up 2016-11-11 16:30:22 -05:00
Sean Kaim
bfa53224a6 CA1060: Move to NativeMethods class
https://msdn.microsoft.com/en-us/library/ms182161.aspx
2016-11-11 16:29:57 -05:00
Sean Kaim
00ec25d38c Fix compilier warning: CA2202 & refactor
https://msdn.microsoft.com/en-us/library/ms182334.aspx
2016-11-11 16:25:47 -05:00
Sean Kaim
348fc156de Commented out Unused variable 2016-11-11 16:21:46 -05:00
Sean Kaim
1a9cb5335a adjust changelog display in about form 2016-11-11 14:36:08 -05:00
Sean Kaim
0abfab96a4 changelog and credits update 2016-11-11 12:24:47 -05:00
Sean Kaim
bbfbbbf91e make sub OU import optional 2016-11-10 17:53:32 -05:00
David Sparer
8db0150c4a Merge pull request #241 from mRemoteNG/240_Config_window_buttons_sometimes_deactivate
resolves #240
2016-11-10 11:00:29 -07:00
David Sparer
3d7db6136f resolved the issue of config window buttons being deactivated in some cases. the config window was incorrectly tracking the selected tree node. 2016-11-10 10:57:03 -07:00
David Sparer
ace6c1167b bit more cleanup 2016-11-10 10:20:48 -07:00
David Sparer
4644dfbd7b initial resharper cleanup 2016-11-10 10:00:39 -07:00
Sean Kaim
1bf6dc37d9 Merge pull request #234 from mRemoteNG/211_AD_Sub_OU_Import
Fixes #211
2016-11-09 14:54:17 -05:00
Sean Kaim
97a0e2413e Fixed MR-220
Don't close the AD importer after import
Add Close button (for when you're done with the importer)
2016-11-09 14:20:01 -05:00
Sean Kaim
c5f199bdf8 recurively import OU, Sub-OU and servers 2016-11-08 17:31:50 -05:00
Sean Kaim
11256e6988 code clean up 2016-11-07 16:05:36 -05:00
Sean Kaim
32240ee475 Allow the update options page for portable versions 2016-11-07 14:22:42 -05:00
Sean Kaim
77a1c2cfb8 code clean up
convert if else -> switch
use ?: where possible
use "var"
"return ;" - why??? Also, why does that space annoy me so much?
😕
2016-11-07 12:23:04 -05:00
Sean Kaim
0f6d7ce2a4 Merge pull request #224 from mRemoteNG/160_portable_update_check
160 portable update check
2016-11-06 17:12:55 -05:00
Sean Kaim
e8738adc40 correct file name 2016-11-06 17:05:49 -05:00
Sean Kaim
bca02edead fix a boo-boo 2016-11-06 16:59:41 -05:00
Sean Kaim
abf81ac26b Download portable zip
* code clean up
* Compare MD5 hash
* Display changelog properly direct from GH
2016-11-06 16:56:59 -05:00
Sean Kaim
011d2f83f6 clean up update code 2016-11-06 15:19:13 -05:00
Sean Kaim
1a80c5273c Use same exact format as installer version 2016-11-06 15:04:48 -05:00
Sean Kaim
cf8f31168e upgrade check file hash creation 2016-11-06 15:03:27 -05:00
Sean Kaim
e25d7ca995 Here are the basics for portable update checks... 2016-11-03 17:43:53 -04:00
David Sparer
51fa8994c3 Resaved test file with KdfIterations=5000 2016-11-02 16:04:05 -06:00
David Sparer
78852b7119 Added a test to ensure we can serialize then deserialize with custom kdf values 2016-11-02 15:59:53 -06:00
David Sparer
193bb0bf26 The xml decryptor wasn't passing the kdfiterations value to the cryptoprovider. It was being essentially hard-coded in... whoops
Added a new test to ensure we can serialize then deserialize with a custom kdf value
2016-11-02 15:59:25 -06:00
Sean Kaim
d862462bbf Fix build failures (tests)
I don't want to risk breaking any existing SQL implementations at this
point by updating the schema... Especially since I don't have the time
to test it properly.
2016-11-02 17:05:44 -04:00
Sean Kaim
dcecd30e7c Fix build failure (tests) 2016-11-02 17:00:37 -04:00
Sean Kaim
a01ef3bb08 Change update URL
Fixes #162
2016-11-02 16:35:03 -04:00
Sean Kaim
60cd2c2b12 RDP audioqualitymode option
fixes #172
2016-11-02 15:49:45 -04:00
Sean Kaim
daad1cac5e Fixed problem saving confCons.xml
Intoduced in commit 9a32aa3350

Removed "_saveUpdate" bool and related checks since it's not used
anywhere else. It was meaningless code (that caused a problem when
ReShaper "cleaned" it up).
2016-11-02 15:30:11 -04:00
Sean Kaim
c6b89425b1 FilteredPropertyGrid code cleanup 2016-11-02 14:10:50 -04:00
David Sparer
eeb2f0ad60 Merge pull request #209 from mRemoteNG/Fix_password_support_for_international_chars
Investigate password support for international chars
2016-10-28 08:49:10 -06:00
David Sparer
314e5bc364 minor cleanup 2016-10-25 11:40:43 -06:00
David Sparer
a294bfde11 Added test to ensure that strings with international characters are serialized and deserialized correctly 2016-10-25 11:40:01 -06:00
David Sparer
baa496fc07 Merge pull request #199 from mRemoteNG/Make_XmlSerializer_class_testable
The XmlConnectionsSerializer class was broken into smaller classes that better adhere to SRP.

Closes #180
2016-10-25 11:17:07 -06:00
David Sparer
4ca29d5d2e Removed an unused variable in Runtime 2016-10-25 11:13:43 -06:00
David Sparer
5e7074a297 Fixed minor bug when turning off custom password encryption 2016-10-25 11:10:52 -06:00
David Sparer
fd6268ce8a Updated the deserializer / decryptor to look at the rootnodeinfo for decryption key rather than static Runtime. There was some state leaking that caused unit tests to fail intermittently 2016-10-25 10:59:43 -06:00
David Sparer
806da552ce Added a test for serializing a single connection node 2016-10-25 09:34:03 -06:00
David Sparer
47561340e3 minor cleanup 2016-10-25 09:33:34 -06:00
David Sparer
b374952141 Renamed the ConnectionsDecryptor to XmlConnectionsDecryptor and moved it into the Serializers namespace 2016-10-25 08:53:07 -06:00
David Sparer
e098970d82 Added some tests to ensure that the xml serializer produces output that the deserializer can handle. 2016-10-25 08:25:57 -06:00
David Sparer
6ca5f5e877 minor cleanup 2016-10-25 08:14:49 -06:00
David Sparer
6b023c5fb6 Simplified the xml serializer by chunking it into appropriate classes 2016-10-24 15:40:28 -06:00
David Sparer
bd30103758 Fixed bug where we were not using the correct encryption key during serialization 2016-10-24 15:39:50 -06:00
David Sparer
e9ead72e79 Added logic to the XmlConnectionsDocumentCompiler to respect the FullFileEncryption flag 2016-10-24 14:54:08 -06:00
David Sparer
513edc58ab Created XmlConnectionsDocumentEncryptor to handle encrypting the entire connections xml file 2016-10-24 14:51:48 -06:00
David Sparer
fd7e7bd439 Created a class to handle compiling the structure of the xml document (child/parent relationships) 2016-10-24 13:12:39 -06:00
David Sparer
f510f20f57 Created an xml serializer specifically for dealing with the root connections node 2016-10-24 11:47:35 -06:00
David Sparer
a0a92b9b40 RootNodeInfo.PasswordString will now return either a custom password (if one is set) otherwise the default password 2016-10-24 11:24:35 -06:00
David Sparer
ba878c7587 Moved some of the responsibility of the default encryption password into the RootNodeInfo class. This simplifies serialization a bit, though may not be the best place for storing encryption passwords 2016-10-24 10:51:59 -06:00
David Sparer
f1f76a4910 XmlConnectionNodeSerializer now respects save filter settings for serializing inheritance 2016-10-24 09:04:51 -06:00
David Sparer
3ea4bc29ba Began splitting individual xml element serialization from serializing the structure of the document. Created unit tests to ensure the attributes are serialized correctly 2016-10-21 12:47:20 -06:00
David Sparer
1ed475d469 Test for confversion serialized 2016-10-19 18:03:45 -06:00
David Sparer
e11413eab8 The XmlConnectionsSerializer now looks to its crypto provider for the value of KdfIterations. This insulates the function from global state (Settings) 2016-10-19 18:00:14 -06:00
David Sparer
98db923ac7 Added get/set property KeyDerivationIterations to the ICryptographyProvider interface 2016-10-19 17:54:45 -06:00
David Sparer
7376ff1c9b XmlSerializer now requires a cryptoprovider be given to the ctor. Reduces reliance on global state (Settings) 2016-10-19 17:43:02 -06:00
David Sparer
d427e3e0ae Fixed CryptoFactory tests 2016-10-19 17:26:18 -06:00
David Sparer
550119a53a Modified the ICryptographyProvider interface to require getters for the cipher engine and mode using their enum types 2016-10-19 17:17:28 -06:00
David Sparer
2df182c4c9 disable resharper name checking for a few enums 2016-10-19 16:56:38 -06:00
David Sparer
2b9b872ad4 Added test 2016-10-19 15:28:44 -06:00
Sean Kaim
94853714c7 code clean up / fix complier warning 2016-10-18 17:31:09 -04:00
David Sparer
01529a8028 Began creating tests for the XmlConnectionsSerializer 2016-10-18 15:27:59 -06:00
David Sparer
71d348227e Merge branch 'Remove_unused_code' into develop 2016-10-18 14:56:40 -06:00
Sean Kaim
76f585a051 code clean up 2016-10-18 16:48:32 -04:00
David Sparer
f1085716d9 Removed references to the My namespace 2016-10-18 13:58:55 -06:00
David Sparer
93bb620099 Remove the defunct My.Settings file 2016-10-18 13:49:54 -06:00
David Sparer
ded0bd7d12 Merge pull request #179 from mRemoteNG/Create_more_tests
Createed more tests
2016-10-18 13:46:24 -06:00
Sean Kaim
088f646d6f updater code clean up 2016-10-18 11:01:52 -04:00
David Sparer
e6a00f7935 Merge branch 'develop' into Create_more_tests
# Conflicts:
#	mRemoteNGTests/mRemoteNGTests.csproj
2016-10-18 08:55:28 -06:00
Sean Kaim
e5d625f294 code clean up 2016-10-17 21:25:04 -04:00
Sean Kaim
6e3bfcdf04 Remove unused code 2016-10-17 20:52:36 -04:00
David Sparer
10bd19e390 The Tools.EnvironmentInfo class didn't need to exist. Replace a single call to it with Environment.Is64BitProcess 2016-10-17 15:33:07 -06:00
David Sparer
9a1cb822d1 Created tests for the NodeSearcher 2016-10-17 13:14:29 -06:00
David Sparer
8ad5f3426c Removed the Impersonator class. This was only ever used for the Sessions feature which was removed in v1.74 2016-10-17 12:34:14 -06:00
David Sparer
2070a98a72 Minor cleanup 2016-10-17 12:32:33 -06:00
David Sparer
b97410dab7 Removed unused/unnecessary code 2016-10-17 12:25:07 -06:00
David Sparer
d47bc021a5 Added a test for GetDefaultPort 2016-10-17 12:04:38 -06:00
David Sparer
0b2dfecf27 Created more containerinfo tests 2016-10-17 11:45:59 -06:00
David Sparer
46ea97333e Added more tests for the containerinfo 2016-10-17 11:19:27 -06:00
David Sparer
598a9f6a0f Added a few more tests for the LegacyRijndaelCryptographyProvider 2016-10-17 10:31:36 -06:00
Sean Kaim
ef7d92d6bd code clean up 2016-10-17 12:29:05 -04:00
David Sparer
da4fe41f34 Added extra test to cover setting the authenticator max attempts 2016-10-17 09:24:40 -06:00
David Sparer
91fe4050b2 Modified several tests that were failing on some machines due to differing environment variables. Tests are now more resilient 2016-10-14 13:09:35 -06:00
David Sparer
23da6cf69e Removed unused test 2016-10-14 09:57:03 -06:00
David Sparer
51883b450f Adding various other graphics/assets provided by Riley during the turnover 2016-10-14 08:56:49 -06:00
David Sparer
cbdf02db55 Merge pull request #174 from mRemoteNG/Make_UI_more_responsive_during_save/load
Resolves #166
2016-10-14 08:52:25 -06:00
David Sparer
196096cd65 Made a few Save calls async. These probably were async before and were accidentally changed. 2016-10-14 08:19:31 -06:00
David Sparer
476ac38883 Merge pull request #173 from mRemoteNG/Reduce_duplicate_password_serialization
Reduce duplicate password serialization
2016-10-14 08:15:33 -06:00
David Sparer
90fea916fd Passwords will now only be serialized if the SaveFilter allows them to be, and if the connection/container does NOT inherit the password. 2016-10-14 08:07:30 -06:00
David Sparer
6fccd203a4 Merge pull request #171 from mRemoteNG/Make_key_derivation_iterations_a_user_option
Make key derivation iterations a user option
2016-10-13 18:44:57 -06:00
David Sparer
f2f0ee0179 Key derivation iterations is now saved in the settings (for serialization) and the confCons file (for deserialization) 2016-10-13 18:43:46 -06:00
David Sparer
1f9218bd5a Added tests for the key generator 2016-10-13 18:01:36 -06:00
David Sparer
966f7b2d61 Decryption now uses the new key derivation class 2016-10-13 17:28:25 -06:00
David Sparer
58c4b541b0 Little cleanup on decryption. Now uses the new key derivation class 2016-10-13 17:23:55 -06:00
David Sparer
f6c490fc62 Created a key derivation interface and initial Pkcs5 implementation 2016-10-13 17:17:34 -06:00
David Sparer
be59392814 Merge pull request #170 from mRemoteNG/Decryption_failing_with_custom_password
More work needs to be done to cleanup the related classes and reduce coupling, though this PR is starting to get a bit large for what the original intent was. Of particular issue are the calls to Runtime.EncryptionKey. The current implementation makes it very easy to use the wrong encryption key. Resolves #168
2016-10-13 15:59:13 -06:00
David Sparer
d0e21d7d8a Added tests for all current versions and significant variations of confCons. More changes to the deserialization classes were required to make them more testable. Still needs significant work to be considered good code 2016-10-13 15:49:49 -06:00
David Sparer
737373940e PasswordAuthenticator will only attempt reauthentication up to MaxAttempts 2016-10-13 15:46:17 -06:00
David Sparer
c639b89511 Added a custom EncryptionException type that inherits from the BouncyCastle type. This gives us a bit of namespace insulation (we shouldn't reference BouncyCastle outside of the mRemoteNG.Security namespace). 2016-10-13 12:43:47 -06:00
David Sparer
c530b3f8b4 Fixed bug where we could not turn custom password encryption off 2016-10-13 12:25:45 -06:00
David Sparer
1592a448f3 Simplified the authentication code when deserializing xml 2016-10-13 12:00:49 -06:00
David Sparer
c5ab2b1373 Changed the AeadCryptographyProvider to use the localized error message when decryption fails 2016-10-13 11:52:57 -06:00
David Sparer
f14f2cb5b7 Modified the LegacyRijndaelCryptographyProvider to throw errors when decryption fails. This is more in line with the other crypto providers 2016-10-13 11:51:24 -06:00
David Sparer
9c2945d270 Forgot to commit one changed line 2016-10-13 11:48:31 -06:00
David Sparer
05357c24f6 Removed unnecessary resource file from tests and made it a string constant instead (it was a small amount of text) 2016-10-13 11:47:15 -06:00
David Sparer
75839f330c Created test to ensure decryption failures throw an exception in AeadCryptographyProvider 2016-10-13 11:33:03 -06:00
David Sparer
ba0a9bbe58 moved the IAuthenticator into the Security.Authentication namespace 2016-10-13 10:32:23 -06:00
David Sparer
fb082471fe Created a new interface & class for authenticating passwords. This will replace the ConnectionsDecryptor class 2016-10-13 10:23:08 -06:00
David Sparer
f8968f2eb1 Resolved issue with the password prompt box not appearing when trying to decrypt with custom password. Class needs to be cleaned up. 2016-10-13 09:13:02 -06:00
David Sparer
990605948b Changed the exception when decryption fails from the generic "Exception" type to the more specific "EncryptionException" type to make catching easier. 2016-10-13 09:10:47 -06:00
David Sparer
21c96281a8 Resolved issue where encrypted values were not being decrypted correctly. (it was using the wrong decryption provider) 2016-10-13 09:09:47 -06:00
Sean Kaim
1ad7fce7a5 update nugets / fix access denied on post build 2016-10-12 17:12:05 -04:00
David Sparer
76162953e6 Resolved build failure 2016-10-12 14:23:59 -06:00
Sean Kaim
b934e29dc0 Merge pull request #167 from mRemoteNG/137_Update_Check
137 update check
2016-10-12 15:52:13 -04:00
Sean Kaim
93c128438c Merge changes from devlop into 137_Update_Check
Fixed conflicts in mRemoteV1/UI/Forms/frmOptions.cs
2016-10-12 15:48:17 -04:00
Sean Kaim
c283ddbb6a remove announcement info and cleanup 2016-10-12 15:39:44 -04:00
David Sparer
e3085a7054 Export file selection dialog box now selects file type filter based on Export form selection 2016-10-12 12:27:23 -06:00
David Sparer
4aa9a6e7a3 Changed the mRemoteNG csv exporter to not use the non-existant TreeNode for serializing its location in the tree. Resolves #165 2016-10-12 12:09:28 -06:00
David Sparer
76b0057deb Merge pull request #164 from mRemoteNG/Remove_RemoteDesktop2008_export_option
Closes #144
2016-10-12 11:36:22 -06:00
David Sparer
5d964f7638 Removed the visionapp Remote Desktop 2008 export option and all related code 2016-10-12 11:30:31 -06:00
David Sparer
81610dee0e Merge pull request #158 from mRemoteNG/Implement_new_cryptography_providers
Implement new crypto providers
2016-10-12 10:05:53 -06:00
David Sparer
f64c0ae266 Code cleanup 2016-10-12 10:00:31 -06:00
David Sparer
324992f6ff Fixed a variable that should have been renamed 2016-10-12 09:58:50 -06:00
David Sparer
c35ce9ffe1 Renamed source file to match class name 2016-10-12 09:53:05 -06:00
David Sparer
a13a6d3919 Renamed the SaveFilter properties to include the prefix "Save" 2016-10-12 09:51:08 -06:00
David Sparer
ac01c6fff2 Renamed the Save class to SaveFilter to better indicate its purpose 2016-10-12 09:49:33 -06:00
David Sparer
53074c7b20 Simplified the Save class 2016-10-12 09:45:38 -06:00
David Sparer
1d4ef9474f Added tests of all BlockCipherEngine and BlockCipherMode combinations to ensure encryption/decryption is working. 2016-10-12 09:33:18 -06:00
David Sparer
59e948fa06 Renamed function to better show its purpose 2016-10-12 09:06:18 -06:00
David Sparer
55fe30b02c Resolved bug when unable to decrypt the confCons file. The app will now exit without attempting to save the cons file (avoiding data corruption issues) 2016-10-12 09:00:28 -06:00
David Sparer
e2929f43a3 Code cleanup of GeneralAppInfo (mostly just renames) 2016-10-12 08:19:37 -06:00
David Sparer
9d67f58490 Replaced all calls to GeneralAppInfo.EncryptionKey to Runtime.EncryptionKey 2016-10-12 08:16:05 -06:00
David Sparer
a862240ed7 Code cleanup 2016-10-12 08:09:28 -06:00
David Sparer
0f604f453d Code cleanup 2016-10-12 07:38:47 -06:00
David Sparer
113e9eba79 Deserialization now works for full file encryption 2016-10-11 20:02:54 -06:00
David Sparer
9af610a45b Rewrote the full file encryption code for the xml serializer. It now conforms to the expected placement of encrypted data 2016-10-11 16:09:42 -06:00
Sean Kaim
e8db5d267e display proper options page on customize
and code clean up
2016-10-11 17:41:11 -04:00
David Sparer
201fbb71c1 Xml deserializer is working for the new confcons schema to detect and use variable encryption methods. Full file decryption does not currently function. 2016-10-10 20:08:01 -06:00
David Sparer
2f87e55ae6 Incremented confcons file serialization version 2016-10-10 19:42:22 -06:00
David Sparer
34af797ad2 Modified xml serializer to use the new confcons schema 2016-10-10 19:41:14 -06:00
David Sparer
4ca640eee5 Made modifications to the confcons v2.6 schema. Eliminated the EncryptionInfo node. Its attributes are now owned by Connections node. 2016-10-10 19:31:22 -06:00
David Sparer
29d1bf7ce5 Updated the max supported confcons version to 2.6 2016-10-10 15:24:36 -06:00
David Sparer
c2f9c687ce Added an attribute to the Xml element "EncryptionInfo" to indicate whether we should expect full file encryption 2016-10-10 15:21:45 -06:00
David Sparer
a8da64cc6a Removed old code for serializing the complete xml file 2016-10-10 15:20:51 -06:00
David Sparer
d522258e0a Made the nonce size a bit smaller for CCM mode to avoid some issues with large nonces 2016-10-10 15:08:10 -06:00
Sean Kaim
5f738f97ea Remove more announcement stuff 2016-10-10 16:53:38 -04:00
Sean Kaim
db319825a1 fix update file parsing 2016-10-10 16:52:33 -04:00
David Sparer
cbb9ceb709 XmlSerialization now saves the new EncryptionInfo element 2016-10-10 14:50:37 -06:00
David Sparer
333ee232ae Fixed a small issue with the CCM mode nonce size 2016-10-10 14:48:32 -06:00
David Sparer
963b483697 null access checks 2016-10-10 14:06:43 -06:00
David Sparer
49425a37ac Added attribute to schema 2016-10-10 14:06:02 -06:00
Sean Kaim
0da975a9d3 fix build error & cleanup 2016-10-10 15:31:55 -04:00
Sean Kaim
1ea0522fcb MR-364 - remove announcements
And some code clean up
2016-10-10 15:23:55 -04:00
David Sparer
aaaa0e6aea Little simplification of the v2.6 schema 2016-10-10 11:39:13 -06:00
David Sparer
42368f05f8 Xml serializer now respects encryption settings 2016-10-10 11:26:54 -06:00
David Sparer
4e51a5db73 Created an updated confCons schema which saves encryption details 2016-10-10 11:22:24 -06:00
David Sparer
4bd5a3675f Minor security page layout change 2016-10-10 09:59:45 -06:00
David Sparer
a4d3850f13 Changed the localized text "Block Cipher" to "Block Cipher Mode" 2016-10-10 09:56:51 -06:00
David Sparer
864d370994 Simplified some code 2016-10-10 09:53:24 -06:00
David Sparer
47f0550cea Security settings now save. Simplified data binding to the encryption dropdowns 2016-10-10 09:34:00 -06:00
David Sparer
1bbc2b0165 Resolved issue with de/serializing encrypting settings 2016-10-10 09:19:33 -06:00
David Sparer
fc8a1ec4fc Renamed the EncryptionBlockCipher setting to EncryptionBlockCipherMode 2016-10-10 09:13:06 -06:00
David Sparer
4baabd7d07 Moved the confcons schema to a new folder 2016-10-10 08:19:53 -06:00
David Sparer
92ba170cdf Added schema attributes for the root Connections node and added sequence indicator for connectioninfo nodes. Schema appears to be complete 2016-10-10 08:12:34 -06:00
David Sparer
e842850695 #157 Began creating xml schema file for the current confCons file since we will need to change the schema to include the current encryption parameters 2016-10-09 09:23:32 -06:00
Sean Kaim
41fcbb2989 enable update check 2016-10-07 17:50:22 -04:00
Sean Kaim
d6a6cf6a59 code clean up & remove ugly colors (go to control) 2016-10-07 17:49:49 -04:00
David Sparer
113c8f6d4a Combo boxes now set their selected item on creation based off of the user settings 2016-10-07 13:03:17 -06:00
David Sparer
8218acddca Created dropdowns for choosing the encryption engine and the block cipher 2016-10-07 12:44:11 -06:00
David Sparer
7cb65df19e Rearranged the Advanced page after removing an option 2016-10-07 12:25:30 -06:00
David Sparer
91ba993279 Moved the option to completely encrypt the connections file from the Advanced page to the Security page 2016-10-07 12:23:53 -06:00
David Sparer
505f3dd947 Began creating the Security options page 2016-10-07 12:17:59 -06:00
David Sparer
7eca66e2c4 Added shield icon for the new security options page 2016-10-07 12:13:26 -06:00
David Sparer
3111c5437b Merge pull request #156 from mRemoteNG/Installer_does_not_respect_KB2923545_to_fulfill_RDP8_requirement
Installer now respects KB2923545 to fulfill RDP8 requirement. This closes #151
2016-10-07 11:19:59 -06:00
David Sparer
d32a1adead Installer now accepts either the RDP8 or RDP8.1 KB 2016-10-07 11:18:09 -06:00
David Sparer
9c5a2c0196 Added more efficient support for checking if atleast one of a number of KBs are installed. 2016-10-07 10:26:21 -06:00
David Sparer
19a76008d7 Merge pull request #149 from mRemoteNG/Hunting_for_memory_leaks
Hunting for memory leaks
2016-10-07 09:01:36 -06:00
David Sparer
2ffcccdc6f Fixed minor memory leak of Collection and Property changed event handlers when changing the ConnectionTreeModel associated to the ConnectionTreeWindow 2016-10-06 11:04:00 -06:00
David Sparer
67c01046be Removed unnecessary implementations of IDisposable 2016-10-05 13:50:55 -06:00
David Sparer
c755d651cc Removed all destructors since they were a very bad idea to implement 2016-10-05 13:41:35 -06:00
David Sparer
0529729626 Merge pull request #148 from mRemoteNG/Connection_icon_not_updating_until_mouseover
Resolved #141
2016-10-05 13:07:21 -06:00
David Sparer
984d989f14 #141 TreeListView objects now update immediately when their OpenConnections list contents change 2016-10-05 12:57:29 -06:00
David Sparer
a204e34d53 Modified the Asserts lines of a few tests to give better info on failure 2016-10-05 12:45:50 -06:00
David Sparer
3e47041820 Fixed minor bug where ProtocolList.Clear() would trigger a CollectionChanged event even when no items were removed (list already empty) 2016-10-05 12:43:27 -06:00
David Sparer
c471f621b2 #141 ConnectionInfo now listens to collection changed events from the ProtocolList and raises a PropertyChanged event for OpenConnections when the list contents changes. 2016-10-05 12:37:05 -06:00
David Sparer
e2e010c418 Created test to check for safe indexer handling of unknown object types 2016-10-05 11:51:44 -06:00
David Sparer
913e0dd3e4 #141 Implemented INotifyCollectionChanged on ProtocolList and created unit tests 2016-10-05 11:47:22 -06:00
David Sparer
192a718d08 Cleanup of the protocollist. connected to #141 2016-10-05 10:45:48 -06:00
David Sparer
a881232eb1 Merge pull request #145 from mRemoteNG/MR-975_Replace_TreeView_with_TreeListview
MR-975 / #143 replace tree view with tree listview
2016-10-04 15:28:11 -06:00
David Sparer
cf73e827e0 Quick changelog entry 2016-10-04 15:25:14 -06:00
David Sparer
bf97905fe9 Merge branch 'develop' into MR-975_Replace_TreeView_with_TreeListview 2016-10-04 15:19:04 -06:00
David Sparer
f962b8a573 Right clicking on an empty connection panel no longer displays the context menu 2016-10-04 15:15:38 -06:00
David Sparer
9e9786ecc7 Resolved minor bug with copying default connection info data to folders 2016-10-04 15:14:37 -06:00
David Sparer
59d22b536a Fixed bug that occurs on startup when non-english language is selected. 2016-10-04 14:50:58 -06:00
David Sparer
e8d17fd733 Suppress tree refresh errors which occassionally occur 2016-10-04 14:28:43 -06:00
David Sparer
42f4cb618b Resolved bug where some new connections/containers would not respect the default connection info and default inheritance settings 2016-10-04 14:26:49 -06:00
David Sparer
faa240ab97 Sorting tree nodes is now recursive in all cases to be more in line with user expectations 2016-10-04 14:01:36 -06:00
David Sparer
a02e72d895 Resolved bug where app would crash when opening the Export form with no connection tree node selected 2016-10-04 13:24:24 -06:00
David Sparer
852b43b121 Resolved crash bug when attempting to import from AD when no connection tree node is selected (will import under the root node) 2016-10-04 13:21:54 -06:00
David Sparer
020823510d Fixed bug where app would crash when no tree node selected and trying to import from file 2016-10-04 12:50:02 -06:00
David Sparer
5c92128b17 Resolves #140. The decryption key was not being saved and used for further decryption attempts. This fix is quick/temporary and should be redone to remove Runtime references. 2016-10-04 11:31:41 -06:00
David Sparer
7cee3c9050 Created another unit test for the legacy crypto provider 2016-10-04 11:31:15 -06:00
Sean Kaim
f31cf9f839 waffle.io badge 2016-10-04 12:37:26 -04:00
David Sparer
960de69c20 Added note regarding a minor efficiency bug to investigate 2016-10-04 10:18:49 -06:00
Sean Kaim
6d8e4d14e6 contributing typo. 2016-10-04 11:55:38 -04:00
Sean Kaim
fd7929134b Merge pull request #139 from mRemoteNG/dot-github
.github support
2016-10-04 11:34:18 -04:00
David Sparer
40016f0d52 Code cleanup 2016-10-04 08:28:39 -06:00
David Sparer
05c46653a1 Resolved crash bug when deserialization fails (for example when we cant decrypt the file). 2016-10-03 15:02:16 -06:00
David Sparer
a932129d52 Very minor code cleanup 2016-10-03 12:12:15 -06:00
David Sparer
426c07ce75 Code cleanup of Runtime.cs 2016-10-03 12:10:56 -06:00
David Sparer
140723108e Resolved bug where the RemoteConnectionsSyncronizer wouldn't get disposed/deferenced when switching from using Sql to not using it 2016-10-03 12:05:07 -06:00
David Sparer
418f023780 Removed unused code 2016-10-03 12:02:48 -06:00
David Sparer
85b6e09ea6 Merge branch 'develop' into MR-975_Replace_TreeView_with_TreeListview 2016-10-03 10:46:49 -06:00
David Sparer
d6bd7e0886 Resolved bug where rearranging nodes by drag-n-drop would not save changes 2016-10-03 10:36:58 -06:00
David Sparer
2df93bea24 Reduced some complexity by merging the PeriodicConnectionsUpdateChecker with the RemoteConnectionsSyncronizer since they did nearly the same thing. 2016-10-03 10:28:08 -06:00
David Sparer
b474a67ef4 Fixed a few unit tests 2016-10-03 10:08:48 -06:00
David Sparer
ddd94da47b Code cleanup 2016-10-03 10:04:58 -06:00
David Sparer
48bd1854e4 Resolved saving to an Sql DB. Had to correclty arrange the column schema, add the ID column and make it autoincrement, and change a few data types. 2016-10-03 09:55:31 -06:00
David Sparer
6582ebcf57 Resolved minor bug that would occassionaly create unnecessary exceptions 2016-10-03 09:19:57 -06:00
David Sparer
41cd6f4290 Save supported by the RemoteConnectionsSyncronizer 2016-09-30 15:32:36 -06:00
David Sparer
5f40bab9c5 Enforce column data types 2016-09-30 15:31:46 -06:00
David Sparer
4b90b259a8 Created a class that brings all the various database classes together to keep the local connections tree updated with the remote connections tree. DB reads will now only occur if the local last update time is behind the remote last update time. 2016-09-30 14:49:14 -06:00
David Sparer
279682df11 the db update checker now runs on app startup 2016-09-30 13:55:25 -06:00
David Sparer
64b6c5967d Removed unused code 2016-09-30 13:50:41 -06:00
David Sparer
5826f055e3 DB updates now trigger reloading of connections data and rebuilding of the connection tree (somewhat thread safe) 2016-09-30 13:47:08 -06:00
David Sparer
e4ec71928d Cleanup 2016-09-30 09:28:20 -06:00
David Sparer
cb2ff4002f Moved some files to Config.Connections.Multiuser to keep things organized 2016-09-30 09:27:53 -06:00
David Sparer
36d5c888a5 Cleanup. Made PeriodicConnectionsUpdateChecker a bit more generically useful 2016-09-30 09:02:12 -06:00
David Sparer
de7493bc00 Implemented the ConnectionsUpdateAvailable event. 2016-09-30 08:35:41 -06:00
David Sparer
6819c1d9ff Made IConnectionsUpdateChecker implement IDisposable 2016-09-30 08:04:44 -06:00
David Sparer
021a3fe3bc Created interface IConnectionsUpdateChecker and modified SqlConnectionsUpdateChecker to implement it 2016-09-30 08:02:02 -06:00
David Sparer
0d70033e4c Some code rearranging 2016-09-30 08:01:15 -06:00
David Sparer
812cf21f98 Some updates that should have been committed with the last rename 2016-09-30 08:00:34 -06:00
David Sparer
f0da088836 Renamed SqlConnectionsProvider to PeriodicConnectionsUpdateChecker to better indicate its purpose 2016-09-30 07:50:49 -06:00
David Sparer
d7501751e3 Removed the SqlUpdateQueryBuilder since it serves very little purpose 2016-09-30 07:49:10 -06:00
David Sparer
94648f072e Code cleanup 2016-09-29 15:02:12 -06:00
David Sparer
a7d34b2c1b Code cleanup 2016-09-29 15:01:19 -06:00
Bennett Blodinger
26403096e8 .github support
Adds initail support for GitHub settings
2016-09-29 14:37:01 -04:00
David Sparer
62190bde17 Resolved crash that would sometimes occur when working with interfacecontrols 2016-09-29 11:38:40 -06:00
David Sparer
293b3d90b9 Cleanup 2016-09-29 11:31:35 -06:00
David Sparer
1928b904e5 Minor cleanup 2016-09-29 11:29:16 -06:00
David Sparer
a71cf6080f Fixed bug where loading a new connection file or creating a new one would not update the connection tree 2016-09-29 11:01:06 -06:00
David Sparer
14d56c3e28 Fixed crash when adding node with no treenode selected 2016-09-29 10:33:59 -06:00
Sean Kaim
707e3bc08f code cleanup 2016-09-29 11:57:23 -04:00
Sean Kaim
0614aef362 fix minor post build event errors 2016-09-29 11:50:05 -04:00
David Sparer
2ff9a7ff22 Large code cleanup of the ConnectionWindow class 2016-09-29 09:16:57 -06:00
David Sparer
3e4cfc16df Simplified teh ConnectionWindow drag_over handler and made it safer (actually does type checking) 2016-09-28 15:26:18 -06:00
David Sparer
fcd846bd6d Dragging connections/folder onto a connection panel now opens the connection(s). This restores functionality for dragging single connections, but is new functionality for folders 2016-09-28 15:09:50 -06:00
David Sparer
05028c958e Fixed crash that would occur when double clicking inside a connection window after disconnecting 2016-09-28 15:08:40 -06:00
David Sparer
40455e199b Fixed bug that would occasionally cause crashes when clicking 2016-09-28 15:05:04 -06:00
David Sparer
e5c9ccbdcc Moved all database connectors to the Config.DatabaseConnectors namespace 2016-09-28 14:15:39 -06:00
David Sparer
be22ebd789 Code cleanup 2016-09-28 13:57:35 -06:00
David Sparer
050d12a8ec Created tests for the ConnectionInfoComparer 2016-09-28 13:52:21 -06:00
David Sparer
5746d0264a Extracted some methods in the ExternalToolArgumentParser to make it more readable 2016-09-28 11:50:09 -06:00
David Sparer
0a4010d9a9 Created more test cases for the ExternalToolArgumentParser 2016-09-28 11:49:28 -06:00
David Sparer
ab30dd2294 Extracted a method in ExternalToolArgumentParser 2016-09-28 11:49:02 -06:00
David Sparer
f53e77ecc9 Added a few more parser tests 2016-09-28 10:53:06 -06:00
David Sparer
91da8f1b5f Reset the position of the main menu. At some point it got pushed to the side again 2016-09-28 09:57:35 -06:00
David Sparer
1bf616579b Added tests for the external tools arg parser 2016-09-28 09:50:38 -06:00
David Sparer
da2d48b49a Minor code cleanup 2016-09-28 08:20:16 -06:00
David Sparer
48b209155b Renamed class to be more indicative of its use 2016-09-28 08:10:13 -06:00
David Sparer
7fe8749807 Resolved bug with the Reconnect context menu item being permanently disabled for containers 2016-09-27 14:52:06 -06:00
David Sparer
b73547ced9 Connecting to an entire folder working again 2016-09-27 14:44:35 -06:00
David Sparer
9c8c22979f Resolved bug where hitting the delete key would bring up the prompt to delete root nodes and putty nodes 2016-09-27 13:56:03 -06:00
David Sparer
60b387ac56 Adding a new node will expand the parent container, select the new node, and ensure the new node is visible. Extracted a method since these actions are identical for both containers and connections 2016-09-27 10:36:30 -06:00
David Sparer
20339c1452 Fixed bug when trying to refresh the display of a folder that had 0 children but now has some 2016-09-27 10:33:34 -06:00
David Sparer
7a15a8151c Resolved error when attempting to connect to PuTTY session 2016-09-27 09:21:15 -06:00
David Sparer
967d9b1036 Renamed properties and fields of the Windows class to conform to naming guidelines 2016-09-26 15:27:41 -06:00
David Sparer
faec28ac78 Removed unused code 2016-09-26 15:25:18 -06:00
David Sparer
0832c8610b Removed unused code 2016-09-26 15:17:26 -06:00
David Sparer
fa7ca994e9 ConnectionList served no purpose and was removed 2016-09-26 15:10:32 -06:00
David Sparer
288221918e ContainerList serves no purpose 2016-09-26 15:07:59 -06:00
David Sparer
5462e96090 Removed unused code 2016-09-26 15:02:12 -06:00
David Sparer
a1b5d8bdc5 Removed unused code 2016-09-26 14:59:14 -06:00
David Sparer
bd280ad2b6 Removed unused code 2016-09-26 14:53:32 -06:00
David Sparer
0c460f7aab Removed unused code 2016-09-26 14:49:32 -06:00
David Sparer
634c420799 Refactored the SqlSaver code to use the new functions 2016-09-26 14:49:16 -06:00
David Sparer
0bdb57c44e Removed reference to unnecessary method 2016-09-26 14:47:41 -06:00
David Sparer
2540777e18 Removed unnecessary code 2016-09-26 14:12:06 -06:00
David Sparer
eaced33ed5 Refactored some code for creating a menu tree of the connectiontreemodel 2016-09-26 14:07:33 -06:00
David Sparer
0b97c47f4e Removed unused code 2016-09-26 13:18:36 -06:00
David Sparer
584075a9b1 Fixed the connections dropdown list 2016-09-26 13:13:11 -06:00
David Sparer
3febb2be5e Removed unused code 2016-09-26 12:53:42 -06:00
David Sparer
c4a9841ba6 Refactored Export and ExportForm to require ConnectionInfo rather than TreeNode for export 2016-09-26 12:51:28 -06:00
David Sparer
c613c3b4e1 Updated the ISerialize interface to require a Serialize(ConnectionInfo) method to support serializing a target connection/container 2016-09-26 12:22:55 -06:00
David Sparer
814f07212d Made ISerializer generic 2016-09-26 11:58:48 -06:00
David Sparer
a63120b78f Code cleanup 2016-09-26 11:43:47 -06:00
David Sparer
598a39fcc1 Removed unnecessary code 2016-09-26 11:28:37 -06:00
David Sparer
425fdb502c Removed unnecessary code and implemented directly in the calling class 2016-09-26 11:28:05 -06:00
David Sparer
3016ef8545 Removed unnecessary code 2016-09-26 11:22:05 -06:00
David Sparer
87b4dd09e4 Rewrote Sql connection loading to use the DataProvider/Deserializer 2016-09-26 11:19:53 -06:00
David Sparer
95f54b9330 Made IDataProvider generic to support multiple data formatting types (mostly to help with database support and DataTables) 2016-09-26 09:35:40 -06:00
David Sparer
1a8d4ea7fd Removed unnecessary code 2016-09-26 09:21:45 -06:00
David Sparer
e27424102b Removed unused code 2016-09-26 09:15:17 -06:00
David Sparer
d35540e691 Code cleanup 2016-09-25 14:42:03 -06:00
David Sparer
bda536cc62 Call to the message collector is causing tests to fail. Will need a test-safe way of indicating failure 2016-09-25 14:35:18 -06:00
David Sparer
cf3443ace3 Disabled password import tests for the RemoteDesktopConnectionManagerDeserializer. Since the passwords are encrypted using a machine key, decryption on other machines will always fail. 2016-09-25 14:32:01 -06:00
David Sparer
b8e05fc7da Refactored the DecryptPassword function in RemoteDesktopConnectionManagerDeserializer to use managed rather than native functions 2016-09-25 14:27:27 -06:00
David Sparer
ddfbb1d42e Created tests for PuttyConnectionManagerDeserializer 2016-09-25 14:01:43 -06:00
David Sparer
c4c255d560 Created tests for PortScanDeserializer 2016-09-25 13:28:01 -06:00
David Sparer
b1fd47ff9d Renamed the Scanner class to PortScanner 2016-09-25 12:29:30 -06:00
David Sparer
636848ed26 Split the ScanHost class to its own file. 2016-09-25 12:27:58 -06:00
David Sparer
6e713ebd83 Moved some tests to the right namespace 2016-09-25 12:16:19 -06:00
David Sparer
80a4d2af59 Created tests for various bad version/schema scenarios 2016-09-25 12:10:48 -06:00
David Sparer
d0153da3d1 Created more tests for teh RemoteDesktopConnectionManagerDeserializer 2016-09-25 11:32:02 -06:00
David Sparer
aa6f467942 Made the parsing code a bit safer 2016-09-25 11:31:41 -06:00
David Sparer
34f8a123a5 Resolved bug with importing gateway password from RDCMan when not stored in clear text 2016-09-25 11:11:06 -06:00
David Sparer
63ae7d845c Code cleanup 2016-09-25 10:55:41 -06:00
David Sparer
12d8097774 Ensured UseConsoleSession bool could be parsed 2016-09-25 10:55:22 -06:00
David Sparer
ae4ce70c48 Began creating tests for the RemoteDesktopConnectionManagerDeserializer 2016-09-25 10:39:06 -06:00
David Sparer
cc43eab6ee Removed unnecessary code 2016-09-25 10:38:29 -06:00
David Sparer
ea5ec58ca3 Made the version checker a bit safer 2016-09-25 09:56:43 -06:00
David Sparer
775499a1ff Created more tests for the RemoteDesktopConnectionDeserializer 2016-09-24 12:18:37 -06:00
David Sparer
46d04541f1 Began creating unit tests for RemoteDesktopConnectionDeserializer 2016-09-23 23:13:19 -06:00
David Sparer
d80497011b Removed unnecessary code 2016-09-23 13:00:58 -06:00
David Sparer
02fea4ad5d Code cleanup 2016-09-23 12:48:56 -06:00
David Sparer
effc6fc9dd PortScanDeserializer created. Import now working 2016-09-23 12:47:48 -06:00
David Sparer
300fb55ec5 Created ActiveDirectoryDeserializer. Import is now working 2016-09-23 12:03:36 -06:00
David Sparer
8a1f2cbca8 Moved all serializers/deserializers to the mRemoteNG.Config.Serializers namespace 2016-09-23 11:06:13 -06:00
David Sparer
dec411e866 Created PuttyConnectionManagerDeserializer. Import is now working 2016-09-23 10:59:16 -06:00
David Sparer
88f40841d4 Code cleanup 2016-09-23 10:33:01 -06:00
David Sparer
c73aaa5455 Renamed PuttyConnectionManager to PuttyConnectionManagerImporter 2016-09-23 10:19:58 -06:00
David Sparer
6bf493f9a1 Created a RemoteDesktopConnectionManagerDeserializer. Importing from RDCM now works 2016-09-23 10:12:18 -06:00
David Sparer
b0be42815d Cleanup of RDCM Importer 2016-09-23 08:49:29 -06:00
David Sparer
79a423fc18 Renamed RemoteDesktopConnectionManager to RemoteDesktopConnectionManagerImporter 2016-09-23 08:38:08 -06:00
David Sparer
7047f2580f Cleanup 2016-09-22 15:24:06 -06:00
David Sparer
e8080aff58 Renamed ActiveDirectory to ActiveDirectoryImporter 2016-09-22 15:22:46 -06:00
David Sparer
d8ffed6e75 Renamed PortScan to PortScanImporter 2016-09-22 15:21:35 -06:00
David Sparer
0a3f201cb7 Created a deserializer for microsoft RDC and updated the importer 2016-09-22 15:20:28 -06:00
David Sparer
00adac42b8 mRemoteNG import doesnt need to be static 2016-09-22 15:17:54 -06:00
David Sparer
9a07ac075f Renamed RemoteDesktopConnection to RemoteDesktopConnectionImporter 2016-09-22 14:21:20 -06:00
David Sparer
44053f92c6 Importing mremoteng export files now works again 2016-09-22 14:17:34 -06:00
David Sparer
21475e0596 Small code cleanup 2016-09-22 12:38:50 -06:00
David Sparer
3ac09748db Opening a loading a putty session and showing the putty configuration window will no longer freeze mRemoteNG 2016-09-22 12:31:22 -06:00
David Sparer
91ff0786cc Rearranged some functions 2016-09-22 12:30:18 -06:00
David Sparer
45b207f399 Added property changed event handler to the connection tree. Model property updates will now be immediately reflected by the tree view 2016-09-22 12:06:18 -06:00
David Sparer
d7d15a0ab3 Fixed a typo in the ConnectionTreeModel's NotifyPropertyChanged event propogation 2016-09-22 12:04:30 -06:00
David Sparer
bce8d2e4b8 Forgot to commit this bit 2016-09-22 11:56:46 -06:00
David Sparer
d4e48e8b63 Fixed bug where app would crash when changing node name from config window 2016-09-22 11:56:12 -06:00
David Sparer
6de57ee0d4 ConnectionTreeModel now implements INotifyPropertyChanged and subscribes to child events 2016-09-22 11:55:28 -06:00
David Sparer
c3c9bb33a2 Code cleanup 2016-09-22 11:46:26 -06:00
David Sparer
ff4e6ab3ca Fixed bug where nodes could be dragged (with errors) above or below the root connections node 2016-09-22 10:45:00 -06:00
David Sparer
b646e7ef70 Minor optimization tree refresh when dragging nodes between containers. There is still a small disruption in the UI (~200ms) when moving nodes between containers. 2016-09-22 10:36:37 -06:00
David Sparer
981919335d Resolved a severe performance issue with refreshing the tree after drag-n-drop operations 2016-09-21 14:06:05 -06:00
David Sparer
42fcdd2267 Renamed variable to be more in line with other uses in the class 2016-09-21 10:43:01 -06:00
David Sparer
2b6367a8a9 Fixed bug where connections/containers could be dragged between putty session nodes 2016-09-21 10:38:41 -06:00
David Sparer
cbe0c1a550 Created tests for model-dropped 2016-09-21 10:22:25 -06:00
David Sparer
759c072c11 Refactored ModelDropped handler to be more test-friendly 2016-09-21 10:22:10 -06:00
David Sparer
d39e2a506f Added tests 2016-09-21 09:55:46 -06:00
David Sparer
f035872592 Extracted a method to increase readability 2016-09-21 09:55:33 -06:00
David Sparer
0324225c38 Added new convenience/optimization functions to containerinfo 2016-09-21 09:40:33 -06:00
David Sparer
a352516176 Fixed a bug where you could try to drag connection/containers onto a root putty session node 2016-09-21 09:38:54 -06:00
David Sparer
07fab69221 Created more tests for drag and drop handler 2016-09-21 09:35:07 -06:00
David Sparer
82804c1390 Fixed small bug in the drag and drop handler refactor that was causing info messages to not refresh all the time. 2016-09-21 09:10:32 -06:00
David Sparer
536d6f7c29 Refactored ConnectionTreeDragAndDropHandler to be more unit-test friendly. Began creating unit tests for it 2016-09-21 09:03:11 -06:00
David Sparer
a4ec3291ca Small drop-n-drop optimization 2016-09-20 13:56:03 -06:00
David Sparer
10420d9e7f ConnectionTreeWindow now updates its treelistview based on eventing from its ConnectionTreeModel 2016-09-20 13:03:25 -06:00
David Sparer
522d139044 ConnectionTreeModel now listens for and propogates collection changed events on child members 2016-09-20 13:02:15 -06:00
David Sparer
81a944a95c ContainerInfo objects now subscribe to child collection changed events 2016-09-20 13:01:17 -06:00
David Sparer
75b4ea175b Small cleanup 2016-09-20 12:27:20 -06:00
David Sparer
62b1402b43 Removing putty sessions now updates the treelistview as expected 2016-09-20 12:23:55 -06:00
David Sparer
688dbd1ce9 Added a convenience property and a way to remove sessions that triggers eventing 2016-09-20 12:07:05 -06:00
David Sparer
941e3d5904 Added putty model update code to tree view. Adding putty sessions works as expected 2016-09-20 12:00:04 -06:00
David Sparer
a938e098e5 Added support for propogating child session collection changed events 2016-09-20 11:36:45 -06:00
David Sparer
1bda39bc7e Implemented collectionchanged event on puttysessionprovider 2016-09-20 11:29:05 -06:00
David Sparer
6c5fedb631 Made the puttyrootnode property on puttysessionsproviders virtual to allow overriding 2016-09-20 11:13:45 -06:00
David Sparer
55e48742a9 Code cleanup 2016-09-20 10:48:20 -06:00
David Sparer
9a13273726 Renamed event SessionChanged to PuttySessionChanged 2016-09-20 10:37:39 -06:00
David Sparer
45e641067b Renamed SessionChangedEventHandler to PuttySessionChangedEventHandler 2016-09-20 10:36:39 -06:00
David Sparer
6a7dedfe67 Renamed SessionChangedEventArgs to PuttySessionChangedEventArgs 2016-09-20 10:35:58 -06:00
David Sparer
28fa043b32 Added support to the SessionChangedEventArgs to allow providing which session changed 2016-09-20 10:35:20 -06:00
David Sparer
d7c339ccea Refactored some of the eventing code in AbstractPuttySessionsProvider to make it less complex 2016-09-20 10:24:42 -06:00
David Sparer
cdc6567628 Forgot to commit this change to the Args change 2016-09-20 10:23:46 -06:00
David Sparer
fb315fd782 Moved the SessionChangedEventArgs to its own class file. Embeded classes are generally not a good idea 2016-09-20 10:23:03 -06:00
David Sparer
0907a19821 Renamed PuttySessionManager.AddSessionsToTree to just AddSessions to reflect that it does not directly work on any tree objects. Implemented the CollectionChanged event for the sessions providers collection 2016-09-20 10:12:46 -06:00
David Sparer
00b0552e5e Made PuttySessionManager a singleton rather than static. Began implementing collectionchanged event to notify when the putty session list changes 2016-09-20 09:55:05 -06:00
David Sparer
9949907adc Slightly better way to set root nodes on the treelistview 2016-09-20 09:50:20 -06:00
David Sparer
94ab1ddfbc Slight optimization of the treelistview CanExpandGetter 2016-09-20 09:49:47 -06:00
David Sparer
c13ff71f9a Abstracted the way we refresh tree model objects 2016-09-20 09:36:39 -06:00
David Sparer
e64ebf06f1 Fixed bug with calling CollectionChanged when sorting container children 2016-09-20 09:34:22 -06:00
David Sparer
20f527ae94 Created more ContainerInfo tests 2016-09-20 09:07:30 -06:00
David Sparer
1b0f9fcd88 Created more ContainerInfo tests 2016-09-20 09:02:03 -06:00
David Sparer
05799767a0 Added more ContainerInfo tests. Refactored a bit 2016-09-20 08:54:41 -06:00
David Sparer
86cb233cf6 Implemented INotifyCollectionChanged on the container children list rather than the INotifyPropertyChanged. It makes more sense, though we will need to implement UI refresh listeners on the TreeListView manually now (objectlistview currently only respects INotifyPropertyChanged events) 2016-09-20 08:37:44 -06:00
David Sparer
5838ff045a Implemented INotifyPropertyChanged for the Children proptery of the ContainerInfo object 2016-09-19 13:00:23 -06:00
David Sparer
95ddca0d7c Implemented INotifyPropertyChanged on AbstractConnectionInfoData (and thus on every connectioninfo subtype) 2016-09-19 12:54:01 -06:00
David Sparer
a03e2783d4 Created another level of abstraction between the data shared by all connection info objects and the behavior shown by certain connection info objects 2016-09-19 11:25:58 -06:00
David Sparer
f0638b0dd8 Cleanup 2016-09-19 10:58:37 -06:00
David Sparer
ab3e00f42c Fixed issue with using the proper tree images for the putty nodes 2016-09-19 10:44:23 -06:00
David Sparer
c67971035d Only show putty provider if it has sessions 2016-09-19 10:40:40 -06:00
David Sparer
3c55446e86 Putty sessions now being shown in connection tree again 2016-09-19 10:38:08 -06:00
David Sparer
fd559b61b1 Renamed PuttySessionsProvider to AbstractPuttySessionsProvider 2016-09-19 08:44:08 -06:00
David Sparer
77ca139363 Renamed class "Sessions" to "PuttySessionsManager" 2016-09-19 08:13:12 -06:00
David Sparer
f0828d3870 Some code cleanup 2016-09-19 08:08:34 -06:00
David Sparer
0e4ffde6ca Some file/class renaming 2016-09-15 13:41:32 -06:00
David Sparer
a50f96606b Resolved bug when editing a tree node name - the context menu would steal keyboard input for its shortcut keys 2016-09-15 13:31:00 -06:00
David Sparer
ecb77238a3 Sorting nodes now works (ascending/descending) 2016-09-15 12:05:46 -06:00
David Sparer
3fe5801366 Context menu item enable/disabled based on node type is now working again 2016-09-15 10:01:20 -06:00
David Sparer
9807231b72 Basic switch has been completed. Most context menu actions are working as expected. 2016-09-15 09:56:04 -06:00
David Sparer
eed85b3641 Finished creating pass-through events for the underlying context menu 2016-09-15 09:06:54 -06:00
David Sparer
7d7d4e62a3 Began moving connection tree context menu to its own class 2016-09-14 15:26:21 -06:00
David Sparer
f0f9d2a6aa Little bit of cleanup 2016-09-14 15:07:19 -06:00
David Sparer
7b2a30dcbf Starting external tools from the connections tree now works 2016-09-14 14:52:47 -06:00
David Sparer
b214efc029 Fixed SSH transfer window creation from context menu 2016-09-14 14:41:13 -06:00
David Sparer
e74884bcea any letter or number key press while the connections tree has focus will activate the search box 2016-09-14 14:27:31 -06:00
David Sparer
4accd71744 Hitting escape while the search box has focus switches focus to the connections tree 2016-09-14 14:19:43 -06:00
David Sparer
fa7c170540 Rather than yellow highlight, just make the node highlightling the same whether the contol has focus or not 2016-09-14 13:59:30 -06:00
David Sparer
92360eb2ce Fixed node search bug when no results are returned. 2016-09-14 13:58:51 -06:00
David Sparer
b13382a6ee Hooked up the keydown event with the new connection tree 2016-09-14 13:19:31 -06:00
David Sparer
b9718edfd3 Folders will now expand when scrolling through search results 2016-09-14 13:07:08 -06:00
David Sparer
d3e2976ff9 Scrolling through search results now ensures that the node is visible. Up/down keys no longer move the search box text cursor 2016-09-14 12:38:54 -06:00
David Sparer
5e84b7cffe Made search match nodes highlighted in yellow 2016-09-14 12:24:22 -06:00
David Sparer
764eb764ce Fixed case sensitivity when searching for nodes 2016-09-14 12:23:42 -06:00
David Sparer
a992b41e26 Refactored node searching to a new class 2016-09-14 11:43:40 -06:00
David Sparer
7d882c3f74 Added function to get all children of the connectiontreemodel, including root nodes 2016-09-14 11:42:56 -06:00
David Sparer
668e8de7df Removed unnecessary code 2016-09-14 10:19:53 -06:00
David Sparer
29ad420916 ExpandAll and CollapseAll now work 2016-09-14 10:17:43 -06:00
David Sparer
f743942e65 Fixed ExpandAll 2016-09-14 10:06:56 -06:00
David Sparer
0a120e402e Removed unnecessary code 2016-09-14 10:05:38 -06:00
David Sparer
6bc0c79624 Created a convenience function for determining if a container has children 2016-09-14 10:00:27 -06:00
David Sparer
6860ddced3 Reimplemented confirmation boxes when deleting tree nodes 2016-09-14 09:59:57 -06:00
David Sparer
ddf5e38396 Fixed minor bug where folders with no contents had an expand button 2016-09-14 09:44:15 -06:00
David Sparer
2ff2e448be Removed unnecessary code 2016-09-14 09:40:15 -06:00
David Sparer
9882dda905 Resolved issue with tree actions from the File menu. This is still an ugly fix, but its working 2016-09-14 09:27:05 -06:00
David Sparer
88d005caf6 Rearranged some event handler declarations 2016-09-14 08:59:03 -06:00
David Sparer
eba5fc9caf Slight optimization of updating the tree when deleting a node. Refresh one row rather than the whole tree 2016-09-14 08:39:12 -06:00
David Sparer
3a2f35f697 Duplicating a node now places it under the node that it was copied from, rather than the bottom of the list. (this was the previous behavior) 2016-09-14 08:36:58 -06:00
David Sparer
2ba3e95379 Removed unnecessary tooltip code 2016-09-14 07:59:36 -06:00
David Sparer
023570298b Removed unnecessary code 2016-09-14 07:41:38 -06:00
David Sparer
cf7e4d1f52 Moved GetExtAppByName() back to Runtime. Will make more sense for later refactoring 2016-09-12 10:20:35 -06:00
David Sparer
a09ce702c1 Removed unnecessary code 2016-09-12 10:17:14 -06:00
David Sparer
4c6f5dd72d Renamed some variables to adhere to style guidelines 2016-09-12 10:12:00 -06:00
David Sparer
dabed1568c Removed another OpenConnection overload that didnt take a connectioninfo object 2016-09-12 10:09:15 -06:00
David Sparer
79dee21f9b Removed empty arg overload for OpenConnection(). We always require a connectioninfo object 2016-09-12 10:07:05 -06:00
David Sparer
6ccbe69c02 Retargeted all Runtime.OpenConnection() to ConnectionInitiator.OpenConnection(). Will help with later iterative refactors 2016-09-12 10:00:53 -06:00
David Sparer
3ad8a14786 Initial refactor of connection initiation (which is heavily tied into how the connection tree was previously being managed) 2016-09-12 09:52:12 -06:00
David Sparer
c79ee46551 Removed unnecessary code 2016-09-12 08:49:32 -06:00
David Sparer
b391940037 Merge branch 'develop' into MR-975_Replace_TreeView_with_TreeListview
# Conflicts:
#	mRemoteV1/Config/SqlDatabaseConnector.cs
#	mRemoteV1/Tree/Root/RootPuttySessionsNodeInfo.cs
2016-09-12 08:40:43 -06:00
Sean Kaim
d5a54dd63d code clean up 2016-09-09 17:08:27 -04:00
Sean Kaim
6799ac2b30 code clean up 2016-09-09 17:08:15 -04:00
Sean Kaim
2f10e60dbf code clean up 2016-09-09 16:39:24 -04:00
Sean Kaim
95c818d92e code clean up
Octet1.Text.Remove didn't actually do anything. Text is already removed
properly when backspace is pressed without this code in the event
handlers.
2016-09-09 16:23:03 -04:00
David Sparer
e6f846107a drag-n-drop now supports rearranging nodes. Fixed a small bug with child rearrangement 2016-09-09 14:05:22 -06:00
Sean Kaim
b757ab7424 MR-979 - switched to notifications pnl incorrectly 2016-09-09 15:46:21 -04:00
David Sparer
d439a0df00 Created functions to rearrange child nodes. Moving nodes up/down now working 2016-09-09 12:03:35 -06:00
David Sparer
c3e14afe0a Created localization strings for drag-n-drop feedback messages 2016-09-09 10:33:20 -06:00
David Sparer
22f43d63ec Renamed drag-n-drop handlers 2016-09-09 10:32:25 -06:00
David Sparer
07c364cf0b Added support for changing the feedback color when dropping a node is allowed/denied. Removed unnecessary code 2016-09-09 10:18:52 -06:00
David Sparer
96485d9b9f Added check to prevent dragging a node onto the folder in which it already resides 2016-09-09 10:11:53 -06:00
David Sparer
4cdfeeecf2 Turns out we didn't need a custom Equals comparer for ConnectionInfo. Rolling back since it's probably best to keep the default implementation unless we actually need a custom one. 2016-09-09 09:57:21 -06:00
David Sparer
00abd53b19 Fixed issue with preventing dragging node onto itself. Feedback highlighting is disabled when attempting to drag un-draggable node. 2016-09-09 09:56:30 -06:00
Sean Kaim
6666552b8a code clean up and ensure settings save 2016-09-09 11:54:06 -04:00
David Sparer
b65fdbdd78 Overrode the Equals method for ConnectionInfo. Equality based on ConstantID 2016-09-09 09:50:06 -06:00
David Sparer
7c7d791f31 Renamed a few variables and created a check for dragging a node onto itself 2016-09-09 09:40:18 -06:00
David Sparer
d66f333bd5 Refactored drag-n-drop code to its own class 2016-09-09 09:35:13 -06:00
Sean Kaim
5afb9c572e code clean up 2016-09-09 11:31:43 -04:00
David Sparer
866aeab76b Changed the drag-drop highlight color 2016-09-09 08:25:56 -06:00
Sean Kaim
ae13b5f920 code clean up/remove unused files 2016-09-09 10:24:02 -04:00
David Sparer
cfbcb502d8 Removed unnecessary code 2016-09-08 10:54:36 -06:00
David Sparer
5f8d274b94 Drag and drop now working 2016-09-08 10:50:47 -06:00
David Sparer
092171982b Modified the IHasParent interface to include another common method 2016-09-08 09:10:52 -06:00
David Sparer
30ccc0c76c Resolved bug that broke the "child node only ever has one parent" rule 2016-09-08 09:01:21 -06:00
David Sparer
bf23d78e41 Node tool tips now working. Removed unnecessary code 2016-09-08 08:32:08 -06:00
David Sparer
08466f5179 Refactored the single node click event handler to handle the CellClick event instead of MouseClick to be more in line with the double click event handler 2016-09-08 08:24:01 -06:00
David Sparer
4ca07d534b Double click actions on tree nodes now working 2016-09-08 08:22:23 -06:00
David Sparer
3237875aee Merge branch 'develop' into MR-975_Replace_TreeView_with_TreeListview 2016-09-08 07:53:49 -06:00
David Sparer
c8db438cca Fixed single mouse click on node 2016-09-07 15:28:22 -06:00
David Sparer
5ea2304d5e Duplicating nodes now works 2016-09-07 14:36:52 -06:00
Sean Kaim
197652f8eb lock the file menu in place 2016-09-07 16:26:37 -04:00
Sean Kaim
80b16d8b57 lock the file menu in place 2016-09-07 16:10:32 -04:00
Sean Kaim
b8d78c1733 lock the file menu in place 2016-09-07 15:08:01 -04:00
David Sparer
8bf5004147 Fixed nullref error when attempting to delete a node when nothing is selected 2016-09-07 12:49:41 -06:00
David Sparer
89538e7289 New folders created with "New Folder" as the text 2016-09-07 12:47:51 -06:00
David Sparer
ff46d39a6a AddFolder now working 2016-09-07 12:45:44 -06:00
David Sparer
b843a55a25 AddNode is working 2016-09-07 12:41:07 -06:00
David Sparer
54008af8bf Deep clone for containers 2016-09-07 10:40:38 -06:00
David Sparer
d73f0d2401 Resolved nullref error with SetParent 2016-09-07 10:36:03 -06:00
David Sparer
86228e4270 Updated some Clone methods to be deeper 2016-09-07 10:29:16 -06:00
David Sparer
5ab5688844 Renamed Inheritance.Copy to Clone 2016-09-07 10:02:45 -06:00
David Sparer
53cb4149da Missed a commit for the Copy -> Clone rename 2016-09-07 09:52:55 -06:00
David Sparer
1056e20ec2 Renamed Copy to Clone 2016-09-07 09:47:15 -06:00
David Sparer
a589f337b7 Removed more unnecessary code 2016-09-07 09:37:12 -06:00
David Sparer
73ee88ab08 Removed unnecessary code 2016-09-07 09:28:41 -06:00
David Sparer
1e68483deb - Renamed IParent to IHasParent
- Renamed Add, AddRange, Remove, RemoveRange to include the word "Child" to make it more explicit
- Added SetParent and RemoveParent functions
- DeleteNode now works
2016-09-07 09:24:30 -06:00
Sean Kaim
9c168087af code cleanup / moved try in CloseConnectionTab 2016-09-07 11:21:22 -04:00
Sean Kaim
d988644b6a code cleanup/system colors for form/msg format 2016-09-07 11:00:03 -04:00
David Sparer
22c21222d3 Added more TODO notes for functionality that needs to be fixed for the treelistview change 2016-09-07 07:34:40 -06:00
David Sparer
73627a680c AfterSelect event working again 2016-09-06 18:56:28 -06:00
David Sparer
e70e8262e6 EnsureRootNodeVisible now works 2016-09-06 18:08:17 -06:00
David Sparer
8a74809ea4 Fixed opening previous connections to work with the tree list view 2016-09-06 18:05:46 -06:00
David Sparer
9cf3c23328 Disabled full row select to be more in line with previous functionality 2016-09-06 16:37:39 -06:00
David Sparer
40347c09ba minor update 2016-09-06 15:28:56 -06:00
David Sparer
64ed15ffae Got the tree node images working with the new TreeListView 2016-09-06 15:28:38 -06:00
David Sparer
617ec4cc3e Moved the code for generating a recursive list of children to ContainerInfo where it makes more sense. Left a helper function in ConnectionTreeModel where it may still be useful 2016-09-06 14:55:19 -06:00
David Sparer
bec154e538 Resolved issue serializing the connection tree node types (connect/container) 2016-09-06 14:48:53 -06:00
David Sparer
6e565c0b31 Fixed support for saving tree node expansion 2016-09-06 14:41:59 -06:00
David Sparer
c2b32de533 Added support for expanding all previously expanded nodes 2016-09-06 14:11:40 -06:00
David Sparer
454f007e42 Created helper function GetChildList in ConnectionTreeModel to retrieve a flat list of all connections/folders under a particular node 2016-09-06 13:59:10 -06:00
David Sparer
44a81cb7d8 Fixed scheme issue in the data table serializer 2016-09-06 13:57:26 -06:00
David Sparer
4623853399 Rearranged some code 2016-09-06 13:03:41 -06:00
David Sparer
15c894845c Created function to expand the root node on load. Refactored some delegate code 2016-09-06 12:58:27 -06:00
David Sparer
10597aed2f Renamed the Name column 2016-09-06 12:38:06 -06:00
David Sparer
2810fa7f80 Removed unnecessary tree update function. Added TODO comments for all functionality broken by the change to the TreeListView 2016-09-06 12:33:50 -06:00
David Sparer
a6dbc59ad1 Made the connection node name column take up all available space (similar to previous implementation) 2016-09-06 12:32:34 -06:00
David Sparer
1afe93be66 Began implementing TreeListView to replace the regular TreeView for the connection list. This will utilize a virtual list rather than a concrete set of tree nodes to model the connection list hierarchy. 2016-09-06 12:14:11 -06:00
David Sparer
1bd6839b21 Resolved bug with loading folders from SQL 2016-09-06 09:24:39 -06:00
David Sparer
b5e3564724 Fixed null ref error when viewing folders in some situations 2016-09-02 15:20:41 -06:00
David Sparer
8b143a2713 Fixed issue with creating node hierarchy 2016-09-02 15:07:22 -06:00
David Sparer
543f5e126f Fixed enum casts in DataTableSerializer 2016-09-02 14:54:34 -06:00
Sean Kaim
a5ac70cd3f changelog 2016-09-02 15:42:45 -04:00
Sean Kaim
07ed1b3f74 MR-586 - Reduce document title length
Also, code clean up...
2016-09-02 15:17:32 -04:00
Sean Kaim
7218208355 code clean up 2016-09-02 13:04:29 -04:00
David Sparer
d483c6a726 Merge branch 'develop' into MR-975_Replace_TreeView_with_TreeListview
# Conflicts:
#	mRemoteV1/App/Runtime.cs
#	mRemoteV1/UI/Window/ConnectionTreeWindow.cs
2016-09-02 09:20:58 -06:00
David Sparer
cb3fe686f3 Renamed function to be a bit more descriptive 2016-09-01 13:25:36 -06:00
Sean Kaim
69477cf3b4 changelog update 2016-08-30 17:07:10 -04:00
Sean Kaim
c114c68f15 MR-938 - add resolution / code clean up 2016-08-30 16:31:46 -04:00
Sean Kaim
1858c0f000 remove unused references 2016-08-30 15:36:02 -04:00
Sean Kaim
5c203c8e30 fix theme 2016-08-29 17:56:18 -04:00
Sean Kaim
005425efb1 code clean up 2016-08-29 17:31:34 -04:00
Sean Kaim
0c87954755 code cleanup 2016-08-29 17:19:13 -04:00
Sean Kaim
3c11092af1 changelog updates 2016-08-29 17:18:56 -04:00
Sean Kaim
4b71540dc7 default menu and quickconnect to same line
The Main menu bar, and the QuickConnect bar should now default to the
same line in the UI (though, forwhatever reason, it doesn't look like
this in VS Designer 😕 )

Code Clean up including rafactor QuickConnectComboBox to the correct
namespace.

Slightly related to MR-458
2016-08-29 16:48:47 -04:00
Sean Kaim
e22e3967f5 code cleanup 2016-08-29 16:11:38 -04:00
Sean Kaim
50809f45a3 MR-366 - Show PuTTY type and version
on components check screen
2016-08-29 15:12:41 -04:00
Sean Kaim
82bbf9d39f fix non-portable build failure 2016-08-26 17:18:01 -04:00
Sean Kaim
4692b20a74 more code clean up 2016-08-26 17:07:59 -04:00
Sean Kaim
9a32aa3350 code clean up 2016-08-26 17:00:01 -04:00
Sean Kaim
6d1fa4764d code clean up 2016-08-26 16:10:24 -04:00
Sean Kaim
267af5d6db Update strings: VncSharpNG to VncSharp 2016-08-26 15:59:15 -04:00
Sean Kaim
4bcb06c35b Update .gitignore 2016-08-26 12:00:42 -04:00
David Sparer
ff14c91fe1 First attempt at deserializing hierarchy from flat database 2016-08-25 15:16:56 -06:00
David Sparer
a0f7241f85 Fixed db schema error 2016-08-25 15:15:58 -06:00
Sean Kaim
66e7dfe6d5 update .gitignore 2016-08-25 16:49:02 -04:00
David Sparer
1538628e16 minor code cleanup 2016-08-25 14:45:18 -06:00
David Sparer
1b9d18adc1 Began creating the DataTableDeserializer 2016-08-25 14:44:31 -06:00
David Sparer
124ebaa970 Built out the SqlDataProvider 2016-08-25 14:44:04 -06:00
David Sparer
b44e657279 made the DataTableSerializer more closely conform to the current DB schema 2016-08-25 14:43:43 -06:00
David Sparer
de24dbbb7a Resolved small bug with uninitialized sql dbs 2016-08-25 13:21:49 -06:00
David Sparer
60f79b4400 Fixed bug where uninitialized sql database would not load 2016-08-25 13:13:08 -06:00
David Sparer
03c8f96a46 Created serializer which creates a data table. This can then be used for more efficient bulk Sql transfers 2016-08-25 11:16:49 -06:00
David Sparer
13d833ac5c Very minor code cleanup 2016-08-25 08:06:57 -06:00
David Sparer
71683992a0 Renamed ISqlConnector to IDatabaseConnector 2016-08-24 10:55:59 -06:00
David Sparer
2c785ade51 Initial refactor of sql saving. not even close to done 2016-08-24 10:49:03 -06:00
David Sparer
530819e788 Renamed several files to be more in line with project standards 2016-08-24 10:21:26 -06:00
David Sparer
c4c175e107 Minor code cleanup 2016-08-24 10:05:27 -06:00
David Sparer
6280fdf973 Refactored code for exporting connections in visionapp remote desktop 2008 csv format 2016-08-24 09:56:53 -06:00
David Sparer
269366264d Resolve small bug that would occur when exporting csv multiple times 2016-08-24 09:26:50 -06:00
David Sparer
8137b0831c Fixed issue where ConnectionTreeModel was not always populated when exporting. 2016-08-24 09:18:28 -06:00
David Sparer
396f63a3c9 Added necessary call to save the csv file to disk 2016-08-24 09:17:55 -06:00
David Sparer
cf87f2ee4d Fixed issue with undeclared variable 2016-08-24 08:47:31 -06:00
David Sparer
c98e672a73 minor code cleanup 2016-08-24 08:45:45 -06:00
David Sparer
21fe39542d Renamed CsvConnectionsSerializer to CsvConnectionsSerializerMremotengFormat to help distinguish between this and another CSV serializer strategy 2016-08-24 08:44:52 -06:00
David Sparer
8747da47a5 Began creating a serializer for Csv formatting 2016-08-23 15:31:47 -06:00
David Sparer
b3ff4de2ae Moved all data providers to the namespace mRemoteNG.Config.DataProviders 2016-08-23 15:02:54 -06:00
David Sparer
bc52362123 ConnectionSave now uses the FileDataProviderWithBackup strategies for saving connections files in xml 2016-08-23 14:58:04 -06:00
David Sparer
dcd63f321c Expanded some of the FileDataProvider code and created two different strategies for handling saves with backups 2016-08-23 14:57:17 -06:00
David Sparer
093f8c2714 XmlConnectionsDeserializer now implements IDeserializer 2016-08-23 14:00:00 -06:00
David Sparer
94ee9a39b4 Saving XML data to file now decoupled 2016-08-23 13:59:30 -06:00
David Sparer
1c5ea9e3ff Re-enabled opening connections from last session 2016-08-23 09:49:39 -06:00
David Sparer
3c69644f21 Re-enable expanding previously expanded folders. Implementation is still not ideal, but it's better 2016-08-23 09:35:08 -06:00
David Sparer
a89a593f51 code cleanup 2016-08-23 09:16:09 -06:00
David Sparer
8f685faf9b Refactored to reduce coupling 2016-08-22 16:05:49 -06:00
David Sparer
020433d7ad Fixed issue with display of connections tree which was caused by new connection tree builder code 2016-08-22 16:04:06 -06:00
Sean Kaim
80aa4fb852 removed hack for rightclick import menu 2016-08-22 17:07:24 -04:00
David Sparer
a1a8bd9656 Merge branch 'develop' into MR-975_Replace_TreeView_with_TreeListview 2016-08-22 11:17:03 -06:00
Sean Kaim
72623281c4 Initial PortScan context menu import
Need to fix the event implementation because it's a total hack right
now.
Also, want to put the code for detecting selected hosts into it's own
method.
2016-08-19 17:41:48 -04:00
David Sparer
ccaa70c1a4 XmlConnectionDeserializer now creates a connectiontreemodel which is turned into a treeview by ConnectionTreeViewBuilder 2016-08-19 15:28:12 -06:00
Sean Kaim
aa1ce22ada Missed one... One port scan form 2016-08-19 17:10:17 -04:00
David Sparer
003793b082 Removed dependency on GeneralAppInfo class to improved testability 2016-08-19 14:32:55 -06:00
Sean Kaim
15611cea43 one port scan form (import always available) 2016-08-19 14:52:53 -04:00
David Sparer
7a366de0e3 minor code cleanup 2016-08-19 12:51:01 -06:00
David Sparer
3baaf8bda4 Began building logic to build a TreeView from a connection tree model 2016-08-19 12:46:49 -06:00
David Sparer
23dcb3e823 Renamed method XmlConnectionsDeserializer.LoadFromXml to "Deserialize" 2016-08-19 12:45:52 -06:00
Sean Kaim
66e7790ee0 more code clean up 2016-08-19 11:56:29 -04:00
Sean Kaim
3065126ed1 code clean up 2016-08-19 11:00:30 -04:00
Sean Kaim
98ae737fb8 code clean up and expcetion stack logging 2016-08-19 10:45:22 -04:00
Sean Kaim
52cfda1d8e move some old/unused files 2016-08-18 13:22:41 -04:00
Sean Kaim
f727c13e20 fix minor complier warning 2016-08-18 13:11:21 -04:00
Sean Kaim
0c01479866 rebuild solution fails on post build
error 1104
editbin also can't find mremoteng.exe - seems to be a timing issue.
Small sleep fixes it.
2016-08-18 12:16:19 -04:00
Sean Kaim
34c9ae7518 Fix a cast 2016-08-18 12:04:48 -04:00
Sean Kaim
960334b638 minor logging changes & clean up 2016-08-18 12:00:11 -04:00
Sean Kaim
32e7ee1917 changelog.txt update 2016-08-18 08:55:09 -04:00
David Sparer
6e221e753b code cleanup 2016-08-17 15:12:48 -06:00
David Sparer
501dffe5b2 Refactored to separate loading connection data from deserializing data into domain objects 2016-08-17 14:47:03 -06:00
David Sparer
90dc8274c5 Added ObjectListView to packages 2016-08-17 09:29:43 -06:00
David Sparer
0a5cb40f55 Merge branch 'MR-651_improper_connection_inheritance_behavior' into develop 2016-08-17 09:17:01 -06:00
David Sparer
6d7d587a33 Renamed "Parent" interface to "IParent" 2016-08-17 09:11:13 -06:00
David Sparer
35b6e2bf35 minor cleanup of PuttySessionInfo 2016-08-17 09:02:43 -06:00
David Sparer
d2ebb207ab minor cleanup 2016-08-17 08:54:56 -06:00
David Sparer
c3a7f3c950 Created more unit tests for connection info objects 2016-08-17 08:54:36 -06:00
Sean Kaim
b44efbd998 ssh file transfer Don't add file name to dest file 2016-08-16 15:55:23 -04:00
David Sparer
8bdba217a6 Added test for multi-folder (recursive) inheritance 2016-08-15 15:36:32 -06:00
David Sparer
81dd315dfe More connection tree integration tests 2016-08-15 15:01:55 -06:00
David Sparer
d0be7f16ba Began creating integration tests for the connection tree 2016-08-15 14:47:26 -06:00
David Sparer
818ac03e84 RootNodeInfo now inherits from ContainerInfo 2016-08-15 14:45:33 -06:00
David Sparer
41127e0e38 Added collection management functions to ContainerInfo (Add, AddRange, Remove, RemoveRange). Added unit tests 2016-08-15 12:02:29 -06:00
David Sparer
b4af59a873 Fixed some instances where "Inheritance" was mistakenly changed to "IInheritable" by resharper 2016-08-15 11:05:18 -06:00
David Sparer
08972ff234 New connection entries now get their initial data from the DefaultConnectionInfo 2016-08-15 10:51:56 -06:00
David Sparer
6653f9b110 Resolved bug with DefaultConnectionInfo.SaveTo 2016-08-15 10:39:26 -06:00
David Sparer
c6f2ebd92a Merge branch 'develop' into MR-651_improper_connection_inheritance_behavior 2016-08-15 10:06:47 -06:00
David Sparer
b50c061c0a minor code cleanup 2016-08-12 13:19:43 -06:00
David Sparer
bb0e92c519 DefaultConnectionInfo saving is now handled by the SaveTo method. Removed unnecessary Runtime method 2016-08-12 13:06:26 -06:00
David Sparer
682dc36d34 Added custom type conversion support to the SaveTo method of DefaultConnectionInfo 2016-08-12 13:05:44 -06:00
Sean Kaim
3a173821d7 1.75 Alpha 3 2016-08-12 14:12:57 -04:00
David Sparer
0df478d2aa Resolved runtime type conversion issue with DefaultConnectionInfo when loading from a serialized source 2016-08-12 11:18:17 -06:00
David Sparer
8d3ba881e5 Refactoring DefaultConnectionInfo handling to a new class which inherits from ConnectionInfo 2016-08-11 15:32:04 -06:00
Sean Kaim
4555db8e97 MR-965, MR-871, MR-629: Error 264 on RDP Connect
Error 264 is a timeout:
RDP disconnected!
264 This computer can't connect to the remote computer.

The two computers couldn't connect in the amount of time allotted. Try
connecting again. If the problem continues, contact your network
administrator or technical support.
2016-08-11 16:52:57 -04:00
David Sparer
bc2beb2c56 Rename Config.mRemoteNG to Config.mRemoteNGImporter 2016-08-11 13:45:18 -06:00
David Sparer
29bd6af2a2 Made ContainerInfo class inherit from ConnectionInfo class 2016-08-11 11:11:31 -06:00
Sean Kaim
1bbd20de3c Merge PR #130 - port scan button width 2016-08-10 16:48:42 -04:00
Sean Kaim
d1f4164498 Update changelog 2016-08-10 16:41:56 -04:00
Sean Kaim
d1c238a812 Merge pull request #134 from mRemoteNG/MR-946_Initial_SSH.NET
MR-946 initial ssh.net - File xfer
2016-08-10 16:03:56 -04:00
Sean Kaim
675bbd602f Remove old components, update credits.txt 2016-08-10 15:59:14 -04:00
Sean Kaim
ab1be61fda SFTP file transfer now works fully 2016-08-10 15:52:02 -04:00
David Sparer
754caca613 Convert to auto-properties 2016-08-10 11:16:27 -06:00
Sean Kaim
8097ab146c Merge remote-tracking branch 'refs/remotes/origin/develop' into MR-946_Initial_SSH.NET 2016-08-10 12:04:02 -04:00
David Sparer
c0c4b69c64 Rename interface "Inheritance" to "IInheritable" 2016-08-10 09:24:48 -06:00
David Sparer
315d90391c Merge branch 'MR-906_default_Inherit_All_not_saved' into develop 2016-08-10 09:14:18 -06:00
David Sparer
869a5fd773 Created several simple unit & integration tests for DefaultConnectionInheritance 2016-08-10 09:06:44 -06:00
David Sparer
9940cfcf12 Minor cleanup of the Config window class 2016-08-10 08:28:35 -06:00
Sean Kaim
463b6cd791 progress bar style 2016-08-09 17:53:02 -04:00
David Sparer
b981516913 Fix issue setting ICAEncryptionStrength through inheritance 2016-08-09 15:50:56 -06:00
David Sparer
9ffdbee400 Fix self-reference initialization error 2016-08-09 15:49:52 -06:00
Sean Kaim
def55c9dfe code formatting/clean up 2016-08-09 17:48:22 -04:00
Sean Kaim
69668c5e55 background transfer 2016-08-09 17:45:46 -04:00
David Sparer
f41adec096 Minor cleanup of ConnectionInfo 2016-08-09 15:25:21 -06:00
David Sparer
3cc56f9886 Minor cleanup of ConnectionInfoInheritance 2016-08-09 15:25:03 -06:00
Sean Kaim
be8b302e20 Merge remote-tracking branch 'refs/remotes/origin/develop' into MR-946_Initial_SSH.NET 2016-08-09 16:58:57 -04:00
Sean Kaim
6da05af387 code clean up & fix complier warnings 2016-08-09 16:58:44 -04:00
Sean Kaim
2eb74afc20 upload with progress bar working 2016-08-09 16:41:46 -04:00
David Sparer
c44bb1e27d Made DefaultConnectionInheritance.SaveTo a generic method to decouple it from Settings 2016-08-09 11:08:06 -06:00
David Sparer
12cd38a047 Made DefaultConnectionInheritance LoadFrom a generic method to decouple it from the Settings class 2016-08-09 11:02:53 -06:00
David Sparer
e5c896cb36 Refactored much of the inheritance code to use System.Reflection instead of hardcoded values.
Refactored DefaultInheritance to its own class which inherits from the ConnectionInfoInheritance class.
Fixed issue with DefaultInheritance not saving to settings.
2016-08-09 10:34:51 -06:00
Sean Kaim
d89a2487e7 Merge remote-tracking branch 'refs/remotes/origin/develop' into MR-946_Initial_SSH.NET 2016-08-08 17:56:10 -04:00
David Sparer
e59f91a976 Minor refactoring 2016-08-05 09:37:22 -06:00
David Sparer
9a80777fe9 Minor code cleanup in ConnectionInfoInheritance 2016-08-05 09:02:17 -06:00
David Sparer
69b1da50b8 Removed redundant namespace qualifier 2016-08-05 08:55:45 -06:00
Sean Kaim
04ada28ffc Latest SSH.NET package 2016-08-04 17:48:26 -04:00
David Sparer
369a6c2f04 Merge branch 'MR-896_RDP_Class_not_registered' into develop 2016-08-04 13:39:37 -06:00
David Sparer
f438fb65f8 Installer now checkes for KB2574819 on win7 before installation can occur 2016-08-04 13:37:36 -06:00
David Sparer
6590011ef1 Refactored the CustomActions for checking if a KB is installed. Made it more generic 2016-08-04 13:36:08 -06:00
David Sparer
b6eb3d2361 Added the CustomActions project to build by default for Release and Debug builds 2016-08-03 13:26:32 -06:00
David Sparer
13b9b77f0d Added exception catching to a CustomAction method 2016-08-03 13:25:38 -06:00
David Sparer
20419856c1 Minor update to changelog 2016-08-03 13:25:02 -06:00
Sean Kaim
8bbb9a70c6 code clean up, ui tweaks, new backend class 2016-07-29 21:52:06 -04:00
Sean Kaim
37905f8249 Add nuget packages to tests 2016-07-28 16:49:44 -04:00
Sean Kaim
203dcf714f Initial SSH.NET file transfer
Upload succeeds. UI status/etc needs work.
2016-07-27 22:56:28 -04:00
376 changed files with 22334 additions and 19185 deletions

1
.github/CONTRIBUTING.md vendored Normal file
View File

@@ -0,0 +1 @@
Please see the [Wiki](https://github.com/mRemoteNG/mRemoteNG/wiki/Development) for contributing information.

16
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,16 @@
<!--
Only file GitHub issues for bugs and feature requests. All other topics will be closed.
Before opening an issue, please search for a duplicate or closed issue.
Please provide as much detail as possible for us to fix your issue.
-->
<!-- Bug -->
|||
|--:|---|
|Operating system | Windows 7 x64 |
|mRemoteNG version| 1.75 aplha 3 |
<!-- Feature Request -->
<!-- If you file a feature request, please delete the bug section -->

4
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,4 @@
<!--
Please provide as much detail as possible with what your pull request does.
Include a reference to a filed issue if it exists.
-->

6
.gitignore vendored
View File

@@ -284,4 +284,8 @@ InstallerProjects/Installer/Fragments/FilesFragment.wxs
InstallerProjects/Installer/Resources/License.rtf
# user preference: .editorconfig - http://editorconfig.org/
.editorconfig
.editorconfig
# gh-pages info
runlocal.bat
/_site

File diff suppressed because it is too large Load Diff

View File

@@ -3,17 +3,19 @@ Contributors
Current mRemoteNG dev team:
David Sparer (github.com/sparerd)
Hayato Iriumi (github.com/hiriumi)
Sean Kaim (github.com/kmscode)
Felix Deimel - mRemote original developer
Riley McArdle - mRemoteNG original developer
github.com/Brandhor
Thanks for the awesome new website!
Bennett Blodinger (github.com/benwa)
Past Contributors
=================
Felix Deimel - mRemote original developer
Riley McArdle - mRemoteNG original developer
Hayato Iriumi (github.com/hiriumi)
Jason Barbier
Wiktor Beryt
Lionel Caignec
@@ -23,6 +25,8 @@ Tom Hiller
Apisitt Rattana
Andreas Rehm
David Vidmar
github.com/Brandhor
github.com/Kvarkas
Translators
@@ -69,13 +73,8 @@ Copyright
Copyright <20> 2008 Felix Deimel
http://www.codeproject.com/KB/selection/ADPickerCtrl.aspx
DiffieHellman 1.0
Copyright <20> 2003 The Mentalis.org Team
Modified New BSD License
http://www.mentalis.org/
DockPanel Suite 2.10.0.beta2
Copyright <20> 2015 @roken and @lextm (formerly Weifen Luo)
DockPanel Suite 2.10.0
Copyright <20> 2016 @roken and @lextm (formerly Weifen Luo)
MIT License
https://github.com/dockpanelsuite/dockpanelsuite
@@ -94,27 +93,21 @@ Copyright
Freely redistributable with attribution
http://www.dotnetmagic.com/magic_download.html
Mentalis.org Security Library 1.0.13.715
Copyright <20> 2002-2005 The Mentalis.org Team
Modified New BSD License
http://www.mentalis.org/
PuTTY 0.67
Copyright <20> 1997-2016 Simon Tatham
MIT License
http://www.chiark.greenend.org.uk/~sgtatham/putty/
SharpSSH 1.1.1.13
Copyright <20> 2002-2008 Atsuhiko Yamanaka, JCraft, Inc.
Copyright <20> 2007 Tamir Gal
BSD Style License
http://www.tamirgal.com/blog/page/SharpSSH.aspx
Silk Icon Set
Copyright <20> 2005-2008 FAMFAMFAM
Creative Commons Attribution 2.5 License
http://www.famfamfam.com/
SSH.NET v2016.0.0
Copyright <20> 2016
MIT License
https://github.com/sshnet/SSH.NET
VncSharp 1.1
Copyright <20> 2004-2009 David Humphrey
GNU General Public License (GPL) Version 2

View File

@@ -7,8 +7,20 @@ namespace CustomActions
[CustomAction]
public static ActionResult IsMinimumRdpVersionInstalled(Session session)
{
var rdpVersionChecker = new RdpVersionChecker(session);
rdpVersionChecker.Execute();
var acceptedRdpKbVariables = new[] { session["RDP80_KB"], session["RDP81_KB"] };
var returnVariable = "MINIMUM_RDP_VERSION_INSTALLED";
var kbInstalledChecker = new KbInstalledChecker(session);
kbInstalledChecker.Execute(acceptedRdpKbVariables, returnVariable);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult IsRdpDtlsUpdateInstalled(Session session)
{
var kb = session["RDP_DTLS_KB"];
var returnVar = "RDP_DTLS_UPDATE_INSTALLED";
var kbInstalledChecker = new KbInstalledChecker(session);
kbInstalledChecker.Execute(kb, returnVar);
return ActionResult.Success;
}

View File

@@ -45,9 +45,9 @@
</ItemGroup>
<ItemGroup>
<Compile Include="CustomActions.cs" />
<Compile Include="KbInstalledChecker.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="InstalledWindowsUpdateGatherer.cs" />
<Compile Include="RdpVersionChecker.cs" />
<Compile Include="InstalledWindowsUpdateChecker.cs" />
<Compile Include="UninstallNsisVersions.cs" />
<Content Include="CustomAction.config" />
</ItemGroup>

View File

@@ -1,14 +1,15 @@
using System;
using System.Management;
using System.Collections;
using System.Collections.Generic;
namespace CustomActions
{
public class InstalledWindowsUpdateGatherer
public class InstalledWindowsUpdateChecker
{
private readonly ManagementScope _managementScope;
public InstalledWindowsUpdateGatherer()
public InstalledWindowsUpdateChecker()
{
_managementScope = Connect();
}
@@ -40,14 +41,32 @@ namespace CustomActions
return installedUpdates;
}
public bool IsUpdateInstalled(string kb)
public bool IsUpdateInstalled(string kb) => IsUpdateInstalled(new[] {kb});
public bool IsUpdateInstalled(IEnumerable<string> kbList)
{
var updateIsInstalled = false;
var query = $"SELECT HotFixID FROM Win32_QuickFixEngineering WHERE HotFixID='{kb}'";
var whereClause = BuildWhereClauseFromKbList(kbList);
if (whereClause == "") return false;
var query = $"SELECT HotFixID FROM Win32_QuickFixEngineering WHERE {whereClause}";
var searcher = new ManagementObjectSearcher(_managementScope, new ObjectQuery(query));
if (searcher.Get().Count > 0)
updateIsInstalled = true;
return updateIsInstalled;
}
private string BuildWhereClauseFromKbList(IEnumerable<string> kbList)
{
var whereClause = "";
var counter = 0;
foreach (var kb in kbList)
{
if (counter > 0)
whereClause += " OR ";
whereClause += $"HotFixID='{kb}'";
counter++;
}
return whereClause;
}
}
}

View File

@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using Microsoft.Deployment.WindowsInstaller;
namespace CustomActions
{
public class KbInstalledChecker
{
private readonly Session _session;
private readonly InstalledWindowsUpdateChecker _installedUpdateChecker;
public KbInstalledChecker(Session session)
{
_installedUpdateChecker = new InstalledWindowsUpdateChecker();
_session = session;
}
public bool Execute(string acceptedKb, string returnVar) => Execute(new[] {acceptedKb}, returnVar);
public bool Execute(IEnumerable<string> acceptedKbs, string returnVar)
{
try
{
_session.Log("Begin KbInstalledChecker");
var isUpdateInstalled = _installedUpdateChecker.IsUpdateInstalled(acceptedKbs);
SetReturnValue(isUpdateInstalled, returnVar);
_session.Log("End KbInstalledChecker");
return true;
}
catch (Exception e)
{
_session.Log($"There was an issue executing the KbInstalledChecker. Exception: {e}");
return false;
}
}
private void SetReturnValue(bool isUpdateInstalled, string returnVar)
{
var updateInstalledVal = isUpdateInstalled ? "1" : "0";
_session[returnVar] = updateInstalledVal;
_session.Log($"Set property '{returnVar}' to '{updateInstalledVal}'");
}
}
}

View File

@@ -1,42 +0,0 @@
using Microsoft.Deployment.WindowsInstaller;
namespace CustomActions
{
public class RdpVersionChecker
{
private readonly Session _session;
private const string MinimumVersionInstalledReturnVar = "MINIMUM_RDP_VERSION_INSTALLED";
private const string MinimumRdpKbVariable = "MINIMUM_RDP_KB";
public RdpVersionChecker(Session session)
{
_session = session;
}
public bool Execute()
{
_session.Log("Begin IsMinimumRdpVersionInstalled");
var minimumKb = _session[MinimumRdpKbVariable];
var isUpdateInstalled = IsUpdateInstalled(minimumKb);
SetReturnValue(isUpdateInstalled);
_session.Log("End IsMinimumRdpVersionInstalled");
return true;
}
private bool IsUpdateInstalled(string minimumKb)
{
_session.Log("Checking if '{0}' is installed", minimumKb);
var updateGatherer = new InstalledWindowsUpdateGatherer();
var isUpdateInstalled = updateGatherer.IsUpdateInstalled(minimumKb);
_session.Log("KB is installed = '{0}'", isUpdateInstalled);
return isUpdateInstalled;
}
private void SetReturnValue(bool isUpdateInstalled)
{
var updateInstalledVal = isUpdateInstalled ? "1" : "0";
_session[MinimumVersionInstalledReturnVar] = updateInstalledVal;
_session.Log($"Set property '{MinimumVersionInstalledReturnVar}' to '{updateInstalledVal}'");
}
}
}

View File

@@ -4,4 +4,7 @@
<Fragment>
<CustomAction Id="CheckIfMinimumRdpInstalled" Return="check" Execute="immediate" BinaryKey="CustomActions.CA.dll" DllEntry="IsMinimumRdpVersionInstalled" />
</Fragment>
<Fragment>
<CustomAction Id="CheckIfRdpDtlsUpdateInstalled" Return="check" Execute="immediate" BinaryKey="CustomActions.CA.dll" DllEntry="IsRdpDtlsUpdateInstalled" />
</Fragment>
</Wix>

View File

@@ -19,6 +19,7 @@
<?define Rdp80Kb = "KB2592687" ?>
<?define Rdp81Kb = "KB2923545" ?>
<?define MinimumRdpKb = $(var.Rdp80Kb) ?>
<?define RdpDtlsKb = "KB2574819" ?>
<?define IGNOREPREREQUISITES = 0 ?>
<?if $(var.Platform) = x64 ?>

View File

@@ -7,6 +7,7 @@
<String Id="Install_NeedDotNetFrameworkVersion">mRemoteNG requires Microsoft .NET Framework [REQUIREDDOTNETFRAMEWORKVERSION] or higher.</String>
<String Id="Install_OSVersionRequirement">mRemoteNG requires Windows 7 SP1 or higher to run. Please update your operating system and try again.</String>
<String Id="Install_RDP80Requirement">mRemoteNG requires RDP 8.0 or higher to run. Windows 7 users will need to install KB2592687</String>
<String Id="Install_RDPDtlsRequirement">mRemoteNG requires KB2574819 in order to create RDP connections. Windows 7 users will need to install this KB.</String>
<String Id="Install_Win7RequiresSP1">For mRemoteNG to run on Windows 7, it requires Service Pack 1 to be installed. Please install Service Pack 1 and try again.</String>
<!-- Directories and File names -->

View File

@@ -16,7 +16,10 @@
<Property Id="APPLICATIONROOTDIRECTORY">
<RegistrySearch Id='mRemoteNGRegistry' Type='raw' Root='HKLM' Key='Software\mRemoteNG' Name='InstallDir' />
</Property>
<Property Id='MINIMUM_RDP_KB' Value='$(var.MinimumRdpKb)' />
<Property Id='RDP_DTLS_KB' Value='$(var.RdpDtlsKb)' />
<Property Id='RDP_DTLS_UPDATE_INSTALLED' Value='0' Secure='yes' />
<Property Id='RDP80_KB' Value='$(var.Rdp80Kb)' />
<Property Id='RDP81_KB' Value='$(var.Rdp81Kb)' />
<Property Id='MINIMUM_RDP_VERSION_INSTALLED' Value='0' Secure='yes' />
<Property Id='REQUIREDDOTNETFRAMEWORKVERSION' Value='$(var.RequiredDotNetFrameworkVersion)' />
<Property Id='LEGACYVERSIONINSTALLED' Value='0' />
@@ -26,7 +29,8 @@
<InstallUISequence>
<Custom Action="CheckIfMinimumRdpInstalled" After="AppSearch">(NOT Installed) AND (VersionNT = 601 OR VersionNT64 = 601)</Custom>
<Custom Action="CheckIfRdpDtlsUpdateInstalled" After="AppSearch">(NOT Installed) AND (VersionNT = 601 OR VersionNT64 = 601)</Custom>
<Custom Action="CheckIfMinimumRdpInstalled" After="CheckIfRdpDtlsUpdateInstalled">(NOT Installed) AND (VersionNT = 601 OR VersionNT64 = 601)</Custom>
<LaunchConditions After="SetWIX_IS_NETFRAMEWORK_40_OR_LATER_INSTALLED" />
<Custom Action="CheckIfLegacyVersionInstalled" After="LaunchConditions" />
<Custom Action="UninstallLegacyVersion" After="CheckIfLegacyVersionInstalled">(NOT Installed) AND (LEGACYVERSIONINSTALLED = 1)</Custom>
@@ -49,6 +53,10 @@
<Condition Message="!(loc.Install_NeedDotNetFrameworkVersion)">
<![CDATA[Installed OR (IGNOREPREREQUISITES = 1) OR WIX_IS_NETFRAMEWORK_40_OR_LATER_INSTALLED = 1]]>
</Condition>
<!-- If Win7, require RDP DTLS update (KB2574819) -->
<Condition Message="!(loc.Install_RDPDtlsRequirement)">
<![CDATA[Installed OR (IGNOREPREREQUISITES = 1) OR (VersionNT >= 602 OR VersionNT64 >= 602) OR ((VersionNT = 601 OR VersionNT64 = 601) AND (RDP_DTLS_UPDATE_INSTALLED = 1))]]>
</Condition>
<!-- If Win7, require RDP 8.0 update (KB2592687) -->
<Condition Message="!(loc.Install_RDP80Requirement)">
<![CDATA[Installed OR (IGNOREPREREQUISITES = 1) OR (VersionNT >= 602 OR VersionNT64 >= 602) OR ((VersionNT = 601 OR VersionNT64 = 601) AND (MINIMUM_RDP_VERSION_INSTALLED = 1))]]>

View File

@@ -3,7 +3,10 @@
[![Join the chat at https://gitter.im/mRemoteNG/PublicChat/](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mRemoteNG/PublicChat)
[![PayPal](https://img.shields.io/badge/%24-PayPal-blue.svg)](https://www.paypal.me/DavidSparer)
[![Build Status](http://ec2-52-39-111-114.us-west-2.compute.amazonaws.com:8080/buildStatus/icon?job=mRemoteNG/mRemoteNG/develop)](http://ec2-52-39-111-114.us-west-2.compute.amazonaws.com:8080/job/mRemoteNG/job/mRemoteNG/job/develop/)
[![Issues In Progress](https://badge.waffle.io/mRemoteNG/mRemoteNG.png?label=In%20Progress&title=In%20Progress)](http://waffle.io/mRemoteNG/mRemoteNG)
[![Github Releases (by Release)](https://img.shields.io/github/downloads/mRemoteNG/mRemoteNG/v1.74/total.svg)](https://github.com/mRemoteNG/mRemoteNG/releases/tag/v1.74)
@@ -31,4 +34,4 @@ https://support.microsoft.com/en-us/kb/2923545
Windows 8+ support RDP version 8+ out of the box.
RDP versions are backwards compatible, so an mRemoteNG client running on Windows 10 can connection successfully to a Windows 2003 host (for example).
RDP versions are backwards compatible, so an mRemoteNG client running on Windows 10 can connection successfully to a Windows 2003 host (for example).

View File

@@ -0,0 +1,12 @@
#Requires -Version 4.0
$file = gci ..\Release | sort LastWriteTime | select -last 1 | % { $_.FullName }
$version = $file.tostring().Split("-")[2].trim(".zip")
Write-Host Version: $version
Write-Host dURL:
Write-Host clURL:
$hash = Get-FileHash -Algorithm MD5 $file | % { $_.Hash }
Write-Host CertificateThumbprint: $hash

View File

@@ -1,27 +0,0 @@
using System;
using NUnit.Framework;
using mRemoteNG.Config;
using mRemoteNG.Config.Connections;
using NSubstitute;
namespace mRemoteNGTests.Config.Connections
{
[TestFixture]
public class SqlConnectionUpdateCheckerTests
{
SqlConnectionsUpdateChecker _updateChecker;
[SetUp]
public void Setup()
{
_updateChecker = new SqlConnectionsUpdateChecker();
}
[TearDown]
public void Teardown()
{
_updateChecker.Dispose();
_updateChecker = null;
}
}
}

View File

@@ -1,32 +0,0 @@
using System;
using NUnit.Framework;
using mRemoteNG.Config.Connections;
using System.Data.SqlClient;
namespace mRemoteNGTests.Config.Connections
{
[TestFixture]
public class SqlUpdateQueryBuilderTest
{
private SqlUpdateQueryBuilder _sqlUpdateQueryBuilder;
[SetUp]
public void Setup()
{
_sqlUpdateQueryBuilder = new SqlUpdateQueryBuilder();
}
[TearDown]
public void Teardown()
{
_sqlUpdateQueryBuilder = null;
}
[Test]
public void SqlUpdateQueryBuilderReturnsSomeCommand()
{
SqlCommand command = _sqlUpdateQueryBuilder.BuildCommand();
Assert.AreNotEqual(command.CommandText, "");
}
}
}

View File

@@ -1,40 +0,0 @@
using mRemoteNG.Config.Connections;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Connections
{
[TestFixture]
public class SqlUpdateTimerTests
{
private SqlUpdateTimer sqlUpdateChecker;
[SetUp]
public void SetupSqlUpdateChecker()
{
sqlUpdateChecker = new SqlUpdateTimer();
}
[TearDown]
public void TearDownSqlUpdateChecker()
{
sqlUpdateChecker.Dispose();
sqlUpdateChecker = null;
}
[Test]
public void EnableSQLUpdating()
{
sqlUpdateChecker.Enable();
Assert.AreEqual(true, sqlUpdateChecker.IsUpdateCheckingEnabled());
}
[Test]
public void DisableSQLUpdating()
{
sqlUpdateChecker.Enable();
Assert.AreEqual(true, sqlUpdateChecker.IsUpdateCheckingEnabled());
sqlUpdateChecker.Disable();
Assert.AreEqual(false, sqlUpdateChecker.IsUpdateCheckingEnabled());
}
}
}

View File

@@ -0,0 +1,128 @@
using mRemoteNG.Config.Serializers;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Security;
using mRemoteNG.Tree;
using mRemoteNG.Tree.Root;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Serializers
{
public class DataTableSerializerTests
{
private DataTableSerializer _dataTableSerializer;
private SaveFilter _saveFilter;
[SetUp]
public void Setup()
{
_saveFilter = new SaveFilter();
_dataTableSerializer = new DataTableSerializer(_saveFilter);
}
[TearDown]
public void Teardown()
{
_saveFilter = null;
_dataTableSerializer = null;
}
[Test]
public void AllItemsSerialized()
{
var model = CreateConnectionTreeModel();
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows.Count, Is.EqualTo(3));
}
[Test]
public void UsernameSerializedWhenSaveSecurityAllowsIt()
{
var model = CreateConnectionTreeModel();
_saveFilter.SaveUsername = true;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["Username"], Is.Not.EqualTo(""));
}
[Test]
public void DomainSerializedWhenSaveSecurityAllowsIt()
{
var model = CreateConnectionTreeModel();
_saveFilter.SaveDomain = true;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["DomainName"], Is.Not.EqualTo(""));
}
[Test]
public void PasswordSerializedWhenSaveSecurityAllowsIt()
{
var model = CreateConnectionTreeModel();
_saveFilter.SavePassword = true;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["Password"], Is.Not.EqualTo(""));
}
[Test]
public void InheritanceSerializedWhenSaveSecurityAllowsIt()
{
var model = CreateConnectionTreeModel();
_saveFilter.SaveInheritance = true;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["InheritUsername"], Is.Not.EqualTo(""));
}
[Test]
public void UsernameNotSerializedWhenSaveSecurityDisabled()
{
var model = CreateConnectionTreeModel();
_saveFilter.SaveUsername = false;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["Username"], Is.EqualTo(""));
}
[Test]
public void DomainNotSerializedWhenSaveSecurityDisabled()
{
var model = CreateConnectionTreeModel();
_saveFilter.SaveDomain = false;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["DomainName"], Is.EqualTo(""));
}
[Test]
public void PasswordNotSerializedWhenSaveSecurityDisabled()
{
var model = CreateConnectionTreeModel();
_saveFilter.SavePassword = false;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["Password"], Is.EqualTo(""));
}
[Test]
public void InheritanceNotSerializedWhenSaveSecurityDisabled()
{
var model = CreateConnectionTreeModel();
_saveFilter.SaveInheritance = false;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["InheritUsername"], Is.False);
}
private ConnectionTreeModel CreateConnectionTreeModel()
{
var model = new ConnectionTreeModel();
var root = new RootNodeInfo(RootNodeType.Connection);
var folder1 = new ContainerInfo {Name = "folder1", Username = "user1", Domain = "domain1", Password = "password1"};
var con1 = new ConnectionInfo {Name = "Con1", Username = "user1", Domain = "domain1", Password = "password1" };
var con2 = new ConnectionInfo {Name = "Con2", Username = "user2", Domain = "domain2", Password = "password2" };
root.AddChild(folder1);
root.AddChild(con2);
folder1.AddChild(con1);
model.AddRootNode(root);
return model;
}
}
}

View File

@@ -0,0 +1,61 @@
using System.Linq;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Connection;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Tools;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Serializers
{
public class PortScanDeserializerTests
{
private PortScanDeserializer _deserializer;
private ConnectionInfo _importedConnectionInfo;
private const string ExpectedHostName = "server1.domain.com";
private const string ExpectedDisplayName = "server1";
private const ProtocolType ExpectedProtocolType = ProtocolType.SSH2;
[OneTimeSetUp]
public void OnetimeSetup()
{
var host = new ScanHost("10.20.30.40")
{
HostName = "server1.domain.com",
SSH = true
};
_deserializer = new PortScanDeserializer(new [] {host}, ProtocolType.SSH2);
_deserializer.Deserialize();
var connectionTreeModel = _deserializer.Deserialize();
var root = connectionTreeModel.RootNodes.First();
_importedConnectionInfo = root.Children.First();
}
[OneTimeTearDown]
public void OnetimeTeardown()
{
_deserializer = null;
_importedConnectionInfo = null;
}
[Test]
public void DisplayNameImported()
{
Assert.That(_importedConnectionInfo.Name, Is.EqualTo(ExpectedDisplayName));
}
[Test]
public void HostNameImported()
{
Assert.That(_importedConnectionInfo.Hostname, Is.EqualTo(ExpectedHostName));
}
[Test]
public void ProtocolImported()
{
Assert.That(_importedConnectionInfo.Protocol, Is.EqualTo(ExpectedProtocolType));
}
}
}

View File

@@ -0,0 +1,112 @@
using System.Linq;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Connection;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Container;
using mRemoteNGTests.Properties;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Serializers
{
public class PuttyConnectionManagerDeserializerTests
{
private PuttyConnectionManagerDeserializer _deserializer;
private ContainerInfo _rootImportedFolder;
private const string ExpectedRootFolderName = "test_puttyConnectionManager_database";
private const string ExpectedConnectionDisplayName = "my ssh connection";
private const string ExpectedConnectionHostname = "server1.mydomain.com";
private const string ExpectedConnectionDescription = "My Description Here";
private const int ExpectedConnectionPort = 22;
private const ProtocolType ExpectedProtocolType = ProtocolType.SSH2;
private const string ExpectedPuttySession = "MyCustomPuttySession";
private const string ExpectedConnectionUsername = "mysshusername";
private const string ExpectedConnectionPassword = "password123";
[OneTimeSetUp]
public void OnetimeSetup()
{
var fileContents = Resources.test_puttyConnectionManager_database;
_deserializer = new PuttyConnectionManagerDeserializer(fileContents);
var connectionTreeModel = _deserializer.Deserialize();
var rootNode = connectionTreeModel.RootNodes.First();
_rootImportedFolder = rootNode.Children.Cast<ContainerInfo>().First();
}
[OneTimeTearDown]
public void OnetimeTeardown()
{
_deserializer = null;
_rootImportedFolder = null;
}
[Test]
public void RootFolderImportedWithCorrectName()
{
Assert.That(_rootImportedFolder.Name, Is.EqualTo(ExpectedRootFolderName));
}
[Test]
public void ConnectionDisplayNameImported()
{
var connection = GetSshConnection();
Assert.That(connection.Name, Is.EqualTo(ExpectedConnectionDisplayName));
}
[Test]
public void ConnectionHostNameImported()
{
var connection = GetSshConnection();
Assert.That(connection.Hostname, Is.EqualTo(ExpectedConnectionHostname));
}
[Test]
public void ConnectionDescriptionImported()
{
var connection = GetSshConnection();
Assert.That(connection.Description, Is.EqualTo(ExpectedConnectionDescription));
}
[Test]
public void ConnectionPortImported()
{
var connection = GetSshConnection();
Assert.That(connection.Port, Is.EqualTo(ExpectedConnectionPort));
}
[Test]
public void ConnectionProtocolTypeImported()
{
var connection = GetSshConnection();
Assert.That(connection.Protocol, Is.EqualTo(ExpectedProtocolType));
}
[Test]
public void ConnectionPuttySessionImported()
{
var connection = GetSshConnection();
Assert.That(connection.PuttySession, Is.EqualTo(ExpectedPuttySession));
}
[Test]
public void ConnectionUsernameImported()
{
var connection = GetSshConnection();
Assert.That(connection.Username, Is.EqualTo(ExpectedConnectionUsername));
}
[Test]
public void ConnectionPasswordImported()
{
var connection = GetSshConnection();
Assert.That(connection.Password, Is.EqualTo(ExpectedConnectionPassword));
}
private ConnectionInfo GetSshConnection()
{
var sshFolder = _rootImportedFolder.Children.OfType<ContainerInfo>().First(node => node.Name == "SSHFolder");
return sshFolder.Children.First();
}
}
}

View File

@@ -0,0 +1,185 @@
using System;
using System.Linq;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Connection;
using mRemoteNG.Connection.Protocol.RDP;
using mRemoteNG.Tree;
using mRemoteNGTests.Properties;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Serializers
{
public class RemoteDesktopConnectionDeserializerTests
{
// .rdp file schema: https://technet.microsoft.com/en-us/library/ff393699(v=ws.10).aspx
private string[] _connectionFileContents;
private RemoteDesktopConnectionDeserializer _deserializer;
private ConnectionTreeModel _connectionTreeModel;
private const string ExpectedHostname = "testhostname.domain.com";
private const string ExpectedUserName = "myusernamehere";
private const string ExpectedDomain = "myspecialdomain";
private const string ExpectedGatewayHostname = "gatewayhostname.domain.com";
private const int ExpectedPort = 9933;
private const ProtocolRDP.RDPColors ExpectedColors = ProtocolRDP.RDPColors.Colors24Bit;
private const bool ExpectedBitmapCaching = false;
private const ProtocolRDP.RDPResolutions ExpectedResolutionMode = ProtocolRDP.RDPResolutions.FitToWindow;
private const bool ExpectedWallpaperDisplay = true;
private const bool ExpectedThemesDisplay = true;
private const bool ExpectedFontSmoothing = true;
private const bool ExpectedDesktopComposition = true;
private const bool ExpectedSmartcardRedirection = true;
private const bool ExpectedDriveRedirection = true;
private const bool ExpectedPortRedirection = true;
private const bool ExpectedPrinterRedirection = true;
private const ProtocolRDP.RDPSounds ExpectedSoundRedirection = ProtocolRDP.RDPSounds.BringToThisComputer;
[OneTimeSetUp]
public void OnetimeSetup()
{
_connectionFileContents = Resources.test_remotedesktopconnection_rdp.Split(Environment.NewLine.ToCharArray());
_deserializer = new RemoteDesktopConnectionDeserializer(_connectionFileContents);
_connectionTreeModel = _deserializer.Deserialize();
}
[OneTimeTearDown]
public void OnetimeTeardown()
{
_deserializer = null;
}
[Test]
public void ConnectionTreeModelHasARootNode()
{
var numberOfRootNodes = _connectionTreeModel.RootNodes.Count;
Assert.That(numberOfRootNodes, Is.GreaterThan(0));
}
[Test]
public void RootNodeHasConnectionInfo()
{
var rootNodeContents = _connectionTreeModel.RootNodes.First().Children.OfType<ConnectionInfo>();
Assert.That(rootNodeContents, Is.Not.Empty);
}
[Test]
public void HostnameImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.Hostname, Is.EqualTo(ExpectedHostname));
}
[Test]
public void PortImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.Port, Is.EqualTo(ExpectedPort));
}
[Test]
public void UsernameImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.Username, Is.EqualTo(ExpectedUserName));
}
[Test]
public void DomainImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.Domain, Is.EqualTo(ExpectedDomain));
}
[Test]
public void RdpColorsImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.Colors, Is.EqualTo(ExpectedColors));
}
[Test]
public void BitmapCachingImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.CacheBitmaps, Is.EqualTo(ExpectedBitmapCaching));
}
[Test]
public void ResolutionImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.Resolution, Is.EqualTo(ExpectedResolutionMode));
}
[Test]
public void DisplayWallpaperImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.DisplayWallpaper, Is.EqualTo(ExpectedWallpaperDisplay));
}
[Test]
public void DisplayThemesImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.DisplayThemes, Is.EqualTo(ExpectedThemesDisplay));
}
[Test]
public void FontSmoothingImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.EnableFontSmoothing, Is.EqualTo(ExpectedFontSmoothing));
}
[Test]
public void DesktopCompositionImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.EnableDesktopComposition, Is.EqualTo(ExpectedDesktopComposition));
}
[Test]
public void SmartcardRedirectionImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.RedirectSmartCards, Is.EqualTo(ExpectedSmartcardRedirection));
}
[Test]
public void DriveRedirectionImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.RedirectDiskDrives, Is.EqualTo(ExpectedDriveRedirection));
}
[Test]
public void PortRedirectionImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.RedirectPorts, Is.EqualTo(ExpectedPortRedirection));
}
[Test]
public void PrinterRedirectionImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.RedirectPrinters, Is.EqualTo(ExpectedPrinterRedirection));
}
[Test]
public void SoundRedirectionImportedCorrectly()
{
var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
Assert.That(connectionInfo.RedirectSound, Is.EqualTo(ExpectedSoundRedirection));
}
//[Test]
//public void GatewayHostnameImportedCorrectly()
//{
// var connectionInfo = _connectionTreeModel.RootNodes.First().Children.First();
// Assert.That(connectionInfo.RDGatewayHostname, Is.EqualTo(_expectedGatewayHostname));
//}
}
}

View File

@@ -0,0 +1,335 @@
using System.Linq;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Connection.Protocol.RDP;
using mRemoteNG.Container;
using mRemoteNG.Tree;
using mRemoteNGTests.Properties;
using NUnit.Framework;
using System.IO;
namespace mRemoteNGTests.Config.Serializers
{
public class RemoteDesktopConnectionManagerDeserializerTests
{
private string _connectionFileContents;
private RemoteDesktopConnectionManagerDeserializer _deserializer;
private ConnectionTreeModel _connectionTreeModel;
private const string ExpectedName = "server1_displayname";
private const string ExpectedHostname = "server1";
private const string ExpectedDescription = "Comment text here";
private const string ExpectedUsername = "myusername1";
private const string ExpectedDomain = "mydomain";
private const string ExpectedPassword = "passwordHere!";
private const bool ExpectedUseConsoleSession = true;
private const int ExpectedPort = 9933;
private const ProtocolRDP.RDGatewayUsageMethod ExpectedGatewayUsageMethod = ProtocolRDP.RDGatewayUsageMethod.Always;
private const string ExpectedGatewayHostname = "gatewayserverhost.innerdomain.net";
private const string ExpectedGatewayUsername = "gatewayusername";
private const string ExpectedGatewayDomain = "innerdomain";
private const string ExpectedGatewayPassword = "gatewayPassword123";
private const ProtocolRDP.RDPResolutions ExpectedRdpResolution = ProtocolRDP.RDPResolutions.FitToWindow;
private const ProtocolRDP.RDPColors ExpectedRdpColorDepth = ProtocolRDP.RDPColors.Colors24Bit;
private const ProtocolRDP.RDPSounds ExpectedAudioRedirection = ProtocolRDP.RDPSounds.DoNotPlay;
private const bool ExpectedKeyRedirection = true;
private const bool ExpectedSmartcardRedirection = true;
private const bool ExpectedDriveRedirection = true;
private const bool ExpectedPortRedirection = true;
private const bool ExpectedPrinterRedirection = true;
private const ProtocolRDP.AuthenticationLevel ExpectedAuthLevel = ProtocolRDP.AuthenticationLevel.AuthRequired;
[OneTimeSetUp]
public void OnetimeSetup()
{
_connectionFileContents = Resources.test_rdcman_v2_2_schema1;
_deserializer = new RemoteDesktopConnectionManagerDeserializer(_connectionFileContents);
_connectionTreeModel = _deserializer.Deserialize();
}
[OneTimeTearDown]
public void OnetimeTeardown()
{
_deserializer = null;
}
[Test]
public void ConnectionTreeModelHasARootNode()
{
var numberOfRootNodes = _connectionTreeModel.RootNodes.Count;
Assert.That(numberOfRootNodes, Is.GreaterThan(0));
}
[Test]
public void RootNodeHasContents()
{
var rootNodeContents = _connectionTreeModel.RootNodes.First().Children;
Assert.That(rootNodeContents, Is.Not.Empty);
}
[Test]
public void AllSubRootFoldersImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var rootNodeContents = importedRdcmanRootNode.Children.Count(node => node.Name == "Group1" || node.Name == "Group2");
Assert.That(rootNodeContents, Is.EqualTo(2));
}
[Test]
public void ConnectionDisplayNameImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.Name, Is.EqualTo(ExpectedName));
}
[Test]
public void ConnectionHostnameImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.Hostname, Is.EqualTo(ExpectedHostname));
}
[Test]
public void ConnectionDescriptionImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.Description, Is.EqualTo(ExpectedDescription));
}
[Test]
public void ConnectionUsernameImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.Username, Is.EqualTo(ExpectedUsername));
}
[Test]
public void ConnectionDomainImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.Domain, Is.EqualTo(ExpectedDomain));
}
// Since password is encrypted with a machine key, cant test decryption on another machine
//[Test]
//public void ConnectionPasswordImported()
//{
// var rootNode = _connectionTreeModel.RootNodes.First();
// var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
// var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
// var connection = group1.Children.First();
// Assert.That(connection.Password, Is.EqualTo(ExpectedPassword));
//}
[Test]
public void ConnectionProtocolSetToRdp()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.Protocol, Is.EqualTo(ProtocolType.RDP));
}
[Test]
public void ConnectionUseConsoleSessionImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.UseConsoleSession, Is.EqualTo(ExpectedUseConsoleSession));
}
[Test]
public void ConnectionPortImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.Port, Is.EqualTo(ExpectedPort));
}
[Test]
public void ConnectionGatewayUsageMethodImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.RDGatewayUsageMethod, Is.EqualTo(ExpectedGatewayUsageMethod));
}
[Test]
public void ConnectionGatewayHostnameImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.RDGatewayHostname, Is.EqualTo(ExpectedGatewayHostname));
}
[Test]
public void ConnectionGatewayUsernameImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.RDGatewayUsername, Is.EqualTo(ExpectedGatewayUsername));
}
// Since password is encrypted with a machine key, cant test decryption on another machine
//[Test]
//public void ConnectionGatewayPasswordImported()
//{
// var rootNode = _connectionTreeModel.RootNodes.First();
// var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
// var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
// var connection = group1.Children.First();
// Assert.That(connection.RDGatewayPassword, Is.EqualTo(ExpectedGatewayPassword));
//}
[Test]
public void ConnectionGatewayDomainImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.RDGatewayDomain, Is.EqualTo(ExpectedGatewayDomain));
}
[Test]
public void ConnectionResolutionImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.Resolution, Is.EqualTo(ExpectedRdpResolution));
}
[Test]
public void ConnectionColorDepthImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.Colors, Is.EqualTo(ExpectedRdpColorDepth));
}
[Test]
public void ConnectionAudioRedirectionImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.RedirectSound, Is.EqualTo(ExpectedAudioRedirection));
}
[Test]
public void ConnectionKeyRedirectionImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.RedirectKeys, Is.EqualTo(ExpectedKeyRedirection));
}
[Test]
public void ConnectionDriveRedirectionImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.RedirectDiskDrives, Is.EqualTo(ExpectedDriveRedirection));
}
[Test]
public void ConnectionPortRedirectionImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.RedirectPorts, Is.EqualTo(ExpectedPortRedirection));
}
[Test]
public void ConnectionPrinterRedirectionImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.RedirectPrinters, Is.EqualTo(ExpectedPrinterRedirection));
}
[Test]
public void ConnectionSmartcardRedirectionImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.RedirectSmartCards, Is.EqualTo(ExpectedSmartcardRedirection));
}
[Test]
public void ConnectionauthenticationLevelImported()
{
var rootNode = _connectionTreeModel.RootNodes.First();
var importedRdcmanRootNode = rootNode.Children.OfType<ContainerInfo>().First();
var group1 = importedRdcmanRootNode.Children.OfType<ContainerInfo>().First(node => node.Name == "Group1");
var connection = group1.Children.First();
Assert.That(connection.RDPAuthenticationLevel, Is.EqualTo(ExpectedAuthLevel));
}
[Test]
public void ExceptionThrownOnBadSchemaVersion()
{
var badFileContents = Resources.test_rdcman_v2_2_badschemaversion;
var deserializer = new RemoteDesktopConnectionManagerDeserializer(badFileContents);
Assert.That(() => deserializer.Deserialize(), Throws.TypeOf<FileFormatException>());
}
[Test]
public void ExceptionThrownOnUnsupportedVersion()
{
var badFileContents = Resources.test_rdcman_badVersionNumber;
var deserializer = new RemoteDesktopConnectionManagerDeserializer(badFileContents);
Assert.That(() => deserializer.Deserialize(), Throws.TypeOf<FileFormatException>());
}
[Test]
public void ExceptionThrownOnNoVersion()
{
var badFileContents = Resources.test_rdcman_noversion;
var deserializer = new RemoteDesktopConnectionManagerDeserializer(badFileContents);
Assert.That(() => deserializer.Deserialize(), Throws.TypeOf<FileFormatException>());
}
}
}

View File

@@ -0,0 +1,255 @@
using System.Collections;
using System.Xml.Linq;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Security;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Serializers
{
public class XmlConnectionNodeSerializerTests
{
private XmlConnectionNodeSerializer _connectionNodeSerializer;
[SetUp]
public void Setup()
{
var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(
BlockCipherEngines.AES, BlockCipherModes.GCM);
_connectionNodeSerializer = new XmlConnectionNodeSerializer(cryptoProvider, "myPassword1".ConvertToSecureString());
}
[Test]
public void ReturnsXElement()
{
var returnVal = _connectionNodeSerializer.SerializeConnectionInfo(new ConnectionInfo());
Assert.That(returnVal, Is.TypeOf<XElement>());
}
[TestCaseSource(typeof(TestCaseDataSource), nameof(TestCaseDataSource.AttributesAndExpectedValues))]
public void XmlElementContainsSerializedAttribute(string attributeName, string expectedValue, ConnectionInfo connectionInfo)
{
var returnVal = _connectionNodeSerializer.SerializeConnectionInfo(connectionInfo);
var targetAttribute = returnVal.Attribute(XName.Get(attributeName));
Assert.That(targetAttribute?.Value, Is.EqualTo(expectedValue));
}
[TestCaseSource(typeof(TestCaseDataSource), nameof(TestCaseDataSource.PasswordAttributes))]
public void PasswordFieldsAreSerialized(string attributeName, ConnectionInfo connectionInfo)
{
var returnVal = _connectionNodeSerializer.SerializeConnectionInfo(connectionInfo);
var targetAttribute = returnVal.Attribute(XName.Get(attributeName));
Assert.That(targetAttribute?.Value, Is.Not.Empty);
}
[TestCaseSource(typeof(TestCaseDataSource), nameof(TestCaseDataSource.SaveFilterTests))]
public void AttributesNotSerializedWhenFiltered(string attributeName, ConnectionInfo connectionInfo)
{
var saveFilter = new SaveFilter(true);
var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(BlockCipherEngines.AES, BlockCipherModes.GCM);
_connectionNodeSerializer = new XmlConnectionNodeSerializer(cryptoProvider, "myPassword1".ConvertToSecureString(), saveFilter);
var returnVal = _connectionNodeSerializer.SerializeConnectionInfo(connectionInfo);
var targetAttribute = returnVal.Attribute(XName.Get(attributeName));
Assert.That(targetAttribute?.Value, Is.EqualTo(string.Empty));
}
[TestCaseSource(typeof(TestCaseDataSource), nameof(TestCaseDataSource.InheritanceFilterTests))]
public void InheritanceNotSerialiedWhenFiltered(string attributeName, ConnectionInfo connectionInfo)
{
var saveFilter = new SaveFilter(true);
var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(BlockCipherEngines.AES, BlockCipherModes.GCM);
_connectionNodeSerializer = new XmlConnectionNodeSerializer(cryptoProvider, "myPassword1".ConvertToSecureString(), saveFilter);
var returnVal = _connectionNodeSerializer.SerializeConnectionInfo(connectionInfo);
var targetAttribute = returnVal.Attribute(XName.Get(attributeName));
Assert.That(targetAttribute?.Value, Is.EqualTo(false.ToString()));
}
private class TestCaseDataSource
{
private static readonly ConnectionInfo ConnectionInfo = new ConnectionInfo
{
Name = "HeresACustomName",
Description = "myDescription",
Username = "myuser",
Domain = "superdomain",
Password = "pass",
Hostname = "somehost",
ExtApp = "myextapp",
PreExtApp = "preext1",
PostExtApp = "postext1",
MacAddress = "asdf-asdf-asdf-asdf23423",
LoadBalanceInfo = "loadbalanceinfohere",
RDGatewayUsername = "gatewayuser",
RDGatewayDomain = "somegatewaydomain",
RDGatewayHostname = "somegatewayhost",
RDGatewayPassword = "gatewaypass",
UserField = "userfield data here",
VNCProxyIP = "192.168.1.1",
VNCProxyUsername = "vncproxyuser",
VNCProxyPassword = "vncproxypass",
};
private static readonly ConnectionInfo ConnectionInfoWithInheritance = new ConnectionInfo
{
Inheritance = {EverythingInherited = true}
};
private static readonly ContainerInfo ContainerInfo = new ContainerInfo();
public static IEnumerable SaveFilterTests
{
get
{
yield return new TestCaseData("Username", ConnectionInfo);
yield return new TestCaseData("Domain", ConnectionInfo);
yield return new TestCaseData("Password", ConnectionInfo);
yield return new TestCaseData("RDGatewayUsername", ConnectionInfo);
yield return new TestCaseData("RDGatewayDomain", ConnectionInfo);
yield return new TestCaseData("RDGatewayPassword", ConnectionInfo);
yield return new TestCaseData("VNCProxyUsername", ConnectionInfo);
yield return new TestCaseData("VNCProxyPassword", ConnectionInfo);
}
}
public static IEnumerable InheritanceFilterTests
{
get
{
yield return new TestCaseData("InheritUsername", ConnectionInfoWithInheritance);
yield return new TestCaseData("InheritDomain", ConnectionInfoWithInheritance);
yield return new TestCaseData("InheritPassword", ConnectionInfoWithInheritance);
yield return new TestCaseData("InheritRDGatewayUsername", ConnectionInfoWithInheritance);
yield return new TestCaseData("InheritRDGatewayDomain", ConnectionInfoWithInheritance);
yield return new TestCaseData("InheritRDGatewayPassword", ConnectionInfoWithInheritance);
yield return new TestCaseData("InheritVNCProxyUsername", ConnectionInfoWithInheritance);
yield return new TestCaseData("InheritVNCProxyPassword", ConnectionInfoWithInheritance);
}
}
public static IEnumerable PasswordAttributes
{
get
{
yield return new TestCaseData("Password", ConnectionInfo);
yield return new TestCaseData("VNCProxyPassword", ConnectionInfo);
yield return new TestCaseData("RDGatewayPassword", ConnectionInfo);
}
}
public static IEnumerable AttributesAndExpectedValues
{
get
{
yield return new TestCaseData("Name", ConnectionInfo.Name, ConnectionInfo);
yield return new TestCaseData("Type", "Connection", ConnectionInfo);
yield return new TestCaseData("Type", "Container", ContainerInfo);
yield return new TestCaseData("Expanded", ContainerInfo.IsExpanded.ToString(), ContainerInfo);
yield return new TestCaseData("Descr", ConnectionInfo.Description, ConnectionInfo);
yield return new TestCaseData("Icon", ConnectionInfo.Icon, ConnectionInfo);
yield return new TestCaseData("Panel", "General", ConnectionInfo);
yield return new TestCaseData("Username", ConnectionInfo.Username, ConnectionInfo);
yield return new TestCaseData("Domain", ConnectionInfo.Domain, ConnectionInfo);
yield return new TestCaseData("Hostname", ConnectionInfo.Hostname, ConnectionInfo);
yield return new TestCaseData("Protocol", "RDP", ConnectionInfo);
yield return new TestCaseData("PuttySession", ConnectionInfo.PuttySession, ConnectionInfo);
yield return new TestCaseData("Port", ConnectionInfo.Port.ToString(), ConnectionInfo);
yield return new TestCaseData("ConnectToConsole", ConnectionInfo.UseConsoleSession.ToString(), ConnectionInfo);
yield return new TestCaseData("UseCredSsp", ConnectionInfo.UseCredSsp.ToString(), ConnectionInfo);
yield return new TestCaseData("RenderingEngine", ConnectionInfo.RenderingEngine.ToString(), ConnectionInfo);
yield return new TestCaseData("ICAEncryptionStrength", ConnectionInfo.ICAEncryptionStrength.ToString(), ConnectionInfo);
yield return new TestCaseData("RDPAuthenticationLevel", ConnectionInfo.RDPAuthenticationLevel.ToString(), ConnectionInfo);
yield return new TestCaseData("LoadBalanceInfo", ConnectionInfo.LoadBalanceInfo, ConnectionInfo);
yield return new TestCaseData("Colors", ConnectionInfo.Colors.ToString(), ConnectionInfo);
yield return new TestCaseData("Resolution", ConnectionInfo.Resolution.ToString(), ConnectionInfo);
yield return new TestCaseData("AutomaticResize", ConnectionInfo.AutomaticResize.ToString(), ConnectionInfo);
yield return new TestCaseData("DisplayWallpaper", ConnectionInfo.DisplayWallpaper.ToString(), ConnectionInfo);
yield return new TestCaseData("DisplayThemes", ConnectionInfo.DisplayThemes.ToString(), ConnectionInfo);
yield return new TestCaseData("EnableFontSmoothing", ConnectionInfo.EnableFontSmoothing.ToString(), ConnectionInfo);
yield return new TestCaseData("EnableDesktopComposition", ConnectionInfo.EnableDesktopComposition.ToString(), ConnectionInfo);
yield return new TestCaseData("CacheBitmaps", ConnectionInfo.CacheBitmaps.ToString(), ConnectionInfo);
yield return new TestCaseData("RedirectDiskDrives", ConnectionInfo.RedirectDiskDrives.ToString(), ConnectionInfo);
yield return new TestCaseData("RedirectPorts", ConnectionInfo.RedirectPorts.ToString(), ConnectionInfo);
yield return new TestCaseData("RedirectPrinters", ConnectionInfo.RedirectPrinters.ToString(), ConnectionInfo);
yield return new TestCaseData("RedirectSmartCards", ConnectionInfo.RedirectSmartCards.ToString(), ConnectionInfo);
yield return new TestCaseData("RedirectSound", ConnectionInfo.RedirectSound.ToString(), ConnectionInfo);
yield return new TestCaseData("RedirectKeys", ConnectionInfo.RedirectKeys.ToString(), ConnectionInfo);
yield return new TestCaseData("Connected", false.ToString(), ConnectionInfo);
yield return new TestCaseData("PreExtApp", ConnectionInfo.PreExtApp, ConnectionInfo);
yield return new TestCaseData("PostExtApp", ConnectionInfo.PostExtApp, ConnectionInfo);
yield return new TestCaseData("MacAddress", ConnectionInfo.MacAddress, ConnectionInfo);
yield return new TestCaseData("UserField", ConnectionInfo.UserField, ConnectionInfo);
yield return new TestCaseData("ExtApp", ConnectionInfo.ExtApp, ConnectionInfo);
yield return new TestCaseData("VNCCompression", ConnectionInfo.VNCCompression.ToString(), ConnectionInfo);
yield return new TestCaseData("VNCEncoding", ConnectionInfo.VNCEncoding.ToString(), ConnectionInfo);
yield return new TestCaseData("VNCAuthMode", ConnectionInfo.VNCAuthMode.ToString(), ConnectionInfo);
yield return new TestCaseData("VNCProxyType", ConnectionInfo.VNCProxyType.ToString(), ConnectionInfo);
yield return new TestCaseData("VNCProxyIP", ConnectionInfo.VNCProxyIP, ConnectionInfo);
yield return new TestCaseData("VNCProxyPort", ConnectionInfo.VNCProxyPort.ToString(), ConnectionInfo);
yield return new TestCaseData("VNCProxyUsername", ConnectionInfo.VNCProxyUsername, ConnectionInfo);
yield return new TestCaseData("VNCColors", ConnectionInfo.VNCColors.ToString(), ConnectionInfo);
yield return new TestCaseData("VNCSmartSizeMode", ConnectionInfo.VNCSmartSizeMode.ToString(), ConnectionInfo);
yield return new TestCaseData("VNCViewOnly", ConnectionInfo.VNCViewOnly.ToString(), ConnectionInfo);
yield return new TestCaseData("RDGatewayUsageMethod", ConnectionInfo.RDGatewayUsageMethod.ToString(), ConnectionInfo);
yield return new TestCaseData("RDGatewayHostname", ConnectionInfo.RDGatewayHostname, ConnectionInfo);
yield return new TestCaseData("RDGatewayUseConnectionCredentials", ConnectionInfo.RDGatewayUseConnectionCredentials.ToString(), ConnectionInfo);
yield return new TestCaseData("RDGatewayUsername", ConnectionInfo.RDGatewayUsername, ConnectionInfo);
yield return new TestCaseData("RDGatewayDomain", ConnectionInfo.RDGatewayDomain, ConnectionInfo);
yield return new TestCaseData("InheritCacheBitmaps", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritColors", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritDescription", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritDisplayThemes", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritDisplayWallpaper", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritEnableFontSmoothing", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritEnableDesktopComposition", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritDomain", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritIcon", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritPanel", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritPassword", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritPort", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritProtocol", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritPuttySession", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRedirectDiskDrives", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRedirectKeys", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRedirectPorts", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRedirectPrinters", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRedirectSmartCards", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRedirectSound", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritSoundQuality", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritResolution", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritAutomaticResize", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritUseConsoleSession", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritUseCredSsp", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRenderingEngine", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritUsername", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritICAEncryptionStrength", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRDPAuthenticationLevel", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritLoadBalanceInfo", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritPreExtApp", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritPostExtApp", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritMacAddress", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritUserField", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritExtApp", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritVNCCompression", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritVNCEncoding", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritVNCAuthMode", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritVNCProxyType", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritVNCProxyIP", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritVNCProxyPort", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritVNCProxyUsername", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritVNCProxyPassword", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritVNCColors", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritVNCSmartSizeMode", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritVNCViewOnly", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRDGatewayUsageMethod", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRDGatewayHostname", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRDGatewayUseConnectionCredentials", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRDGatewayUsername", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRDGatewayPassword", false.ToString(), ConnectionInfo);
yield return new TestCaseData("InheritRDGatewayDomain", false.ToString(), ConnectionInfo);
}
}
}
}
}

View File

@@ -0,0 +1,157 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Security;
using mRemoteNG.Tree;
using mRemoteNGTests.Properties;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Serializers
{
public class XmlConnectionsDeserializerTests
{
private XmlConnectionsDeserializer _xmlConnectionsDeserializer;
private ConnectionTreeModel _connectionTreeModel;
public void Setup(string confCons, string password)
{
_xmlConnectionsDeserializer = new XmlConnectionsDeserializer(confCons)
{
AuthenticationRequestor = password.ConvertToSecureString
};
_connectionTreeModel = _xmlConnectionsDeserializer.Deserialize();
}
[TearDown]
public void Teardown()
{
_xmlConnectionsDeserializer = null;
_connectionTreeModel = null;
}
[TestCaseSource(typeof(XmlConnectionsDeserializerFixtureData), nameof(XmlConnectionsDeserializerFixtureData.FixtureParams))]
public void DeserializingCreatesRootNode(Datagram testData)
{
Setup(testData.ConfCons, testData.Password);
Assert.That(_connectionTreeModel.RootNodes, Is.Not.Empty);
}
[TestCaseSource(typeof(XmlConnectionsDeserializerFixtureData), nameof(XmlConnectionsDeserializerFixtureData.FixtureParams))]
public void RootNodeHasThreeChildren(Datagram testData)
{
Setup(testData.ConfCons, testData.Password);
var connectionRoot = _connectionTreeModel.RootNodes[0];
Assert.That(connectionRoot.Children.Count, Is.EqualTo(3));
}
[TestCaseSource(typeof(XmlConnectionsDeserializerFixtureData), nameof(XmlConnectionsDeserializerFixtureData.FixtureParams))]
public void RootContainsFolder1(Datagram testData)
{
Setup(testData.ConfCons, testData.Password);
var connectionRoot = _connectionTreeModel.RootNodes[0];
Assert.That(ContainsNodeNamed("Folder1", connectionRoot.Children), Is.True);
}
[TestCaseSource(typeof(XmlConnectionsDeserializerFixtureData), nameof(XmlConnectionsDeserializerFixtureData.FixtureParams))]
public void Folder1ContainsThreeConnections(Datagram testData)
{
Setup(testData.ConfCons, testData.Password);
var connectionRoot = _connectionTreeModel.RootNodes[0];
var folder1 = GetFolderNamed("Folder1", connectionRoot.Children);
var folder1ConnectionCount = folder1?.Children.Count(node => !(node is ContainerInfo));
Assert.That(folder1ConnectionCount, Is.EqualTo(3));
}
[TestCaseSource(typeof(XmlConnectionsDeserializerFixtureData), nameof(XmlConnectionsDeserializerFixtureData.FixtureParams))]
public void Folder2ContainsThreeNodes(Datagram testData)
{
Setup(testData.ConfCons, testData.Password);
var connectionRoot = _connectionTreeModel.RootNodes[0];
var folder2 = GetFolderNamed("Folder2", connectionRoot.Children);
var folder1Count = folder2?.Children.Count();
Assert.That(folder1Count, Is.EqualTo(3));
}
[TestCaseSource(typeof(XmlConnectionsDeserializerFixtureData), nameof(XmlConnectionsDeserializerFixtureData.FixtureParams))]
public void Folder21HasTwoNodes(Datagram testData)
{
Setup(testData.ConfCons, testData.Password);
var connectionRoot = _connectionTreeModel.RootNodes[0];
var folder2 = GetFolderNamed("Folder2", connectionRoot.Children);
var folder21 = GetFolderNamed("Folder2.1", folder2.Children);
Assert.That(folder21.Children.Count, Is.EqualTo(2));
}
[TestCaseSource(typeof(XmlConnectionsDeserializerFixtureData), nameof(XmlConnectionsDeserializerFixtureData.FixtureParams))]
public void Folder211HasOneConnection(Datagram testData)
{
Setup(testData.ConfCons, testData.Password);
var connectionRoot = _connectionTreeModel.RootNodes[0];
var folder2 = GetFolderNamed("Folder2", connectionRoot.Children);
var folder21 = GetFolderNamed("Folder2.1", folder2.Children);
var folder211 = GetFolderNamed("Folder2.1.1", folder21.Children);
var connectionCount = folder211.Children.Count(node => !(node is ContainerInfo));
Assert.That(connectionCount, Is.EqualTo(1));
}
[TestCaseSource(typeof(XmlConnectionsDeserializerFixtureData), nameof(XmlConnectionsDeserializerFixtureData.FixtureParams))]
public void Folder22InheritsUsername(Datagram testData)
{
Setup(testData.ConfCons, testData.Password);
var connectionRoot = _connectionTreeModel.RootNodes[0];
var folder2 = GetFolderNamed("Folder2", connectionRoot.Children);
var folder22 = GetFolderNamed("Folder2.2", folder2.Children);
Assert.That(folder22.Inheritance.Username, Is.True);
}
private bool ContainsNodeNamed(string name, IEnumerable<ConnectionInfo> list)
{
return list.Any(node => node.Name == name);
}
private ContainerInfo GetFolderNamed(string name, IEnumerable<ConnectionInfo> list)
{
var folder = list.First(node => (node is ContainerInfo && node.Name == name)) as ContainerInfo;
return folder;
}
}
public class XmlConnectionsDeserializerFixtureData
{
public static IEnumerable FixtureParams
{
get
{
yield return new TestCaseData(new Datagram("confCons v2.5", Resources.confCons_v2_5, "mR3m"));
yield return new TestCaseData(new Datagram("confCons v2.6", Resources.confCons_v2_6, "mR3m"));
yield return new TestCaseData(new Datagram("confCons v2.6 5k Iterations", Resources.confCons_v2_6_5k_iterations, "mR3m"));
yield return new TestCaseData(new Datagram("confCons v2.6 fullencryption", Resources.confCons_v2_6_fullencryption, "mR3m"));
yield return new TestCaseData(new Datagram("confCons v2.6 custompassword", Resources.confCons_v2_6_passwordis_Password, "Password"));
yield return new TestCaseData(new Datagram("confCons v2.6 custompassword,fullencryption", Resources.confCons_v2_6_passwordis_Password_fullencryption, "Password"));
}
}
}
public class Datagram
{
private readonly string _testName;
public string ConfCons { get; set; }
public string Password { get; set; }
public Datagram(string testName, string confCons, string password)
{
_testName = testName;
ConfCons = confCons;
Password = password;
}
public override string ToString()
{
return _testName;
}
}
}

View File

@@ -0,0 +1,107 @@
using System.Xml.XPath;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Security;
using mRemoteNG.Tree;
using mRemoteNG.Tree.Root;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Serializers
{
public class XmlConnectionsDocumentCompilerTests
{
private XmlConnectionsDocumentCompiler _documentCompiler;
private ConnectionTreeModel _connectionTreeModel;
private ICryptographyProvider _cryptographyProvider;
private ContainerInfo _folder1;
private ContainerInfo _folder2;
private ContainerInfo _folder3;
private ConnectionInfo _con0;
private ConnectionInfo _con1;
private ConnectionInfo _con2;
private ConnectionInfo _con3;
private ConnectionInfo _con4;
[SetUp]
public void Setup()
{
_cryptographyProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(BlockCipherEngines.AES, BlockCipherModes.GCM);
_documentCompiler = new XmlConnectionsDocumentCompiler(_cryptographyProvider);
_connectionTreeModel = SetupConnectionTreeModel();
}
[Test]
public void XDocumentHasXmlDeclaration()
{
var xdoc = _documentCompiler.CompileDocument(_connectionTreeModel, false, false);
Assert.That(xdoc.Declaration, Is.Not.Null);
}
[Test]
public void DocumentHasRootConnectionElement()
{
var xdoc =_documentCompiler.CompileDocument(_connectionTreeModel, false, false);
var rootElementName = xdoc.Root?.Name.LocalName;
Assert.That(rootElementName, Is.EqualTo("Connections"));
}
[Test]
public void ConnectionNodesSerializedRecursively()
{
var xdoc = _documentCompiler.CompileDocument(_connectionTreeModel, false, false);
var con4 = xdoc.Root?.XPathSelectElement("Node[@Name='folder2']/Node[@Name='folder3']/Node[@Name='con4']");
Assert.That(con4, Is.Not.Null);
}
[Test]
public void XmlContentEncryptedWhenFullFileEncryptionTurnedOn()
{
var xdoc = _documentCompiler.CompileDocument(_connectionTreeModel, true, false);
var rootElementValue = xdoc.Root?.Value;
Assert.That(rootElementValue, Is.Not.EqualTo(string.Empty));
}
private ConnectionTreeModel SetupConnectionTreeModel()
{
/*
* Root
* |--- con0
* |--- folder1
* | L--- con1
* L--- folder2
* |--- con2
* L--- folder3
* |--- con3
* L--- con4
*/
BuildTreeNodes();
var connectionTreeModel = new ConnectionTreeModel();
var rootNode = new RootNodeInfo(RootNodeType.Connection);
rootNode.AddChild(_folder1);
rootNode.AddChild(_folder2);
rootNode.AddChild(_con0);
_folder1.AddChild(_con1);
_folder2.AddChild(_con2);
_folder2.AddChild(_folder3);
_folder3.AddChild(_con3);
_folder3.AddChild(_con4);
connectionTreeModel.AddRootNode(rootNode);
return connectionTreeModel;
}
private void BuildTreeNodes()
{
_folder1 = new ContainerInfo { Name = "folder1" };
_folder2 = new ContainerInfo { Name = "folder2" };
_folder3 = new ContainerInfo { Name = "folder3" };
_con0 = new ConnectionInfo { Name = "con0" };
_con1 = new ConnectionInfo { Name = "con1" };
_con2 = new ConnectionInfo { Name = "con2" };
_con3 = new ConnectionInfo { Name = "con3" };
_con4 = new ConnectionInfo { Name = "con4" };
}
}
}

View File

@@ -0,0 +1,70 @@
using System.Xml.Linq;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Security;
using mRemoteNG.Tree;
using mRemoteNG.Tree.Root;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Serializers
{
public class XmlConnectionsDocumentEncryptorTests
{
private XmlConnectionsDocumentEncryptor _documentEncryptor;
private XDocument _originalDocument;
[SetUp]
public void Setup()
{
var connectionTreeModel = SetupConnectionTreeModel();
var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(BlockCipherEngines.AES, BlockCipherModes.GCM);
_originalDocument = new XmlConnectionsDocumentCompiler(cryptoProvider).CompileDocument(connectionTreeModel, false, false);
_documentEncryptor = new XmlConnectionsDocumentEncryptor(cryptoProvider);
}
[Test]
public void RootNodeValueIsEncrypted()
{
var encryptedDocument = _documentEncryptor.EncryptDocument(_originalDocument, "mR3m".ConvertToSecureString());
var encryptedContent = encryptedDocument.Root?.Value;
Assert.That(encryptedContent, Is.Not.EqualTo(string.Empty));
}
private ConnectionTreeModel SetupConnectionTreeModel()
{
/*
* Root
* |--- con0
* |--- folder1
* | L--- con1
* L--- folder2
* |--- con2
* L--- folder3
* |--- con3
* L--- con4
*/
var connectionTreeModel = new ConnectionTreeModel();
var rootNode = new RootNodeInfo(RootNodeType.Connection);
var folder1 = new ContainerInfo { Name = "folder1" };
var folder2 = new ContainerInfo { Name = "folder2" };
var folder3 = new ContainerInfo { Name = "folder3" };
var con0 = new ConnectionInfo { Name = "con0" };
var con1 = new ConnectionInfo { Name = "con1" };
var con2 = new ConnectionInfo { Name = "con2" };
var con3 = new ConnectionInfo { Name = "con3" };
var con4 = new ConnectionInfo { Name = "con4" };
rootNode.AddChild(folder1);
rootNode.AddChild(folder2);
rootNode.AddChild(con0);
folder1.AddChild(con1);
folder2.AddChild(con2);
folder2.AddChild(folder3);
folder3.AddChild(con3);
folder3.AddChild(con4);
connectionTreeModel.AddRootNode(rootNode);
return connectionTreeModel;
}
}
}

View File

@@ -0,0 +1,83 @@
using System.Xml;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Security.SymmetricEncryption;
using mRemoteNG.Tree;
using mRemoteNG.Tree.Root;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Serializers
{
public class XmlConnectionsSerializerTests
{
private XmlConnectionsSerializer _serializer;
private ConnectionTreeModel _connectionTreeModel;
[SetUp]
public void Setup()
{
var encryptor = new AeadCryptographyProvider();
_serializer = new XmlConnectionsSerializer(encryptor);
_connectionTreeModel = SetupConnectionTreeModel();
}
[Test]
public void ChildNestingSerializedCorrectly()
{
var serializedConnections = _serializer.Serialize(_connectionTreeModel);
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(serializedConnections);
var nodeCon4 = xmlDoc.DocumentElement?.SelectSingleNode("Node[@Name='folder2']/Node[@Name='folder3']/Node[@Name='con4']");
Assert.That(nodeCon4, Is.Not.Null);
}
[Test]
public void SingleConnectionSerializedCorrectly()
{
var connectionInfo = new ConnectionInfo {Name = "myConnection"};
var serializedConnections = _serializer.Serialize(connectionInfo);
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(serializedConnections);
var connectionNode = xmlDoc.DocumentElement?.SelectSingleNode($"Node[@Name='{connectionInfo.Name}']");
Assert.That(connectionNode, Is.Not.Null);
}
private ConnectionTreeModel SetupConnectionTreeModel()
{
/*
* Root
* |--- con0
* |--- folder1
* | L--- con1
* L--- folder2
* |--- con2
* L--- folder3
* |--- con3
* L--- con4
*/
var connectionTreeModel = new ConnectionTreeModel();
var rootNode = new RootNodeInfo(RootNodeType.Connection);
var folder1 = new ContainerInfo { Name = "folder1" };
var folder2 = new ContainerInfo { Name = "folder2" };
var folder3 = new ContainerInfo { Name = "folder3" };
var con0 = new ConnectionInfo { Name = "con0" };
var con1 = new ConnectionInfo { Name = "con1" };
var con2 = new ConnectionInfo { Name = "con2" };
var con3 = new ConnectionInfo { Name = "con3" };
var con4 = new ConnectionInfo { Name = "con4" };
rootNode.AddChild(folder1);
rootNode.AddChild(folder2);
rootNode.AddChild(con0);
folder1.AddChild(con1);
folder2.AddChild(con2);
folder2.AddChild(folder3);
folder3.AddChild(con3);
folder3.AddChild(con4);
connectionTreeModel.AddRootNode(rootNode);
return connectionTreeModel;
}
}
}

View File

@@ -0,0 +1,139 @@
using System;
using System.Collections;
using System.Xml.Linq;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Security;
using mRemoteNG.Security.SymmetricEncryption;
using mRemoteNG.Tree.Root;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Serializers
{
public class XmlRootNodeSerializerTests
{
private XmlRootNodeSerializer _rootNodeSerializer;
private ICryptographyProvider _cryptographyProvider;
private RootNodeInfo _rootNodeInfo;
[SetUp]
public void Setup()
{
_rootNodeSerializer = new XmlRootNodeSerializer();
_cryptographyProvider = new AeadCryptographyProvider();
_rootNodeInfo = new RootNodeInfo(RootNodeType.Connection);
}
[Test]
public void RootElementNamedConnections()
{
var element = _rootNodeSerializer.SerializeRootNodeInfo(_rootNodeInfo, _cryptographyProvider);
Assert.That(element.Name.LocalName, Is.EqualTo("Connections"));
}
[Test]
public void RootNodeInfoNameSerialized()
{
var element = _rootNodeSerializer.SerializeRootNodeInfo(_rootNodeInfo, _cryptographyProvider);
var attributeValue = element.Attribute(XName.Get("Name"))?.Value;
Assert.That(attributeValue, Is.EqualTo("Connections"));
}
[TestCase(true)]
[TestCase(false)]
public void ExportValueSerialized(bool export)
{
var element = _rootNodeSerializer.SerializeRootNodeInfo(_rootNodeInfo, _cryptographyProvider, export:export);
var attributeValue = element.Attribute(XName.Get("Export"))?.Value;
Assert.That(attributeValue, Is.EqualTo(export.ToString()));
}
[TestCaseSource(typeof(TestCaseSources), nameof(TestCaseSources.AllEngineAndModeCombos))]
public void EncryptionEngineSerialized(BlockCipherEngines engine, BlockCipherModes mode)
{
var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(engine, mode);
var element = _rootNodeSerializer.SerializeRootNodeInfo(_rootNodeInfo, cryptoProvider);
var attributeValue = element.Attribute(XName.Get("EncryptionEngine"))?.Value;
Assert.That(attributeValue, Is.EqualTo(engine.ToString()));
}
[TestCaseSource(typeof(TestCaseSources), nameof(TestCaseSources.AllEngineAndModeCombos))]
public void EncryptionModeSerialized(BlockCipherEngines engine, BlockCipherModes mode)
{
var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(engine, mode);
var element = _rootNodeSerializer.SerializeRootNodeInfo(_rootNodeInfo, cryptoProvider);
var attributeValue = element.Attribute(XName.Get("BlockCipherMode"))?.Value;
Assert.That(attributeValue, Is.EqualTo(mode.ToString()));
}
[TestCase(1000)]
[TestCase(1234)]
[TestCase(9999)]
[TestCase(10000)]
public void KdfIterationsSerialized(int iterations)
{
_cryptographyProvider.KeyDerivationIterations = iterations;
var element = _rootNodeSerializer.SerializeRootNodeInfo(_rootNodeInfo, _cryptographyProvider);
var attributeValue = element.Attribute(XName.Get("KdfIterations"))?.Value;
Assert.That(attributeValue, Is.EqualTo(iterations.ToString()));
}
[TestCase(true)]
[TestCase(false)]
public void FullFileEncryptionFlagSerialized(bool fullFileEncryption)
{
var element = _rootNodeSerializer.SerializeRootNodeInfo(_rootNodeInfo, _cryptographyProvider, fullFileEncryption);
var attributeValue = element.Attribute(XName.Get("FullFileEncryption"))?.Value;
Assert.That(attributeValue, Is.EqualTo(fullFileEncryption.ToString()));
}
[TestCase("", "ThisIsNotProtected")]
[TestCase(null, "ThisIsNotProtected")]
[TestCase("mR3m", "ThisIsNotProtected")]
[TestCase("customPassword1", "ThisIsProtected")]
public void ProtectedStringSerialized(string customPassword, string expectedPlainText)
{
_rootNodeInfo.PasswordString = customPassword;
var element = _rootNodeSerializer.SerializeRootNodeInfo(_rootNodeInfo, _cryptographyProvider);
var attributeValue = element.Attribute(XName.Get("Protected"))?.Value;
var attributeValuePlainText = _cryptographyProvider.Decrypt(attributeValue, _rootNodeInfo.PasswordString.ConvertToSecureString());
Assert.That(attributeValuePlainText, Is.EqualTo(expectedPlainText));
}
[TestCase("", "ThisIsNotProtected")]
[TestCase("customPassword1", "ThisIsNotProtected")]
public void EncryptWithDefaultPasswordWhenExporting(string customPassword, string expectedPlainText)
{
_rootNodeInfo.PasswordString = customPassword;
var element = _rootNodeSerializer.SerializeRootNodeInfo(_rootNodeInfo, _cryptographyProvider, export:true);
var attributeValue = element.Attribute(XName.Get("Protected"))?.Value;
var attributeValuePlainText = _cryptographyProvider.Decrypt(attributeValue, _rootNodeInfo.DefaultPassword.ConvertToSecureString());
Assert.That(attributeValuePlainText, Is.EqualTo(expectedPlainText));
}
[Test]
public void ConfVersionSerialized()
{
var element = _rootNodeSerializer.SerializeRootNodeInfo(_rootNodeInfo, _cryptographyProvider);
var attributeValue = element.Attribute(XName.Get("ConfVersion"))?.Value;
Assert.That(attributeValue, Is.EqualTo("2.6"));
}
private class TestCaseSources
{
public static IEnumerable AllEngineAndModeCombos
{
get
{
foreach (var engine in Enum.GetValues(typeof(BlockCipherEngines)))
{
foreach (var mode in Enum.GetValues(typeof(BlockCipherModes)))
{
yield return new TestCaseData(engine, mode);
}
}
}
}
}
}
}

View File

@@ -0,0 +1,507 @@
using mRemoteNG.Connection;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Connection.Protocol.Http;
using mRemoteNG.Connection.Protocol.ICA;
using mRemoteNG.Connection.Protocol.RDP;
using mRemoteNG.Connection.Protocol.VNC;
using NUnit.Framework;
namespace mRemoteNGTests.Connection
{
public class AbstractConnectionInfoDataTests
{
private class TestAbstractConnectionInfoData : AbstractConnectionInfoData {}
private TestAbstractConnectionInfoData _testAbstractConnectionInfoData;
[SetUp]
public void Setup()
{
_testAbstractConnectionInfoData = new TestAbstractConnectionInfoData();
}
[TearDown]
public void Teardown()
{
_testAbstractConnectionInfoData = null;
}
[Test]
public void NameNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.Name = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void DescriptionNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.Description = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void IconNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.Icon = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void PanelNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.Panel = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void HostnameNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.Hostname = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void UsernameNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.Username = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void PasswordNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.Password = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void DomainNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.Domain = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void ProtocolNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.Protocol = ProtocolType.HTTP;
Assert.That(wasCalled, Is.True);
}
[Test]
public void ExtAppNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.ExtApp = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void PortNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.Port = 9999;
Assert.That(wasCalled, Is.True);
}
[Test]
public void PuttySessionNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.PuttySession = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void IcaEncryptionNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.ICAEncryptionStrength = ProtocolICA.EncryptionStrength.Encr128BitLogonOnly;
Assert.That(wasCalled, Is.True);
}
[Test]
public void UseConsoleSessionNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.UseConsoleSession = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void RdpAuthenticationLevelNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RDPAuthenticationLevel = ProtocolRDP.AuthenticationLevel.AuthRequired;
Assert.That(wasCalled, Is.True);
}
[Test]
public void LoadBalanceInfoNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.LoadBalanceInfo = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void RenderingEngineNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RenderingEngine = HTTPBase.RenderingEngine.Gecko;
Assert.That(wasCalled, Is.True);
}
[Test]
public void UseCredSspNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.UseCredSsp = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void RdGatewayUsageMethodNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RDGatewayUsageMethod = ProtocolRDP.RDGatewayUsageMethod.Always;
Assert.That(wasCalled, Is.True);
}
[Test]
public void RdGatewayHostnameNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RDGatewayHostname = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void RdGatewayUseConnectionCredentialsNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RDGatewayUseConnectionCredentials = ProtocolRDP.RDGatewayUseConnectionCredentials.SmartCard;
Assert.That(wasCalled, Is.True);
}
[Test]
public void RdGatewayUsernameNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RDGatewayUsername = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void RdGatewayPasswordNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RDGatewayPassword = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void RdGatewayDomainNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RDGatewayDomain = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void ResolutionNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.Resolution = ProtocolRDP.RDPResolutions.Res1366x768;
Assert.That(wasCalled, Is.True);
}
[Test]
public void AutomaticResizeNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.AutomaticResize = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void ColorsNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.Colors = ProtocolRDP.RDPColors.Colors16Bit;
Assert.That(wasCalled, Is.True);
}
[Test]
public void CacheBitmapsNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.CacheBitmaps = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void DisplayWallpaperNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.DisplayWallpaper = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void DisplayThemesNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.DisplayThemes = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void EnableFontSmoothingNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.EnableFontSmoothing = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void EnableDesktopCompositionNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.EnableDesktopComposition = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void RedirectKeysNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RedirectKeys = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void RedirectDiskDrivesNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RedirectDiskDrives = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void RedirectPrintersNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RedirectPrinters = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void RedirectPortsNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RedirectPorts = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void RedirectSmartCardsNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RedirectSmartCards = true;
Assert.That(wasCalled, Is.True);
}
[Test]
public void RedirectSoundNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.RedirectSound = ProtocolRDP.RDPSounds.DoNotPlay;
Assert.That(wasCalled, Is.True);
}
[Test]
public void PreExtAppNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.PreExtApp = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void PostExtAppNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.PostExtApp = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void MacAddressNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.MacAddress = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void UserFieldNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.UserField = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void VncCompressionNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.VNCCompression = ProtocolVNC.Compression.Comp5;
Assert.That(wasCalled, Is.True);
}
[Test]
public void VncEncodingNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.VNCEncoding = ProtocolVNC.Encoding.EncTight;
Assert.That(wasCalled, Is.True);
}
[Test]
public void VncAuthModeNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.VNCAuthMode = ProtocolVNC.AuthMode.AuthWin;
Assert.That(wasCalled, Is.True);
}
[Test]
public void VncProxyTypeNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.VNCProxyType = ProtocolVNC.ProxyType.ProxyUltra;
Assert.That(wasCalled, Is.True);
}
[Test]
public void VncProxyIpNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.VNCProxyIP = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void VncProxyPortNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.VNCProxyPort = 9999;
Assert.That(wasCalled, Is.True);
}
[Test]
public void VncProxyUsernameNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.VNCProxyUsername = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void VncProxyPasswordNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.VNCProxyPassword = "a";
Assert.That(wasCalled, Is.True);
}
[Test]
public void VncColorsNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.VNCColors = ProtocolVNC.Colors.Col8Bit;
Assert.That(wasCalled, Is.True);
}
[Test]
public void VncSmartSizeModeNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.VNCSmartSizeMode = ProtocolVNC.SmartSizeMode.SmartSFree;
Assert.That(wasCalled, Is.True);
}
[Test]
public void VncViewOnlyNotifiesOnValueChange()
{
var wasCalled = false;
_testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true;
_testAbstractConnectionInfoData.VNCViewOnly = true;
Assert.That(wasCalled, Is.True);
}
}
}

View File

@@ -0,0 +1,42 @@
using System.ComponentModel;
using mRemoteNG.Connection;
using NUnit.Framework;
namespace mRemoteNGTests.Connection
{
public class ConnectionInfoComparerTests
{
private ConnectionInfo _con1;
private ConnectionInfo _con2;
[OneTimeSetUp]
public void OnetimeSetup()
{
_con1 = new ConnectionInfo { Name = "a" };
_con2 = new ConnectionInfo { Name = "b" };
}
[Test]
public void SortAscendingOnName()
{
var comparer = new ConnectionInfoComparer<string>(node => node.Name)
{
SortDirection = ListSortDirection.Ascending
};
var compareReturn = comparer.Compare(_con1, _con2);
Assert.That(compareReturn, Is.Negative);
}
[Test]
public void SortDescendingOnName()
{
var comparer = new ConnectionInfoComparer<string>(node => node.Name)
{
SortDirection = ListSortDirection.Descending
};
var compareReturn = comparer.Compare(_con1, _con2);
Assert.That(compareReturn, Is.Positive);
}
}
}

View File

@@ -2,6 +2,7 @@
using NUnit.Framework;
using System.Reflection;
using System.Collections;
using System.Linq;
namespace mRemoteNGTests.Connection
{
@@ -59,10 +60,23 @@ namespace mRemoteNGTests.Connection
Assert.That(_inheritance.Username, Is.True);
}
[Test]
public void GetPropertiesReturnsListOfSettableProperties()
{
var hasIconProperty = _inheritance.GetProperties().Contains(typeof(ConnectionInfoInheritance).GetProperty("Icon"));
Assert.That(hasIconProperty, Is.True);
}
[Test]
public void GetPropertiesExludesPropertiesThatShouldNotBeSet()
{
var hasEverythingInheritedProperty = _inheritance.GetProperties().Contains(typeof(ConnectionInfoInheritance).GetProperty("EverythingInherited"));
Assert.That(hasEverythingInheritedProperty, Is.False);
}
private bool AllInheritancePropertiesAreTrue()
{
bool allPropertiesTrue = true;
var allPropertiesTrue = true;
foreach (var property in _inheritanceProperties)
{
if (PropertyIsBoolean(property) && PropertyIsChangedWhenSettingInheritAll(property) && BooleanPropertyIsSetToFalse(property))
@@ -73,7 +87,7 @@ namespace mRemoteNGTests.Connection
private bool AllInheritancePropertiesAreFalse()
{
bool allPropertiesFalse = true;
var allPropertiesFalse = true;
foreach (var property in _inheritanceProperties)
{
if (PropertyIsBoolean(property) && PropertyIsChangedWhenSettingInheritAll(property) && BooleanPropertyIsSetToTrue(property))
@@ -84,8 +98,7 @@ namespace mRemoteNGTests.Connection
private bool PropertyIsChangedWhenSettingInheritAll(PropertyInfo property)
{
ArrayList propertiesIgnoredByInheritAll = new ArrayList();
propertiesIgnoredByInheritAll.Add("IsDefault");
var propertiesIgnoredByInheritAll = new ArrayList {"IsDefault"};
return propertiesIgnoredByInheritAll.Contains(property);
}
@@ -101,7 +114,7 @@ namespace mRemoteNGTests.Connection
private bool BooleanPropertyIsSetToTrue(PropertyInfo property)
{
return (bool)property.GetValue(_inheritance) == true;
return (bool)property.GetValue(_inheritance);
}
}
}

View File

@@ -0,0 +1,103 @@
using mRemoteNG.Connection;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Connection.Protocol.SSH;
using mRemoteNG.Container;
using NUnit.Framework;
namespace mRemoteNGTests.Connection
{
public class ConnectionInfoTests
{
private ConnectionInfo _connectionInfo;
private const string TestDomain = "somedomain";
[SetUp]
public void Setup()
{
_connectionInfo = new ConnectionInfo();
}
[TearDown]
public void Teardown()
{
_connectionInfo = null;
}
[Test]
public void CreatingConnectionInfoWithParentSetsTheParentProperty()
{
var container = new ContainerInfo();
var connectionInfo = new ConnectionInfo(container);
Assert.That(connectionInfo.Parent, Is.EqualTo(container));
}
[Test]
public void CreatingConnectionInfoWithParentAddsToTheParentsChildList()
{
var container = new ContainerInfo();
var connectionInfo = new ConnectionInfo(container);
Assert.That(container.Children, Does.Contain(connectionInfo));
}
[Test]
public void CopyCreatesMemberwiseCopy()
{
_connectionInfo.Domain = TestDomain;
var secondConnection = _connectionInfo.Clone();
Assert.That(secondConnection.Domain, Is.EqualTo(_connectionInfo.Domain));
}
[Test]
public void CopyFromCopiesProperties()
{
var secondConnection = new ConnectionInfo {Domain = TestDomain};
_connectionInfo.CopyFrom(secondConnection);
Assert.That(_connectionInfo.Domain, Is.EqualTo(secondConnection.Domain));
}
[Test]
public void CopyingAConnectionInfoAlsoCopiesItsInheritance()
{
_connectionInfo.Inheritance.Username = true;
var secondConnection = new ConnectionInfo {Inheritance = {Username = false}};
secondConnection.CopyFrom(_connectionInfo);
Assert.That(secondConnection.Inheritance.Username, Is.True);
}
[Test]
public void PropertyChangedEventRaisedWhenOpenConnectionsChanges()
{
var eventWasCalled = false;
_connectionInfo.PropertyChanged += (sender, args) => eventWasCalled = true;
_connectionInfo.OpenConnections.Add(new ProtocolSSH2());
Assert.That(eventWasCalled);
}
[Test]
public void PropertyChangedEventArgsAreCorrectWhenOpenConnectionsChanges()
{
var nameOfModifiedProperty = "";
_connectionInfo.PropertyChanged += (sender, args) => nameOfModifiedProperty = args.PropertyName;
_connectionInfo.OpenConnections.Add(new ProtocolSSH2());
Assert.That(nameOfModifiedProperty, Is.EqualTo("OpenConnections"));
}
[TestCase(ProtocolType.HTTP, ExpectedResult = 80)]
[TestCase(ProtocolType.HTTPS, ExpectedResult = 443)]
[TestCase(ProtocolType.ICA, ExpectedResult = 1494)]
[TestCase(ProtocolType.IntApp, ExpectedResult = 0)]
[TestCase(ProtocolType.RAW, ExpectedResult = 23)]
[TestCase(ProtocolType.RDP, ExpectedResult = 3389)]
[TestCase(ProtocolType.Rlogin, ExpectedResult = 513)]
[TestCase(ProtocolType.SSH1, ExpectedResult = 22)]
[TestCase(ProtocolType.SSH2, ExpectedResult = 22)]
[TestCase(ProtocolType.Telnet, ExpectedResult = 23)]
[TestCase(ProtocolType.VNC, ExpectedResult = 5900)]
public int GetDefaultPortReturnsCorrectPortForProtocol(ProtocolType protocolType)
{
_connectionInfo.Protocol = protocolType;
return _connectionInfo.GetDefaultPort();
}
}
}

View File

@@ -0,0 +1,34 @@
using mRemoteNG.Connection;
using NUnit.Framework;
namespace mRemoteNGTests.Connection
{
public class DefaultConnectionInfoTests
{
private string _testDomain = "somedomain";
[SetUp]
public void Setup()
{
DefaultConnectionInfo.Instance.Domain = "";
}
[Test]
public void LoadingDefaultInfoUpdatesAllProperties()
{
var connectionInfoSource = new ConnectionInfo { Domain = _testDomain };
DefaultConnectionInfo.Instance.LoadFrom(connectionInfoSource);
Assert.That(DefaultConnectionInfo.Instance.Domain, Is.EqualTo(_testDomain));
}
[Test]
public void SavingDefaultConnectionInfoExportsAllProperties()
{
var saveTarget = new ConnectionInfo();
DefaultConnectionInfo.Instance.Domain = _testDomain;
DefaultConnectionInfo.Instance.SaveTo(saveTarget);
Assert.That(saveTarget.Domain, Is.EqualTo(_testDomain));
}
}
}

View File

@@ -0,0 +1,49 @@
using mRemoteNG.Connection;
using NUnit.Framework;
namespace mRemoteNGTests.Connection
{
public class DefaultConnectionInheritanceTests
{
[SetUp]
public void Setup()
{
DefaultConnectionInheritance.Instance.TurnOffInheritanceCompletely();
}
[Test]
public void LoadingDefaultInheritanceUpdatesAllProperties()
{
var inheritanceSource = new ConnectionInfoInheritance(new object(), true);
inheritanceSource.TurnOnInheritanceCompletely();
DefaultConnectionInheritance.Instance.LoadFrom(inheritanceSource);
Assert.That(DefaultConnectionInheritance.Instance.EverythingInherited, Is.True);
}
[Test]
public void SavingDefaultInheritanceExportsAllProperties()
{
var inheritanceDestination = new ConnectionInfoInheritance(new object(), true);
DefaultConnectionInheritance.Instance.AutomaticResize = true;
DefaultConnectionInheritance.Instance.SaveTo(inheritanceDestination);
Assert.That(inheritanceDestination.AutomaticResize, Is.True);
}
[Test]
public void NewInheritanceInstancesCreatedWithDefaultInheritanceValues()
{
DefaultConnectionInheritance.Instance.Domain = true;
var inheritanceInstance = new ConnectionInfoInheritance(new object());
Assert.That(inheritanceInstance.Domain, Is.True);
}
[Test]
public void NewInheritanceInstancesCreatedWithAllDefaultInheritanceValues()
{
DefaultConnectionInheritance.Instance.TurnOnInheritanceCompletely();
var inheritanceInstance = new ConnectionInfoInheritance(new object());
Assert.That(inheritanceInstance.EverythingInherited, Is.True);
}
}
}

View File

@@ -0,0 +1,218 @@
using System.Collections;
using System.Collections.Specialized;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Connection.Protocol.SSH;
using mRemoteNG.Connection.Protocol.Telnet;
using mRemoteNG.Connection.Protocol.VNC;
using NUnit.Framework;
namespace mRemoteNGTests.Connection.Protocol
{
public class ProtocolListTests
{
private ProtocolList _protocolList;
private ProtocolBase _protocol1;
private ProtocolBase _protocol2;
private ProtocolBase _protocol3;
[SetUp]
public void Setup()
{
_protocolList = new ProtocolList();
_protocol1 = new ProtocolTelnet();
_protocol2 = new ProtocolSSH2();
_protocol3 = new ProtocolVNC();
}
[TearDown]
public void Teardown()
{
_protocolList = null;
_protocol1 = null;
_protocol2 = null;
_protocol3 = null;
}
[Test]
public void EmptyWhenInitialized()
{
Assert.That(_protocolList.Count == 0);
}
[Test]
public void AddAddsObjectToList()
{
_protocolList.Add(_protocol1);
Assert.That(_protocolList[0] == _protocol1);
}
[Test]
public void AddRangeAddsAllObjects()
{
var protArray = new[] {_protocol1, _protocol2, _protocol3};
_protocolList.AddRange(protArray);
Assert.That(_protocolList, Is.EquivalentTo(protArray));
}
[Test]
public void CountUpdatesToReflectCurrentList()
{
var protArray = new[] { _protocol1, _protocol2, _protocol3 };
_protocolList.AddRange(protArray);
Assert.That(_protocolList.Count == protArray.Length);
}
[Test]
public void RemoveRemovesObjectFromList()
{
_protocolList.Add(_protocol1);
_protocolList.Remove(_protocol1);
Assert.That(_protocolList.Count == 0);
}
[Test]
public void ClearResetsList()
{
var protArray = new[] { _protocol1, _protocol2, _protocol3 };
_protocolList.AddRange(protArray);
_protocolList.Clear();
Assert.That(_protocolList.Count == 0);
}
[Test]
public void IntIndexerReturnsCorrectObject()
{
var protArray = new[] { _protocol1, _protocol2, _protocol3 };
_protocolList.AddRange(protArray);
Assert.That(_protocolList[1], Is.EqualTo(protArray[1]));
}
[Test]
public void ObjectIndexerReturnsCorrectObject()
{
var protArray = new[] { _protocol1, _protocol2, _protocol3 };
_protocolList.AddRange(protArray);
Assert.That(_protocolList[_protocol3], Is.EqualTo(_protocol3));
}
[Test]
public void IndexerSafelyHandlesUnknownObjects()
{
var protArray = new[] { _protocol1, _protocol2, _protocol3 };
_protocolList.AddRange(protArray);
Assert.That(_protocolList["unacceptablevalue"], Is.EqualTo(null));
}
[Test]
public void RemovingNonexistantObjectFromListDoesNothing()
{
Assert.DoesNotThrow(()=> _protocolList.Remove(_protocol1));
}
[Test]
public void AddRaisesCollectionChangedEvent()
{
var eventWasCalled = false;
_protocolList.CollectionChanged += (sender, args) => eventWasCalled = true;
_protocolList.Add(_protocol1);
Assert.That(eventWasCalled);
}
[Test]
public void AddCollectionChangedEventContainsAddedObject()
{
IList nodeListFromEvent = new ArrayList();
_protocolList.CollectionChanged += (sender, args) => nodeListFromEvent = args.NewItems;
_protocolList.Add(_protocol1);
Assert.That(nodeListFromEvent, Is.EquivalentTo(new[] {_protocol1}));
}
[Test]
public void AddRangeCollectionChangedEventContainsAddedObjects()
{
var protArray = new[] { _protocol1, _protocol2, _protocol3 };
IList nodeListFromEvent = new ArrayList();
_protocolList.CollectionChanged += (sender, args) => nodeListFromEvent = args.NewItems;
_protocolList.AddRange(protArray);
Assert.That(nodeListFromEvent, Is.EquivalentTo(protArray));
}
[Test]
public void RemoveCollectionChangedEventContainsRemovedObject()
{
IList nodeListFromEvent = new ArrayList();
_protocolList.Add(_protocol1);
_protocolList.CollectionChanged += (sender, args) => nodeListFromEvent = args.OldItems;
_protocolList.Remove(_protocol1);
Assert.That(nodeListFromEvent, Is.EquivalentTo(new[] { _protocol1 }));
}
[Test]
public void AttemptingToRemoveNonexistantObjectDoesNotRaiseCollectionChangedEvent()
{
var eventWasCalled = false;
_protocolList.CollectionChanged += (sender, args) => eventWasCalled = true;
_protocolList.Remove(_protocol1);
Assert.That(eventWasCalled == false);
}
[Test]
public void ClearRaisesCollectionChangedEvent()
{
var eventWasCalled = false;
_protocolList.Add(_protocol1);
_protocolList.CollectionChanged += (sender, args) => eventWasCalled = true;
_protocolList.Clear();
Assert.That(eventWasCalled);
}
[Test]
public void ClearDoesntRaiseCollectionChangedEventWhenNoObjectsRemoved()
{
var eventWasCalled = false;
_protocolList.CollectionChanged += (sender, args) => eventWasCalled = true;
_protocolList.Clear();
Assert.That(eventWasCalled == false);
}
[Test]
public void AddCollectionChangedEventHasCorrectAction()
{
NotifyCollectionChangedAction collectionChangedAction = NotifyCollectionChangedAction.Move;
_protocolList.CollectionChanged += (sender, args) => collectionChangedAction = args.Action;
_protocolList.Add(_protocol1);
Assert.That(collectionChangedAction, Is.EqualTo(NotifyCollectionChangedAction.Add));
}
[Test]
public void AddRangeCollectionChangedEventHasCorrectAction()
{
NotifyCollectionChangedAction collectionChangedAction = NotifyCollectionChangedAction.Move;
_protocolList.CollectionChanged += (sender, args) => collectionChangedAction = args.Action;
_protocolList.AddRange(new []{_protocol1});
Assert.That(collectionChangedAction, Is.EqualTo(NotifyCollectionChangedAction.Add));
}
[Test]
public void RemoveCollectionChangedEventHasCorrectAction()
{
NotifyCollectionChangedAction collectionChangedAction = NotifyCollectionChangedAction.Move;
_protocolList.Add(_protocol1);
_protocolList.CollectionChanged += (sender, args) => collectionChangedAction = args.Action;
_protocolList.Remove(_protocol1);
Assert.That(collectionChangedAction, Is.EqualTo(NotifyCollectionChangedAction.Remove));
}
[Test]
public void ClearCollectionChangedEventHasCorrectAction()
{
NotifyCollectionChangedAction collectionChangedAction = NotifyCollectionChangedAction.Move;
_protocolList.Add(_protocol1);
_protocolList.CollectionChanged += (sender, args) => collectionChangedAction = args.Action;
_protocolList.Clear();
Assert.That(collectionChangedAction, Is.EqualTo(NotifyCollectionChangedAction.Reset));
}
}
}

View File

@@ -0,0 +1,430 @@
using System.ComponentModel;
using System.Linq;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using NUnit.Framework;
namespace mRemoteNGTests.Container
{
public class ContainerInfoTests
{
private ContainerInfo _containerInfo;
private ConnectionInfo _con1;
private ConnectionInfo _con2;
private ConnectionInfo _con3;
[SetUp]
public void Setup()
{
_containerInfo = new ContainerInfo();
_con1 = new ConnectionInfo {Name = "a"};
_con2 = new ConnectionInfo {Name = "b"};
_con3 = new ConnectionInfo {Name = "c"};
}
[TearDown]
public void Teardown()
{
_containerInfo = null;
_con1 = null;
_con2 = null;
_con3 = null;
}
[Test]
public void AddSetsParentPropertyOnTheChild()
{
_containerInfo.AddChild(_con1);
Assert.That(_con1.Parent, Is.EqualTo(_containerInfo));
}
[Test]
public void AddAddsChildToChildrenList()
{
_containerInfo.AddChild(_con1);
Assert.That(_containerInfo.Children, Does.Contain(_con1));
}
[Test]
public void AddRangeAddsAllItems()
{
var collection = new[] { _con1, _con2, _con3 };
_containerInfo.AddChildRange(collection);
Assert.That(_containerInfo.Children, Is.EquivalentTo(collection));
}
[Test]
public void RemoveUnsetsParentPropertyOnChild()
{
_containerInfo.AddChild(_con1);
_containerInfo.RemoveChild(_con1);
Assert.That(_con1.Parent, Is.Not.EqualTo(_containerInfo));
}
[Test]
public void RemoveRemovesChildFromChildrenList()
{
_containerInfo.AddChild(_con1);
_containerInfo.RemoveChild(_con1);
Assert.That(_containerInfo.Children, Does.Not.Contains(_con1));
}
[Test]
public void RemoveRangeRemovesAllIndicatedItems()
{
var collection = new[] { _con1, _con2, new ContainerInfo() };
_containerInfo.AddChildRange(collection);
_containerInfo.RemoveChildRange(collection);
Assert.That(_containerInfo.Children, Does.Not.Contains(collection[0]).And.Not.Contains(collection[1]).And.Not.Contains(collection[2]));
}
[Test]
public void RemoveRangeDoesNotRemoveUntargetedMembers()
{
var collection = new[] { _con1, _con2, new ContainerInfo() };
_containerInfo.AddChildRange(collection);
_containerInfo.AddChild(_con3);
_containerInfo.RemoveChildRange(collection);
Assert.That(_containerInfo.Children, Does.Contain(_con3));
}
[Test]
public void AddingChildTriggersCollectionChangedEvent()
{
var wasCalled = false;
_containerInfo.CollectionChanged += (sender, args) => wasCalled = true;
_containerInfo.AddChild(_con1);
Assert.That(wasCalled, Is.True);
}
[Test]
public void RemovingChildTriggersCollectionChangedEvent()
{
var wasCalled = false;
_containerInfo.AddChild(_con1);
_containerInfo.CollectionChanged += (sender, args) => wasCalled = true;
_containerInfo.RemoveChild(_con1);
Assert.That(wasCalled, Is.True);
}
[Test]
public void ChangingChildPropertyTriggersPropertyChangedEvent()
{
var wasCalled = false;
_containerInfo.AddChild(_con1);
_containerInfo.PropertyChanged += (sender, args) => wasCalled = true;
_con1.Name = "somethinghere";
Assert.That(wasCalled, Is.True);
}
[Test]
public void ChangingSubChildPropertyTriggersPropertyChangedEvent()
{
var wasCalled = false;
var container2 = new ContainerInfo();
_containerInfo.AddChild(container2);
container2.AddChild(_con1);
_containerInfo.PropertyChanged += (sender, args) => wasCalled = true;
_con1.Name = "somethinghere";
Assert.That(wasCalled, Is.True);
}
[Test]
public void SetChildPositionPutsChildInCorrectPosition()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con3);
_containerInfo.SetChildPosition(_con2, 2);
Assert.That(_containerInfo.Children.IndexOf(_con2), Is.EqualTo(2));
}
[Test]
public void SettingChildPositionAboveArrayBoundsPutsItAtEndOfList()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con3);
var finalIndex = _containerInfo.Children.Count - 1;
_containerInfo.SetChildPosition(_con2, 5);
Assert.That(_containerInfo.Children.IndexOf(_con2), Is.EqualTo(finalIndex));
}
[Test]
public void SettingChildPositionBelowArrayBoundsDoesNotMoveTheChild()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con3);
var originalIndex = _containerInfo.Children.IndexOf(_con2);
_containerInfo.SetChildPosition(_con2, -1);
Assert.That(_containerInfo.Children.IndexOf(_con2), Is.EqualTo(originalIndex));
}
[Test]
public void SetChildAbovePutsChildInCorrectPosition()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con3);
var referenceChildIndexBeforeMove = _containerInfo.Children.IndexOf(_con2);
_containerInfo.SetChildAbove(_con3, _con2);
var targetsNewIndex = _containerInfo.Children.IndexOf(_con3);
Assert.That(targetsNewIndex, Is.EqualTo(referenceChildIndexBeforeMove));
}
[Test]
public void SetChildBelowPutsChildInCorrectPosition()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con3);
var referenceChildIndexBeforeMove = _containerInfo.Children.IndexOf(_con1);
_containerInfo.SetChildBelow(_con3, _con1);
var targetsNewIndex = _containerInfo.Children.IndexOf(_con3);
Assert.That(targetsNewIndex, Is.EqualTo(referenceChildIndexBeforeMove+1));
}
[Test]
public void PromoteChildMovesTargetUpOne()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con3);
var targetsIndexBeforeMove = _containerInfo.Children.IndexOf(_con3);
_containerInfo.PromoteChild(_con3);
var targetsNewIndex = _containerInfo.Children.IndexOf(_con3);
Assert.That(targetsNewIndex, Is.EqualTo(targetsIndexBeforeMove - 1));
}
[Test]
public void PromoteChildDoesNothingWhenAlreadyAtTopOfList()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con3);
var targetsIndexBeforeMove = _containerInfo.Children.IndexOf(_con1);
_containerInfo.PromoteChild(_con1);
var targetsNewIndex = _containerInfo.Children.IndexOf(_con1);
Assert.That(targetsNewIndex, Is.EqualTo(targetsIndexBeforeMove));
}
[Test]
public void DemoteChildMovesTargetDownOne()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con3);
var targetsIndexBeforeMove = _containerInfo.Children.IndexOf(_con1);
_containerInfo.DemoteChild(_con1);
var targetsNewIndex = _containerInfo.Children.IndexOf(_con1);
Assert.That(targetsNewIndex, Is.EqualTo(targetsIndexBeforeMove + 1));
}
[Test]
public void DemoteChildDoesNothingWhenAlreadyAtTopOfList()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con3);
var targetsIndexBeforeMove = _containerInfo.Children.IndexOf(_con3);
_containerInfo.DemoteChild(_con3);
var targetsNewIndex = _containerInfo.Children.IndexOf(_con3);
Assert.That(targetsNewIndex, Is.EqualTo(targetsIndexBeforeMove));
}
[Test]
public void WhenChildAlreadyPresentAddChildAtDoesNothing()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con3);
var indexBeforeAttemptedMove = _containerInfo.Children.IndexOf(_con1);
_containerInfo.AddChildAt(_con1, 2);
var indexAfterAttemptedMove = _containerInfo.Children.IndexOf(_con1);
Assert.That(indexAfterAttemptedMove, Is.EqualTo(indexBeforeAttemptedMove));
}
[Test]
public void RemoveChildDoesNothingIfChildNotInList()
{
_containerInfo.AddChild(_con1);
var childListBeforeRemoval = _containerInfo.Children;
_containerInfo.RemoveChild(_con2);
var childListAfterRemoval = _containerInfo.Children;
Assert.That(childListAfterRemoval, Is.EquivalentTo(childListBeforeRemoval));
}
[Test]
public void ClonedContainerHasNewConstantId()
{
var clone = _containerInfo.Clone();
Assert.That(clone.ConstantID, Is.Not.EqualTo(_containerInfo.ConstantID));
}
[Test]
public void ClonedContainerContainsClonedChildren()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con3);
var clone = _containerInfo.Clone() as ContainerInfo;
var clonedChildNames = clone?.Children.Select((node) => node.Name);
var originalChildNames = _containerInfo?.Children.Select((node) => node.Name);
Assert.That(clonedChildNames, Is.EquivalentTo(originalChildNames));
}
[Test]
public void HasChildrenReturnsFalseForNoChildren()
{
var hasChildren = _containerInfo.HasChildren();
Assert.That(hasChildren, Is.False);
}
[Test]
public void HasChildrenReturnsTrueWhenChildrenPresent()
{
_containerInfo.AddChild(_con1);
var hasChildren = _containerInfo.HasChildren();
Assert.That(hasChildren, Is.True);
}
[Test]
public void AddChildAbovePutsNewChildInCorrectLocation()
{
_containerInfo.AddChild(_con1);
var referenceChildIndexBeforeInsertion = _containerInfo.Children.IndexOf(_con1);
_containerInfo.AddChildAbove(_con2, _con1);
var newChildIndex = _containerInfo.Children.IndexOf(_con2);
Assert.That(newChildIndex, Is.EqualTo(referenceChildIndexBeforeInsertion));
}
[Test]
public void AddChildAbovePutsNewChildAtEndOfListIfReferenceChildNotInList()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChildAbove(_con2, _con3);
var newChildIndex = _containerInfo.Children.IndexOf(_con2);
var lastIndex = _containerInfo.Children.Count - 1;
Assert.That(newChildIndex, Is.EqualTo(lastIndex));
}
[Test]
public void AddChildBelowPutsNewChildInCorrectLocation()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con2);
var referenceChildIndexBeforeInsertion = _containerInfo.Children.IndexOf(_con1);
_containerInfo.AddChildBelow(_con3, _con1);
var newChildIndex = _containerInfo.Children.IndexOf(_con3);
Assert.That(newChildIndex, Is.EqualTo(referenceChildIndexBeforeInsertion + 1));
}
[Test]
public void AddChildBelowPutsNewChildAtEndOfListIfReferenceChildNotInList()
{
_containerInfo.AddChild(_con1);
_containerInfo.AddChildBelow(_con2, _con3);
var newChildIndex = _containerInfo.Children.IndexOf(_con2);
var lastIndex = _containerInfo.Children.Count - 1;
Assert.That(newChildIndex, Is.EqualTo(lastIndex));
}
[Test]
public void SortAscendingSortsCorrectlyByName()
{
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con3);
_containerInfo.Sort();
var orderAfterSort = _containerInfo.Children.ToArray();
Assert.That(orderAfterSort, Is.Ordered.Ascending.By(nameof(ConnectionInfo.Name)));
}
[Test]
public void SortDescendingSortsCorrectlyByName()
{
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con3);
_containerInfo.Sort(ListSortDirection.Descending);
var orderAfterSort = _containerInfo.Children.ToArray();
Assert.That(orderAfterSort, Is.Ordered.Descending.By(nameof(ConnectionInfo.Name)));
}
[Test]
public void SortOnConstantIdAscendingSortsCorrectly()
{
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con3);
_containerInfo.SortOn(node=> node.ConstantID);
var orderAfterSort = _containerInfo.Children.ToArray();
Assert.That(orderAfterSort, Is.Ordered.Ascending.By(nameof(ConnectionInfo.ConstantID)));
}
[Test]
public void SortOnConstantIdDescendingSortsCorrectly()
{
_containerInfo.AddChild(_con2);
_containerInfo.AddChild(_con1);
_containerInfo.AddChild(_con3);
_containerInfo.SortOn(node => node.ConstantID, ListSortDirection.Descending);
var orderAfterSort = _containerInfo.Children.ToArray();
Assert.That(orderAfterSort, Is.Ordered.Descending.By(nameof(ConnectionInfo.ConstantID)));
}
[Test]
public void SortAscendingRecursiveSortsGrandchildrenCorrectlyByName()
{
var childContainer = new ContainerInfo();
childContainer.AddChild(_con2);
childContainer.AddChild(_con1);
childContainer.AddChild(_con3);
_containerInfo.AddChild(childContainer);
_containerInfo.SortRecursive();
var grandchildOrderAfterSort = childContainer.Children.ToArray();
Assert.That(grandchildOrderAfterSort, Is.Ordered.Ascending.By(nameof(ConnectionInfo.Name)));
}
[Test]
public void SortDescendingRecursiveSortsGrandchildrenCorrectlyByName()
{
var childContainer = new ContainerInfo();
childContainer.AddChild(_con2);
childContainer.AddChild(_con1);
childContainer.AddChild(_con3);
_containerInfo.AddChild(childContainer);
_containerInfo.SortRecursive(ListSortDirection.Descending);
var grandchildOrderAfterSort = _containerInfo.Children.ToArray();
Assert.That(grandchildOrderAfterSort, Is.Ordered.Descending.By(nameof(ConnectionInfo.Name)));
}
[Test]
public void SortOnRecursiveConstantIdAscendingSortsGrandchildrenCorrectly()
{
var childContainer = new ContainerInfo();
childContainer.AddChild(_con2);
childContainer.AddChild(_con1);
childContainer.AddChild(_con3);
_containerInfo.AddChild(childContainer);
_containerInfo.SortOnRecursive(node => node.ConstantID);
var grandchildOrderAfterSort = _containerInfo.Children.ToArray();
Assert.That(grandchildOrderAfterSort, Is.Ordered.Ascending.By(nameof(ConnectionInfo.ConstantID)));
}
[Test]
public void SortOnRecursiveConstantIdDescendingSortsGrandchildrenCorrectly()
{
var childContainer = new ContainerInfo();
childContainer.AddChild(_con2);
childContainer.AddChild(_con1);
childContainer.AddChild(_con3);
_containerInfo.AddChild(childContainer);
_containerInfo.SortOnRecursive(node => node.ConstantID, ListSortDirection.Descending);
var grandchildOrderAfterSort = _containerInfo.Children.ToArray();
Assert.That(grandchildOrderAfterSort, Is.Ordered.Descending.By(nameof(ConnectionInfo.ConstantID)));
}
}
}

View File

@@ -0,0 +1,72 @@
using mRemoteNG.Connection;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Container;
using mRemoteNG.Tree.Root;
using NUnit.Framework;
namespace mRemoteNGTests.IntegrationTests
{
public class ConnectionInheritanceIntegrationTests
{
private RootNodeInfo _rootNode;
[SetUp]
public void Setup()
{
_rootNode = new RootNodeInfo(RootNodeType.Connection);
}
[TearDown]
public void Teardown()
{
_rootNode = null;
}
[Test]
public void ConnectionsInheritFromCorrectFolder()
{
/**
* Root
* --Folder1
* ----Connection1
* ----Folder2
* ------Connection2
* ----Connection3 (inherits username)
*/
var folder1 = new ContainerInfo {Username = "folder1User"};
var folder2 = new ContainerInfo {Username = "folder2User"};
var connection1 = new ConnectionInfo();
var connection2 = new ConnectionInfo();
var connection3 = new ConnectionInfo {Inheritance = {Username = true}};
_rootNode.AddChild(folder1);
folder1.AddChildRange(new []{connection1, folder2, connection3});
folder2.AddChild(connection2);
Assert.That(connection3.Username, Is.EqualTo(folder1.Username));
}
[Test]
public void ConnectionWillInheritAllFromFolder()
{
var folder = new ContainerInfo() {Protocol = ProtocolType.SSH2, Username = "folderUser", Domain = "CoolDomain"};
var connection = new ConnectionInfo() {Inheritance = {EverythingInherited = true}};
_rootNode.AddChild(folder);
folder.AddChild(connection);
Assert.That(new object[] { connection.Protocol, connection.Username, connection.Domain }, Is.EquivalentTo(new object[] {folder.Protocol, folder.Username, folder.Domain}));
}
[Test]
public void CanInheritThroughMultipleFolderLevels()
{
var folder1 = new ContainerInfo {Username = "folder1User"};
var folder2 = new ContainerInfo {Inheritance = {Username = true}};
var folder3 = new ContainerInfo {Inheritance = {Username = true}};
var connection = new ConnectionInfo {Inheritance = {Username = true}};
_rootNode.AddChild(folder1);
folder1.AddChild(folder2);
folder2.AddChild(folder3);
folder3.AddChild(connection);
Assert.That(connection.Username, Is.EqualTo(folder1.Username));
}
}
}

View File

@@ -0,0 +1,120 @@
using System.Linq;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Security;
using mRemoteNG.Tree;
using mRemoteNG.Tree.Root;
using NUnit.Framework;
namespace mRemoteNGTests.IntegrationTests
{
public class XmlSerializationLifeCycleTests
{
private XmlConnectionsSerializer _serializer;
private XmlConnectionsDeserializer _deserializer;
[SetUp]
public void Setup()
{
var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(BlockCipherEngines.AES, BlockCipherModes.GCM);
_serializer = new XmlConnectionsSerializer(cryptoProvider);
}
[TearDown]
public void Teardown()
{
_serializer = null;
_deserializer = null;
}
[Test]
public void SerializeThenDeserialize()
{
var originalModel = SetupConnectionTreeModel();
var serializedContent = _serializer.Serialize(originalModel);
_deserializer = new XmlConnectionsDeserializer(serializedContent);
var deserializedModel = _deserializer.Deserialize();
var nodeNamesFromDeserializedModel = deserializedModel.GetRecursiveChildList().Select(node => node.Name);
var nodeNamesFromOriginalModel = originalModel.GetRecursiveChildList().Select(node => node.Name);
Assert.That(nodeNamesFromDeserializedModel, Is.EquivalentTo(nodeNamesFromOriginalModel));
}
[Test]
public void SerializeThenDeserializeWithFullEncryption()
{
var originalModel = SetupConnectionTreeModel();
_serializer.UseFullEncryption = true;
var serializedContent = _serializer.Serialize(originalModel);
_deserializer = new XmlConnectionsDeserializer(serializedContent);
var deserializedModel = _deserializer.Deserialize();
var nodeNamesFromDeserializedModel = deserializedModel.GetRecursiveChildList().Select(node => node.Name);
var nodeNamesFromOriginalModel = originalModel.GetRecursiveChildList().Select(node => node.Name);
Assert.That(nodeNamesFromDeserializedModel, Is.EquivalentTo(nodeNamesFromOriginalModel));
}
[Test]
public void SerializeAndDeserializePropertiesWithInternationalCharacters()
{
var originalConnectionInfo = new ConnectionInfo {Name = "con1", Password = "£°úg¶┬ä" };
var serializedContent = _serializer.Serialize(originalConnectionInfo);
_deserializer = new XmlConnectionsDeserializer(serializedContent);
var deserializedModel = _deserializer.Deserialize();
var deserializedConnectionInfo = deserializedModel.GetRecursiveChildList().First(node => node.Name == originalConnectionInfo.Name);
Assert.That(deserializedConnectionInfo.Password, Is.EqualTo(originalConnectionInfo.Password));
}
[Test]
public void SerializeAndDeserializeWithCustomKdfIterationsValue()
{
var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(BlockCipherEngines.AES, BlockCipherModes.GCM);
cryptoProvider.KeyDerivationIterations = 5000;
_serializer = new XmlConnectionsSerializer(cryptoProvider);
var originalModel = SetupConnectionTreeModel();
var serializedContent = _serializer.Serialize(originalModel);
_deserializer = new XmlConnectionsDeserializer(serializedContent);
var deserializedModel = _deserializer.Deserialize();
var nodeNamesFromDeserializedModel = deserializedModel.GetRecursiveChildList().Select(node => node.Name);
var nodeNamesFromOriginalModel = originalModel.GetRecursiveChildList().Select(node => node.Name);
Assert.That(nodeNamesFromDeserializedModel, Is.EquivalentTo(nodeNamesFromOriginalModel));
}
private ConnectionTreeModel SetupConnectionTreeModel()
{
/*
* Root
* |--- con0
* |--- folder1
* | L--- con1
* L--- folder2
* |--- con2
* L--- folder3
* |--- con3
* L--- con4
*/
var connectionTreeModel = new ConnectionTreeModel();
var rootNode = new RootNodeInfo(RootNodeType.Connection);
var folder1 = new ContainerInfo { Name = "folder1" };
var folder2 = new ContainerInfo { Name = "folder2" };
var folder3 = new ContainerInfo { Name = "folder3" };
var con0 = new ConnectionInfo { Name = "con0" };
var con1 = new ConnectionInfo { Name = "con1" };
var con2 = new ConnectionInfo { Name = "con2" };
var con3 = new ConnectionInfo { Name = "con3" };
var con4 = new ConnectionInfo { Name = "con4" };
rootNode.AddChild(folder1);
rootNode.AddChild(folder2);
rootNode.AddChild(con0);
folder1.AddChild(con1);
folder2.AddChild(con2);
folder2.AddChild(folder3);
folder3.AddChild(con3);
folder3.AddChild(con4);
connectionTreeModel.AddRootNode(rootNode);
return connectionTreeModel;
}
}
}

View File

@@ -0,0 +1,262 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace mRemoteNGTests.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("mRemoteNGTests.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
///&lt;Connections Name=&quot;Connections&quot; Export=&quot;False&quot; Protected=&quot;95syzRuZ4mRxpNkZQzoyX8SDpQXLyMq3GncO8o4SyTBoYvn3TAWgn05ZEU2DrjkM&quot; ConfVersion=&quot;2.5&quot;&gt;
/// &lt;Node Name=&quot;Folder1&quot; Type=&quot;Container&quot; Expanded=&quot;True&quot; Descr=&quot;&quot; Icon=&quot;mRemoteNG&quot; Panel=&quot;General&quot; Username=&quot;&quot; Domain=&quot;&quot; Password=&quot;&quot; Hostname=&quot;&quot; Protocol=&quot;ICA&quot; PuttySession=&quot;Default Settings&quot; Port=&quot;1494&quot; ConnectToConsole=&quot;False&quot; UseCredSsp=&quot;True&quot; RenderingEngine=&quot;IE&quot; ICAEncryptionStrength=&quot;Encr128Bit&quot; RDPAuthenticationLevel=&quot; [rest of string was truncated]&quot;;.
/// </summary>
internal static string confCons_v2_5 {
get {
return ResourceManager.GetString("confCons_v2_5", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
///&lt;Connections Name=&quot;Connections&quot; Export=&quot;False&quot; EncryptionEngine=&quot;AES&quot; BlockCipherMode=&quot;GCM&quot; KdfIterations=&quot;1000&quot; FullFileEncryption=&quot;False&quot; Protected=&quot;Bqmajt4G5RDLsV5nn3s7QHZkkeWXQqgSDA4RSA8fWYx1bxRaorsmZ0ub4Z6mOBbefuXBbaWnsVRn0+NOJ3zTjkUJ&quot; ConfVersion=&quot;2.6&quot;&gt;
/// &lt;Node Name=&quot;Folder1&quot; Type=&quot;Container&quot; Expanded=&quot;True&quot; Descr=&quot;&quot; Icon=&quot;mRemoteNG&quot; Panel=&quot;General&quot; Username=&quot;&quot; Domain=&quot;&quot; Password=&quot;&quot; Hostname=&quot;&quot; Protocol=&quot;ICA&quot; PuttySession=&quot;Default Settings&quot; Port=&quot;1494&quot; Connec [rest of string was truncated]&quot;;.
/// </summary>
internal static string confCons_v2_6 {
get {
return ResourceManager.GetString("confCons_v2_6", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
///&lt;Connections Name=&quot;Connections&quot; Export=&quot;False&quot; EncryptionEngine=&quot;AES&quot; BlockCipherMode=&quot;GCM&quot; KdfIterations=&quot;5000&quot; FullFileEncryption=&quot;False&quot; Protected=&quot;ZrxA5XJSUirgITMc2UxVRY4mLPxzNsyaqpgJXNdjcUdTlA/p4ZQP4bKqp44ZMrZlNU9jZgsvodGEVqS5/26St+Sk&quot; ConfVersion=&quot;2.6&quot;&gt;
/// &lt;Node Name=&quot;Folder1&quot; Type=&quot;Container&quot; Expanded=&quot;True&quot; Descr=&quot;&quot; Icon=&quot;mRemoteNG&quot; Panel=&quot;General&quot; Username=&quot;&quot; Domain=&quot;&quot; Password=&quot;&quot; Hostname=&quot;&quot; Protocol=&quot;ICA&quot; PuttySession=&quot;Default Settings&quot; Port=&quot;1494&quot; Connec [rest of string was truncated]&quot;;.
/// </summary>
internal static string confCons_v2_6_5k_iterations {
get {
return ResourceManager.GetString("confCons_v2_6_5k_iterations", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
///&lt;Connections Name=&quot;Connections&quot; Export=&quot;False&quot; EncryptionEngine=&quot;AES&quot; BlockCipherMode=&quot;GCM&quot; KdfIterations=&quot;1000&quot; FullFileEncryption=&quot;True&quot; Protected=&quot;tfNq70KLL8id4QnOeC9OrjMlACoArKa7pFJKcG1vrrRxMkvHpJPiEx/JlbPBJ3x4HXXx806ipsFiMkU1+OT7eE3Z&quot; ConfVersion=&quot;2.6&quot;&gt;NAxOa6dYlXPZCtpxWfiFrINjIC0dicQU7YdmKRnOn6POI07mMWU/Yy5uhPeXfVfzWgbPlKGyOMk5pgTw0pYIpTZpmqRKzZN+MzFw7NTW9QgD3Uhq528OItO2/MdpGQZ8AYM+qrDHHCXG9bGkczDwe5BZ8cDnGfbFrYTINGBZ9wxjLfyA9oYxzfrzoHDACbM8gD8wvmO26ML/lShwQS+/9B [rest of string was truncated]&quot;;.
/// </summary>
internal static string confCons_v2_6_fullencryption {
get {
return ResourceManager.GetString("confCons_v2_6_fullencryption", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
///&lt;Connections Name=&quot;Connections&quot; Export=&quot;False&quot; EncryptionEngine=&quot;AES&quot; BlockCipherMode=&quot;GCM&quot; KdfIterations=&quot;1000&quot; FullFileEncryption=&quot;False&quot; Protected=&quot;et1WJ5jh501ty5nzV139lFcoK4Cjm2HwYiFDgEtTTW6iIMTiJ7ilw0gkDOOahwig8neVelBnGaP1AAmRY4B6&quot; ConfVersion=&quot;2.6&quot;&gt;
/// &lt;Node Name=&quot;Folder1&quot; Type=&quot;Container&quot; Expanded=&quot;True&quot; Descr=&quot;&quot; Icon=&quot;mRemoteNG&quot; Panel=&quot;General&quot; Username=&quot;&quot; Domain=&quot;&quot; Password=&quot;&quot; Hostname=&quot;&quot; Protocol=&quot;ICA&quot; PuttySession=&quot;Default Settings&quot; Port=&quot;1494&quot; ConnectToC [rest of string was truncated]&quot;;.
/// </summary>
internal static string confCons_v2_6_passwordis_Password {
get {
return ResourceManager.GetString("confCons_v2_6_passwordis_Password", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
///&lt;Connections Name=&quot;Connections&quot; Export=&quot;False&quot; EncryptionEngine=&quot;AES&quot; BlockCipherMode=&quot;GCM&quot; KdfIterations=&quot;1000&quot; FullFileEncryption=&quot;True&quot; Protected=&quot;RD3KGFlcH+4MxnYNje/ruXy6kN6pXgOwg8u6jlyU4u1RFWd8gm8DAGyAdycTDCr37dCNsi6F4Huj41haRQg4&quot; ConfVersion=&quot;2.6&quot;&gt;/au8q00e4YHoMGSnNWL/zRCzSQd1EaDgZ6VHuJ92iffxh5Spuhy86nsoiMr99UMaUF8UjlrYsboZC2B5sLO6t1lqKuB9okjY/jaLHTlGB7mmaHlDHXo7WEChz51xO+caUGfXCXPHgHOFsz/yCJIv3E9LwVOsAIH2qTfMp19OsytF3+Lb4T8v3nMAKb1iw63WcjFsp/835TMcZWWjI+SwPNKMze [rest of string was truncated]&quot;;.
/// </summary>
internal static string confCons_v2_6_passwordis_Password_fullencryption {
get {
return ResourceManager.GetString("confCons_v2_6_passwordis_Password_fullencryption", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;
///&lt;!-- ****************************************************************--&gt;
///&lt;!-- * *--&gt;
///&lt;!-- * PuTTY Configuration Manager save file - All right reserved. *--&gt;
///&lt;!-- * *--&gt;
///&lt;!-- ****************************************************************--&gt;
///&lt;!-- The following lines can be modified at your own risks. --&gt;
///&lt;configuration version=&quot;0.7.1.136&quot; [rest of string was truncated]&quot;;.
/// </summary>
internal static string test_puttyConnectionManager_database {
get {
return ResourceManager.GetString("test_puttyConnectionManager_database", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
///&lt;RDCMan schemaVersion=&quot;1&quot;&gt;
/// &lt;version&gt;99.99&lt;/version&gt;
/// &lt;file&gt;
/// &lt;/file&gt;
///&lt;/RDCMan&gt;.
/// </summary>
internal static string test_rdcman_badVersionNumber {
get {
return ResourceManager.GetString("test_rdcman_badVersionNumber", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
///&lt;RDCMan schemaVersion=&quot;1&quot;&gt;
/// &lt;file&gt;
/// &lt;/file&gt;
///&lt;/RDCMan&gt;.
/// </summary>
internal static string test_rdcman_noversion {
get {
return ResourceManager.GetString("test_rdcman_noversion", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
///&lt;RDCMan schemaVersion=&quot;-99&quot;&gt;
/// &lt;version&gt;2.2&lt;/version&gt;
/// &lt;file&gt;
/// &lt;/file&gt;
///&lt;/RDCMan&gt;.
/// </summary>
internal static string test_rdcman_v2_2_badschemaversion {
get {
return ResourceManager.GetString("test_rdcman_v2_2_badschemaversion", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
///&lt;RDCMan schemaVersion=&quot;1&quot;&gt;
/// &lt;version&gt;2.2&lt;/version&gt;
/// &lt;file&gt;
/// &lt;properties&gt;
/// &lt;name&gt;test_rdcman_v2_2_schema1&lt;/name&gt;
/// &lt;expanded&gt;True&lt;/expanded&gt;
/// &lt;comment /&gt;
/// &lt;logonCredentials inherit=&quot;FromParent&quot; /&gt;
/// &lt;connectionSettings inherit=&quot;FromParent&quot; /&gt;
/// &lt;gatewaySettings inherit=&quot;FromParent&quot; /&gt;
/// &lt;remoteDesktop inherit=&quot;FromParent&quot; /&gt;
/// &lt;localResources inherit=&quot;FromParent&quot; [rest of string was truncated]&quot;;.
/// </summary>
internal static string test_rdcman_v2_2_schema1 {
get {
return ResourceManager.GetString("test_rdcman_v2_2_schema1", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
///&lt;RDCMan programVersion=&quot;2.7&quot; schemaVersion=&quot;3&quot;&gt;
/// &lt;file&gt;
/// &lt;credentialsProfiles /&gt;
/// &lt;properties&gt;
/// &lt;expanded&gt;True&lt;/expanded&gt;
/// &lt;name&gt;test_RDCMan_connections&lt;/name&gt;
/// &lt;/properties&gt;
/// &lt;smartGroup&gt;
/// &lt;properties&gt;
/// &lt;expanded&gt;False&lt;/expanded&gt;
/// &lt;name&gt;AllServers&lt;/name&gt;
/// &lt;/properties&gt;
/// &lt;ruleGroup operator=&quot;All&quot;&gt;
/// &lt;rule&gt;
/// &lt;property&gt;DisplayName&lt;/property&gt;
/// &lt;operator&gt;Matches&lt;/operator&gt;
/// [rest of string was truncated]&quot;;.
/// </summary>
internal static string test_rdcman_v2_7_schema3 {
get {
return ResourceManager.GetString("test_rdcman_v2_7_schema3", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to screen mode id:i:1
///use multimon:i:0
///desktopwidth:i:800
///desktopheight:i:600
///session bpp:i:24
///winposstr:s:0,3,0,0,800,600
///compression:i:1
///keyboardhook:i:2
///audiocapturemode:i:0
///videoplaybackmode:i:1
///connection type:i:7
///networkautodetect:i:1
///bandwidthautodetect:i:1
///displayconnectionbar:i:1
///username:s:myusernamehere
///enableworkspacereconnect:i:0
///disable wallpaper:i:1
///allow font smoothing:i:1
///allow desktop composition:i:1
///disable full window drag:i:1
///disable menu anims:i:1
///disable themes:i:1
/// [rest of string was truncated]&quot;;.
/// </summary>
internal static string test_remotedesktopconnection_rdp {
get {
return ResourceManager.GetString("test_remotedesktopconnection_rdp", resourceCulture);
}
}
}
}

View File

@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="confCons_v2_5" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\confCons_v2_5.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
<data name="confCons_v2_6" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\confCons_v2_6.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
<data name="confCons_v2_6_5k_iterations" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\confCons_v2_6_5k-iterations.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
<data name="confCons_v2_6_fullencryption" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\confCons_v2_6_fullencryption.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
<data name="confCons_v2_6_passwordis_Password" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\confCons_v2_6_passwordis_Password.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
<data name="confCons_v2_6_passwordis_Password_fullencryption" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\confCons_v2_6_passwordis_Password_fullencryption.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
<data name="test_puttyConnectionManager_database" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test_puttyConnectionManager_database.dat;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16</value>
</data>
<data name="test_rdcman_badVersionNumber" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test_rdcman_badVersionNumber.rdg;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="test_rdcman_noversion" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test_rdcman_noversion.rdg;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="test_rdcman_v2_2_badschemaversion" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test_rdcman_v2_2_badschemaversion.rdg;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="test_rdcman_v2_2_schema1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test_rdcman_v2_2_schema1.rdg;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="test_rdcman_v2_7_schema3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test_RDCMan_v2_7_schema3.rdg;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="test_remotedesktopconnection_rdp" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test_remotedesktopconnection.rdp;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16</value>
</data>
</root>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<Connections Name="Connections" Export="False" Protected="95syzRuZ4mRxpNkZQzoyX8SDpQXLyMq3GncO8o4SyTBoYvn3TAWgn05ZEU2DrjkM" ConfVersion="2.5">
<Node Name="Folder1" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="" Domain="" Password="" Hostname="" Protocol="ICA" PuttySession="Default Settings" Port="1494" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="Encr128Bit" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection1.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder1" Domain="domainFolder1" Password="u1cFYiN+39rnIjT9JOVgqzF0LwDD08ON/32tXV6aMw8=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Connection1.2" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder1" Domain="domainFolder1" Password="UVhIa8sJMvLGX56d8ZG4PMZak6lwURlkN4UYOksjeqw=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Connection1.3" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder1" Domain="domainFolder1" Password="xxViioYX/CaoWnXsE1bZdE21Jj2qsz7Du3KbONMB2LU=" Hostname="" Protocol="SSH2" PuttySession="Default Settings" Port="22" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Node>
<Node Name="Folder2" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="OG1YqC5B612X2z8mT8ujrcwjLB83TPEwzxpcAUfq8QI=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection2.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="usernameC21" Domain="domainC21" Password="4k/KraVW2VBeMzDDP3DXCBpAnhTK8NfsLWAiWkoBSF8=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Folder2.1" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="" Domain="" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection2.1.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="usernameC211" Domain="domainC2111" Password="RnaM2Pe9Ksgiwudg5fnAr3Fc7oGLKq6rEpBVfzLgouE=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Folder2.1.1" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="" Domain="" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection2.1.1.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="usernameforC2111" Domain="domainC2111" Password="+CCNb8oURT36EdVuDshvgW4Y42U1OwvoKwZCvQ+Mwwo=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Node>
</Node>
<Node Name="Folder2.2" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="ZPh3lumDECS6zgJFeXtWYScn4WCPPJahMkfkAoKdkC4=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="True" InheritIcon="False" InheritPanel="False" InheritPassword="True" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="True" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="InheritalAllConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="0RS1CG8gyibBDcj1LgOuUYR+BXtWkIvuwonoGZ1f9/0=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="True" InheritColors="True" InheritDescription="True" InheritDisplayThemes="True" InheritDisplayWallpaper="True" InheritEnableFontSmoothing="True" InheritEnableDesktopComposition="True" InheritDomain="True" InheritIcon="True" InheritPanel="True" InheritPassword="True" InheritPort="True" InheritProtocol="True" InheritPuttySession="True" InheritRedirectDiskDrives="True" InheritRedirectKeys="True" InheritRedirectPorts="True" InheritRedirectPrinters="True" InheritRedirectSmartCards="True" InheritRedirectSound="True" InheritResolution="True" InheritAutomaticResize="True" InheritUseConsoleSession="True" InheritUseCredSsp="True" InheritRenderingEngine="True" InheritUsername="True" InheritICAEncryptionStrength="True" InheritRDPAuthenticationLevel="True" InheritLoadBalanceInfo="True" InheritPreExtApp="True" InheritPostExtApp="True" InheritMacAddress="True" InheritUserField="True" InheritExtApp="True" InheritVNCCompression="True" InheritVNCEncoding="True" InheritVNCAuthMode="True" InheritVNCProxyType="True" InheritVNCProxyIP="True" InheritVNCProxyPort="True" InheritVNCProxyUsername="True" InheritVNCProxyPassword="True" InheritVNCColors="True" InheritVNCSmartSizeMode="True" InheritVNCViewOnly="True" InheritRDGatewayUsageMethod="True" InheritRDGatewayHostname="True" InheritRDGatewayUseConnectionCredentials="True" InheritRDGatewayUsername="True" InheritRDGatewayPassword="True" InheritRDGatewayDomain="True" />
<Node Name="Folder2.2.1 InheritAll" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="XfhhpQnL1lp34KZITCKTgDD3+7C7t8VW6y26rERXG+A=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="True" InheritColors="True" InheritDescription="True" InheritDisplayThemes="True" InheritDisplayWallpaper="True" InheritEnableFontSmoothing="True" InheritEnableDesktopComposition="True" InheritDomain="True" InheritIcon="True" InheritPanel="True" InheritPassword="True" InheritPort="True" InheritProtocol="True" InheritPuttySession="True" InheritRedirectDiskDrives="True" InheritRedirectKeys="True" InheritRedirectPorts="True" InheritRedirectPrinters="True" InheritRedirectSmartCards="True" InheritRedirectSound="True" InheritResolution="True" InheritAutomaticResize="True" InheritUseConsoleSession="True" InheritUseCredSsp="True" InheritRenderingEngine="True" InheritUsername="True" InheritICAEncryptionStrength="True" InheritRDPAuthenticationLevel="True" InheritLoadBalanceInfo="True" InheritPreExtApp="True" InheritPostExtApp="True" InheritMacAddress="True" InheritUserField="True" InheritExtApp="True" InheritVNCCompression="True" InheritVNCEncoding="True" InheritVNCAuthMode="True" InheritVNCProxyType="True" InheritVNCProxyIP="True" InheritVNCProxyPort="True" InheritVNCProxyUsername="True" InheritVNCProxyPassword="True" InheritVNCColors="True" InheritVNCSmartSizeMode="True" InheritVNCViewOnly="True" InheritRDGatewayUsageMethod="True" InheritRDGatewayHostname="True" InheritRDGatewayUseConnectionCredentials="True" InheritRDGatewayUsername="True" InheritRDGatewayPassword="True" InheritRDGatewayDomain="True">
<Node Name="Connection2.2.1.1 InheritAll" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="i4LCsy8+QgJ7xsDHh8ckf1h4Kno3sQYN9QhGD7vaTTc=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="True" InheritColors="True" InheritDescription="True" InheritDisplayThemes="True" InheritDisplayWallpaper="True" InheritEnableFontSmoothing="True" InheritEnableDesktopComposition="True" InheritDomain="True" InheritIcon="True" InheritPanel="True" InheritPassword="True" InheritPort="True" InheritProtocol="True" InheritPuttySession="True" InheritRedirectDiskDrives="True" InheritRedirectKeys="True" InheritRedirectPorts="True" InheritRedirectPrinters="True" InheritRedirectSmartCards="True" InheritRedirectSound="True" InheritResolution="True" InheritAutomaticResize="True" InheritUseConsoleSession="True" InheritUseCredSsp="True" InheritRenderingEngine="True" InheritUsername="True" InheritICAEncryptionStrength="True" InheritRDPAuthenticationLevel="True" InheritLoadBalanceInfo="True" InheritPreExtApp="True" InheritPostExtApp="True" InheritMacAddress="True" InheritUserField="True" InheritExtApp="True" InheritVNCCompression="True" InheritVNCEncoding="True" InheritVNCAuthMode="True" InheritVNCProxyType="True" InheritVNCProxyIP="True" InheritVNCProxyPort="True" InheritVNCProxyUsername="True" InheritVNCProxyPassword="True" InheritVNCColors="True" InheritVNCSmartSizeMode="True" InheritVNCViewOnly="True" InheritRDGatewayUsageMethod="True" InheritRDGatewayHostname="True" InheritRDGatewayUseConnectionCredentials="True" InheritRDGatewayUsername="True" InheritRDGatewayPassword="True" InheritRDGatewayDomain="True" />
</Node>
<Node Name="InheritUsernameConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="inheritUsernameDomain" Password="IaLl8+z9y4uk7hYIvgwpQzrSuo7MFvfTGPNzT19I1n4zDkZJwwLO6ba4UcFECDe8" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="True" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="InheritDomainConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="inheritDomainUsername" Domain="folder2domain" Password="DH57coImERkLQr0VIhReTRlBEatv45F3Dtz0hfzqzv9Hbhx48maiZx4XOFn4ZYvS" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="True" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="InheritPasswordConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="inheritDomainUsername" Domain="inheritUsernameDomain" Password="8Whb2isHSTBVrMSMDFCeSnNOA6l5n6GUmf1+9be0HUI=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="True" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Node>
</Node>
<Node Name="rootConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="root" Domain="rootdomain" Password="W2KSje/AD81hhjqdZeg8gkVvLozkd++94zH5hjOSWc0=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Connections>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<Connections Name="Connections" Export="False" EncryptionEngine="AES" BlockCipherMode="GCM" KdfIterations="1000" FullFileEncryption="False" Protected="8LmIO3+MWBY0zTmfjfOEdCGxhTAwnlohb1veTGNZFt6lAYvY2UOzWyjVzkx6V93smpbP0ZOuexN15u7rvwJEjawC" ConfVersion="2.6">
<Node Name="Folder1" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="" Domain="" Password="" Hostname="" Protocol="ICA" PuttySession="Default Settings" Port="1494" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="Encr128Bit" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection1.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder1" Domain="domainFolder1" Password="fdZPNiJlK9u/uRr22ViSGc8w69qHSDjWw4oeqJWCqFS+kT03rMOOdCczpCtvs6sX59iIcxetSA==" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Connection1.2" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder1" Domain="domainFolder1" Password="hAsz/lUntsPLR8Zat4mUTF1vcprNjjLxQK+lUJnsJcVEaAvgrPVKENBY8OvUytaw63zgVWp87g==" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Connection1.3" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder1" Domain="domainFolder1" Password="jQXxO9cdSBepxE1ly/XjZwU8mqvqNbmaO6UByt1AE53r/1Wi1LAnE69TU+HOlfewmwgqd2FYkw==" Hostname="" Protocol="SSH2" PuttySession="Default Settings" Port="22" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Node>
<Node Name="Folder2" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="Og5OwQv6U7hMU6fohgpp4i/Mx2MmcGpqt2RP0E45Grd5Flhi/UpUHiGSMb/Cs0GJI58eYEltAw==" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection2.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="usernameC21" Domain="domainC21" Password="Zc99Lb1dOKFv0KwjiLeMUe9+PCgrFXjn9LzInaYeD4C9Dq775v6Ab+/Ziy2LaVsbZWka" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Folder2.1" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="" Domain="" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection2.1.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="usernameC211" Domain="domainC2111" Password="gb+gO4iSmr6EV9bHsg4WjlMk4eGmX4LoRORopESfAcleBwFZIoCi9Cq2TSVd5My9u6rspw==" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Folder2.1.1" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="" Domain="" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection2.1.1.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="usernameforC2111" Domain="domainC2111" Password="uVGn3W5EX5sLRoM9t0AVBiG5vxOhk/j2luETXI3Jj4gfWiegs++TdUr+FfelDwKLr4fdfJE=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Node>
</Node>
<Node Name="Folder2.2" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="True" InheritIcon="False" InheritPanel="False" InheritPassword="True" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="True" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="InheritalAllConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="True" InheritColors="True" InheritDescription="True" InheritDisplayThemes="True" InheritDisplayWallpaper="True" InheritEnableFontSmoothing="True" InheritEnableDesktopComposition="True" InheritDomain="True" InheritIcon="True" InheritPanel="True" InheritPassword="True" InheritPort="True" InheritProtocol="True" InheritPuttySession="True" InheritRedirectDiskDrives="True" InheritRedirectKeys="True" InheritRedirectPorts="True" InheritRedirectPrinters="True" InheritRedirectSmartCards="True" InheritRedirectSound="True" InheritSoundQuality="False" InheritResolution="True" InheritAutomaticResize="True" InheritUseConsoleSession="True" InheritUseCredSsp="True" InheritRenderingEngine="True" InheritUsername="True" InheritICAEncryptionStrength="True" InheritRDPAuthenticationLevel="True" InheritLoadBalanceInfo="True" InheritPreExtApp="True" InheritPostExtApp="True" InheritMacAddress="True" InheritUserField="True" InheritExtApp="True" InheritVNCCompression="True" InheritVNCEncoding="True" InheritVNCAuthMode="True" InheritVNCProxyType="True" InheritVNCProxyIP="True" InheritVNCProxyPort="True" InheritVNCProxyUsername="True" InheritVNCProxyPassword="True" InheritVNCColors="True" InheritVNCSmartSizeMode="True" InheritVNCViewOnly="True" InheritRDGatewayUsageMethod="True" InheritRDGatewayHostname="True" InheritRDGatewayUseConnectionCredentials="True" InheritRDGatewayUsername="True" InheritRDGatewayPassword="True" InheritRDGatewayDomain="True" />
<Node Name="Folder2.2.1 InheritAll" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="True" InheritColors="True" InheritDescription="True" InheritDisplayThemes="True" InheritDisplayWallpaper="True" InheritEnableFontSmoothing="True" InheritEnableDesktopComposition="True" InheritDomain="True" InheritIcon="True" InheritPanel="True" InheritPassword="True" InheritPort="True" InheritProtocol="True" InheritPuttySession="True" InheritRedirectDiskDrives="True" InheritRedirectKeys="True" InheritRedirectPorts="True" InheritRedirectPrinters="True" InheritRedirectSmartCards="True" InheritRedirectSound="True" InheritSoundQuality="False" InheritResolution="True" InheritAutomaticResize="True" InheritUseConsoleSession="True" InheritUseCredSsp="True" InheritRenderingEngine="True" InheritUsername="True" InheritICAEncryptionStrength="True" InheritRDPAuthenticationLevel="True" InheritLoadBalanceInfo="True" InheritPreExtApp="True" InheritPostExtApp="True" InheritMacAddress="True" InheritUserField="True" InheritExtApp="True" InheritVNCCompression="True" InheritVNCEncoding="True" InheritVNCAuthMode="True" InheritVNCProxyType="True" InheritVNCProxyIP="True" InheritVNCProxyPort="True" InheritVNCProxyUsername="True" InheritVNCProxyPassword="True" InheritVNCColors="True" InheritVNCSmartSizeMode="True" InheritVNCViewOnly="True" InheritRDGatewayUsageMethod="True" InheritRDGatewayHostname="True" InheritRDGatewayUseConnectionCredentials="True" InheritRDGatewayUsername="True" InheritRDGatewayPassword="True" InheritRDGatewayDomain="True">
<Node Name="Connection2.2.1.1 InheritAll" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="True" InheritColors="True" InheritDescription="True" InheritDisplayThemes="True" InheritDisplayWallpaper="True" InheritEnableFontSmoothing="True" InheritEnableDesktopComposition="True" InheritDomain="True" InheritIcon="True" InheritPanel="True" InheritPassword="True" InheritPort="True" InheritProtocol="True" InheritPuttySession="True" InheritRedirectDiskDrives="True" InheritRedirectKeys="True" InheritRedirectPorts="True" InheritRedirectPrinters="True" InheritRedirectSmartCards="True" InheritRedirectSound="True" InheritSoundQuality="False" InheritResolution="True" InheritAutomaticResize="True" InheritUseConsoleSession="True" InheritUseCredSsp="True" InheritRenderingEngine="True" InheritUsername="True" InheritICAEncryptionStrength="True" InheritRDPAuthenticationLevel="True" InheritLoadBalanceInfo="True" InheritPreExtApp="True" InheritPostExtApp="True" InheritMacAddress="True" InheritUserField="True" InheritExtApp="True" InheritVNCCompression="True" InheritVNCEncoding="True" InheritVNCAuthMode="True" InheritVNCProxyType="True" InheritVNCProxyIP="True" InheritVNCProxyPort="True" InheritVNCProxyUsername="True" InheritVNCProxyPassword="True" InheritVNCColors="True" InheritVNCSmartSizeMode="True" InheritVNCViewOnly="True" InheritRDGatewayUsageMethod="True" InheritRDGatewayHostname="True" InheritRDGatewayUseConnectionCredentials="True" InheritRDGatewayUsername="True" InheritRDGatewayPassword="True" InheritRDGatewayDomain="True" />
</Node>
<Node Name="InheritUsernameConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="inheritUsernameDomain" Password="CFAVi9B4uc9Zhpt9hmAqYHcrIUHF1nVuMoe+g3jjdJg7ulbgvtUBsGmvPElTcacuIQZ1OOq5T2QSgvEq6lTUwbsR92PhJIU=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="True" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="InheritDomainConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="inheritDomainUsername" Domain="folder2domain" Password="tIHG70e2LUBNqzQudqVaCR//i52WHnzdeoEukJ3BCuKrbTNYxL0L5i/LF5CpBdnRYKOplgGzVgsYvSQ/NRjQV1PWINhWy90=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="True" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="InheritPasswordConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="inheritDomainUsername" Domain="inheritUsernameDomain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="True" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Node>
</Node>
<Node Name="rootConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="root" Domain="rootdomain" Password="QjVdSbogtcT8NsiZ83XQRWiU/9FXLKKYj4P87lMJbNdQEl10UswLG2zOg2GCYJZ7njJAXrYLIULpuGjs" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Connections>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<Connections Name="Connections" Export="False" EncryptionEngine="AES" BlockCipherMode="GCM" KdfIterations="5000" FullFileEncryption="False" Protected="Z1IOT8h7neJ5V7es5Iv63A2WsDG6QWl10F/Rb9ljKxvCseEITty1BfMNgiaVPfm7w61uabQKqu2waDCXUpLo1OZW" ConfVersion="2.6">
<Node Name="Folder1" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="" Domain="" Password="" Hostname="" Protocol="ICA" PuttySession="Default Settings" Port="1494" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="Encr128Bit" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection1.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder1" Domain="domainFolder1" Password="Z3gnKsowJa1jorYkylUYGWeRXzANCSHt797uoViLJ5f41GUj7kJWe9PjxPHpIqTvu3iUkhxsUQ==" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Connection1.2" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder1" Domain="domainFolder1" Password="XcGdi52XOIjKGn1qXKe7Mo/xOaXa3MEyCJVwwiC9DrWY9j9Cc6iQZFVDDcoHEAWip4DL+LhWnA==" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Connection1.3" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder1" Domain="domainFolder1" Password="k3xo08s+XuE66cvz6EQOcvwtBVQmhhKqHRQ1d+vEFqGwfbwnGqwWoo0Aur4Hp2ukzZim/WOkjg==" Hostname="" Protocol="SSH2" PuttySession="Default Settings" Port="22" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Node>
<Node Name="Folder2" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="le+uKgaUpDE3/uRWK4GeEvzKHz58RzoNwCZGXQ4SEmdsFX858hEJqieoefxPRuoDlcqc1dD7ig==" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection2.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="usernameC21" Domain="domainC21" Password="YJtEz9kawG0mPmF6kchoUe/b3x0yKDVqZl5VVh8YfBcEXLqZnSVtbmcs8CZeMliAOP1u" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Folder2.1" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="" Domain="" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection2.1.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="usernameC211" Domain="domainC2111" Password="4Qzd0gehLXc4oJ5j8iRmoNIlP4HCR25Y8UvxUqATmAlJ4qxP4L0vOLuPX9CHTCZ0ZzDs3Q==" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Folder2.1.1" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="" Domain="" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection2.1.1.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="usernameforC2111" Domain="domainC2111" Password="EP3keqzE3CKR9xhc3ryiA4AoVkB1tLYnpy5UhlFSziCBESQW7uLw6ru2L/M0cUlAj5xnDX4=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Node>
</Node>
<Node Name="Folder2.2" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="True" InheritIcon="False" InheritPanel="False" InheritPassword="True" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="True" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="InheritalAllConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="True" InheritColors="True" InheritDescription="True" InheritDisplayThemes="True" InheritDisplayWallpaper="True" InheritEnableFontSmoothing="True" InheritEnableDesktopComposition="True" InheritDomain="True" InheritIcon="True" InheritPanel="True" InheritPassword="True" InheritPort="True" InheritProtocol="True" InheritPuttySession="True" InheritRedirectDiskDrives="True" InheritRedirectKeys="True" InheritRedirectPorts="True" InheritRedirectPrinters="True" InheritRedirectSmartCards="True" InheritRedirectSound="True" InheritSoundQuality="False" InheritResolution="True" InheritAutomaticResize="True" InheritUseConsoleSession="True" InheritUseCredSsp="True" InheritRenderingEngine="True" InheritUsername="True" InheritICAEncryptionStrength="True" InheritRDPAuthenticationLevel="True" InheritLoadBalanceInfo="True" InheritPreExtApp="True" InheritPostExtApp="True" InheritMacAddress="True" InheritUserField="True" InheritExtApp="True" InheritVNCCompression="True" InheritVNCEncoding="True" InheritVNCAuthMode="True" InheritVNCProxyType="True" InheritVNCProxyIP="True" InheritVNCProxyPort="True" InheritVNCProxyUsername="True" InheritVNCProxyPassword="True" InheritVNCColors="True" InheritVNCSmartSizeMode="True" InheritVNCViewOnly="True" InheritRDGatewayUsageMethod="True" InheritRDGatewayHostname="True" InheritRDGatewayUseConnectionCredentials="True" InheritRDGatewayUsername="True" InheritRDGatewayPassword="True" InheritRDGatewayDomain="True" />
<Node Name="Folder2.2.1 InheritAll" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="True" InheritColors="True" InheritDescription="True" InheritDisplayThemes="True" InheritDisplayWallpaper="True" InheritEnableFontSmoothing="True" InheritEnableDesktopComposition="True" InheritDomain="True" InheritIcon="True" InheritPanel="True" InheritPassword="True" InheritPort="True" InheritProtocol="True" InheritPuttySession="True" InheritRedirectDiskDrives="True" InheritRedirectKeys="True" InheritRedirectPorts="True" InheritRedirectPrinters="True" InheritRedirectSmartCards="True" InheritRedirectSound="True" InheritSoundQuality="False" InheritResolution="True" InheritAutomaticResize="True" InheritUseConsoleSession="True" InheritUseCredSsp="True" InheritRenderingEngine="True" InheritUsername="True" InheritICAEncryptionStrength="True" InheritRDPAuthenticationLevel="True" InheritLoadBalanceInfo="True" InheritPreExtApp="True" InheritPostExtApp="True" InheritMacAddress="True" InheritUserField="True" InheritExtApp="True" InheritVNCCompression="True" InheritVNCEncoding="True" InheritVNCAuthMode="True" InheritVNCProxyType="True" InheritVNCProxyIP="True" InheritVNCProxyPort="True" InheritVNCProxyUsername="True" InheritVNCProxyPassword="True" InheritVNCColors="True" InheritVNCSmartSizeMode="True" InheritVNCViewOnly="True" InheritRDGatewayUsageMethod="True" InheritRDGatewayHostname="True" InheritRDGatewayUseConnectionCredentials="True" InheritRDGatewayUsername="True" InheritRDGatewayPassword="True" InheritRDGatewayDomain="True">
<Node Name="Connection2.2.1.1 InheritAll" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="True" InheritColors="True" InheritDescription="True" InheritDisplayThemes="True" InheritDisplayWallpaper="True" InheritEnableFontSmoothing="True" InheritEnableDesktopComposition="True" InheritDomain="True" InheritIcon="True" InheritPanel="True" InheritPassword="True" InheritPort="True" InheritProtocol="True" InheritPuttySession="True" InheritRedirectDiskDrives="True" InheritRedirectKeys="True" InheritRedirectPorts="True" InheritRedirectPrinters="True" InheritRedirectSmartCards="True" InheritRedirectSound="True" InheritSoundQuality="False" InheritResolution="True" InheritAutomaticResize="True" InheritUseConsoleSession="True" InheritUseCredSsp="True" InheritRenderingEngine="True" InheritUsername="True" InheritICAEncryptionStrength="True" InheritRDPAuthenticationLevel="True" InheritLoadBalanceInfo="True" InheritPreExtApp="True" InheritPostExtApp="True" InheritMacAddress="True" InheritUserField="True" InheritExtApp="True" InheritVNCCompression="True" InheritVNCEncoding="True" InheritVNCAuthMode="True" InheritVNCProxyType="True" InheritVNCProxyIP="True" InheritVNCProxyPort="True" InheritVNCProxyUsername="True" InheritVNCProxyPassword="True" InheritVNCColors="True" InheritVNCSmartSizeMode="True" InheritVNCViewOnly="True" InheritRDGatewayUsageMethod="True" InheritRDGatewayHostname="True" InheritRDGatewayUseConnectionCredentials="True" InheritRDGatewayUsername="True" InheritRDGatewayPassword="True" InheritRDGatewayDomain="True" />
</Node>
<Node Name="InheritUsernameConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="inheritUsernameDomain" Password="dqqh/2hcFacWAc0gGWSjkMBXboIAKzDPrZLwzX+O0RaCk6sYs82MU5VnY26YZNKUZJXWssa7s5f52hKqKMQZ6S4pgmdMSDQ=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="True" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="InheritDomainConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="inheritDomainUsername" Domain="folder2domain" Password="I8CjAXPV7Tgq5rlKbvwtcNVnZ8QP9Lt4i4Xo2cWvJV67Uv8OT0Z3gMKkoGozLfQ/Dl19VYJZvjyi5DAehioCMMCQmsrq7Eg=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="True" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="InheritPasswordConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="inheritDomainUsername" Domain="inheritUsernameDomain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="True" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Node>
</Node>
<Node Name="rootConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="root" Domain="rootdomain" Password="L72IgpkriXVOBWly89VYmXTyCFq/ArXZLN3fFZ0QHH9axQFUjWxH9eBLWyx3oMw8mn4aAyfuapPSHn8U" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Connections>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<Connections Name="Connections" Export="False" EncryptionEngine="AES" BlockCipherMode="GCM" KdfIterations="1000" FullFileEncryption="False" Protected="e/T6ajrPtNNlHreSeD4QBqToTuiqtNACKiPJv7vU+l6TWCu9JNsmL+Y8lJ4aTl5YVcstXpQjxsZ9i8+YV4Gs" ConfVersion="2.6">
<Node Name="Folder1" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="" Domain="" Password="" Hostname="" Protocol="ICA" PuttySession="Default Settings" Port="1494" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="Encr128Bit" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection1.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder1" Domain="domainFolder1" Password="CJVJ2L3rAm6M4+s8fjTPtdadgyquxgjouQD6MUSDFKMDZShaPV+GXitckZbK8E7THgd8lVhktg==" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Connection1.2" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder1" Domain="domainFolder1" Password="E1XqFYVjCBRPA+zheTg7OCojgki4P4lhf5zCE9RS40OwgGJdgdwy1dG5CROeawh2Mxv2paPUhw==" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Connection1.3" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder1" Domain="domainFolder1" Password="3y/oZqN6DiNcUoM8ll+gH3VfkcsF7uRz447CG+eyOGZDbn6p44JilE8K3nzHHmcuzzSWfAZoRQ==" Hostname="" Protocol="SSH2" PuttySession="Default Settings" Port="22" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Node>
<Node Name="Folder2" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="Cc8VeGR5shoSMTrQlBZLOlMgk9ZVoroq98Mie0kMwjdF5y7lJ1Tx9MJo7hfbiCUC2BvVlmTEeQ==" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection2.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="usernameC21" Domain="domainC21" Password="/4exqbP5O5zpHkS2QWTvSwmYWGZnJoBURZ9KXLZXfy/ORYfVmxJiqTrGkjSjWesl2zSg" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Folder2.1" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="" Domain="" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection2.1.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="usernameC211" Domain="domainC2111" Password="4mYCVoBZQJh9DS7aaE9is3Q/vK+6nvJ783R0rZ03zaIiwwr7DtD+prPCi0MNd+14YB+m3A==" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="Folder2.1.1" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="" Domain="" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="Connection2.1.1.1" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="usernameforC2111" Domain="domainC2111" Password="Mkr5rotARpOOeca9I5HDDReHZeJ88DFSEtHUV8lFNfLa/RTn8wgnuz9e0k+F3txILpTxha0=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Node>
</Node>
<Node Name="Folder2.2" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="True" InheritIcon="False" InheritPanel="False" InheritPassword="True" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="True" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False">
<Node Name="InheritalAllConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="True" InheritColors="True" InheritDescription="True" InheritDisplayThemes="True" InheritDisplayWallpaper="True" InheritEnableFontSmoothing="True" InheritEnableDesktopComposition="True" InheritDomain="True" InheritIcon="True" InheritPanel="True" InheritPassword="True" InheritPort="True" InheritProtocol="True" InheritPuttySession="True" InheritRedirectDiskDrives="True" InheritRedirectKeys="True" InheritRedirectPorts="True" InheritRedirectPrinters="True" InheritRedirectSmartCards="True" InheritRedirectSound="True" InheritSoundQuality="False" InheritResolution="True" InheritAutomaticResize="True" InheritUseConsoleSession="True" InheritUseCredSsp="True" InheritRenderingEngine="True" InheritUsername="True" InheritICAEncryptionStrength="True" InheritRDPAuthenticationLevel="True" InheritLoadBalanceInfo="True" InheritPreExtApp="True" InheritPostExtApp="True" InheritMacAddress="True" InheritUserField="True" InheritExtApp="True" InheritVNCCompression="True" InheritVNCEncoding="True" InheritVNCAuthMode="True" InheritVNCProxyType="True" InheritVNCProxyIP="True" InheritVNCProxyPort="True" InheritVNCProxyUsername="True" InheritVNCProxyPassword="True" InheritVNCColors="True" InheritVNCSmartSizeMode="True" InheritVNCViewOnly="True" InheritRDGatewayUsageMethod="True" InheritRDGatewayHostname="True" InheritRDGatewayUseConnectionCredentials="True" InheritRDGatewayUsername="True" InheritRDGatewayPassword="True" InheritRDGatewayDomain="True" />
<Node Name="Folder2.2.1 InheritAll" Type="Container" Expanded="True" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="True" InheritColors="True" InheritDescription="True" InheritDisplayThemes="True" InheritDisplayWallpaper="True" InheritEnableFontSmoothing="True" InheritEnableDesktopComposition="True" InheritDomain="True" InheritIcon="True" InheritPanel="True" InheritPassword="True" InheritPort="True" InheritProtocol="True" InheritPuttySession="True" InheritRedirectDiskDrives="True" InheritRedirectKeys="True" InheritRedirectPorts="True" InheritRedirectPrinters="True" InheritRedirectSmartCards="True" InheritRedirectSound="True" InheritSoundQuality="False" InheritResolution="True" InheritAutomaticResize="True" InheritUseConsoleSession="True" InheritUseCredSsp="True" InheritRenderingEngine="True" InheritUsername="True" InheritICAEncryptionStrength="True" InheritRDPAuthenticationLevel="True" InheritLoadBalanceInfo="True" InheritPreExtApp="True" InheritPostExtApp="True" InheritMacAddress="True" InheritUserField="True" InheritExtApp="True" InheritVNCCompression="True" InheritVNCEncoding="True" InheritVNCAuthMode="True" InheritVNCProxyType="True" InheritVNCProxyIP="True" InheritVNCProxyPort="True" InheritVNCProxyUsername="True" InheritVNCProxyPassword="True" InheritVNCColors="True" InheritVNCSmartSizeMode="True" InheritVNCViewOnly="True" InheritRDGatewayUsageMethod="True" InheritRDGatewayHostname="True" InheritRDGatewayUseConnectionCredentials="True" InheritRDGatewayUsername="True" InheritRDGatewayPassword="True" InheritRDGatewayDomain="True">
<Node Name="Connection2.2.1.1 InheritAll" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="folder2domain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="True" InheritColors="True" InheritDescription="True" InheritDisplayThemes="True" InheritDisplayWallpaper="True" InheritEnableFontSmoothing="True" InheritEnableDesktopComposition="True" InheritDomain="True" InheritIcon="True" InheritPanel="True" InheritPassword="True" InheritPort="True" InheritProtocol="True" InheritPuttySession="True" InheritRedirectDiskDrives="True" InheritRedirectKeys="True" InheritRedirectPorts="True" InheritRedirectPrinters="True" InheritRedirectSmartCards="True" InheritRedirectSound="True" InheritSoundQuality="False" InheritResolution="True" InheritAutomaticResize="True" InheritUseConsoleSession="True" InheritUseCredSsp="True" InheritRenderingEngine="True" InheritUsername="True" InheritICAEncryptionStrength="True" InheritRDPAuthenticationLevel="True" InheritLoadBalanceInfo="True" InheritPreExtApp="True" InheritPostExtApp="True" InheritMacAddress="True" InheritUserField="True" InheritExtApp="True" InheritVNCCompression="True" InheritVNCEncoding="True" InheritVNCAuthMode="True" InheritVNCProxyType="True" InheritVNCProxyIP="True" InheritVNCProxyPort="True" InheritVNCProxyUsername="True" InheritVNCProxyPassword="True" InheritVNCColors="True" InheritVNCSmartSizeMode="True" InheritVNCViewOnly="True" InheritRDGatewayUsageMethod="True" InheritRDGatewayHostname="True" InheritRDGatewayUseConnectionCredentials="True" InheritRDGatewayUsername="True" InheritRDGatewayPassword="True" InheritRDGatewayDomain="True" />
</Node>
<Node Name="InheritUsernameConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="userFolder2" Domain="inheritUsernameDomain" Password="sLSc8lfEYTQm1knxb7lwmcHAIXhGDNH+h7XzHKN5KPkGhS8Y+gipeH4YhrVRfowist8Pp7P/acQzU1cny5tYeAc/s1kmbtI=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="True" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="InheritDomainConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="inheritDomainUsername" Domain="folder2domain" Password="tXsA53Ce86U/+AprFjezj0NSIREu/7nRpVF4EKUuF+SUhFMeXWDa38b4c8h2VcE/EU3Bh1aIcv4Vxfnw/OXYDljivdEeq5A=" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="True" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
<Node Name="InheritPasswordConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="inheritDomainUsername" Domain="inheritUsernameDomain" Password="" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="True" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Node>
</Node>
<Node Name="rootConnection" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Username="root" Domain="rootdomain" Password="zE99YL7l+/T5s2ctJGGVO35qrXCKchScuhlmnipUiUItRsNPKiDTW/4iBJ4w65cfpVyArZ41vFOenGoY" Hostname="" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="False" UseCredSsp="True" RenderingEngine="IE" ICAEncryptionStrength="EncrBasic" RDPAuthenticationLevel="NoAuth" LoadBalanceInfo="" Colors="Colors16Bit" Resolution="FitToWindow" AutomaticResize="True" DisplayWallpaper="False" DisplayThemes="False" EnableFontSmoothing="False" EnableDesktopComposition="False" CacheBitmaps="False" RedirectDiskDrives="False" RedirectPorts="False" RedirectPrinters="False" RedirectSmartCards="False" RedirectSound="DoNotPlay" SoundQuality="Dynamic" RedirectKeys="False" Connected="False" PreExtApp="" PostExtApp="" MacAddress="" UserField="" ExtApp="" VNCCompression="CompNone" VNCEncoding="EncHextile" VNCAuthMode="AuthVNC" VNCProxyType="ProxyNone" VNCProxyIP="" VNCProxyPort="0" VNCProxyUsername="" VNCProxyPassword="" VNCColors="ColNormal" VNCSmartSizeMode="SmartSAspect" VNCViewOnly="False" RDGatewayUsageMethod="Never" RDGatewayHostname="" RDGatewayUseConnectionCredentials="Yes" RDGatewayUsername="" RDGatewayPassword="" RDGatewayDomain="" InheritCacheBitmaps="False" InheritColors="False" InheritDescription="False" InheritDisplayThemes="False" InheritDisplayWallpaper="False" InheritEnableFontSmoothing="False" InheritEnableDesktopComposition="False" InheritDomain="False" InheritIcon="False" InheritPanel="False" InheritPassword="False" InheritPort="False" InheritProtocol="False" InheritPuttySession="False" InheritRedirectDiskDrives="False" InheritRedirectKeys="False" InheritRedirectPorts="False" InheritRedirectPrinters="False" InheritRedirectSmartCards="False" InheritRedirectSound="False" InheritSoundQuality="False" InheritResolution="False" InheritAutomaticResize="False" InheritUseConsoleSession="False" InheritUseCredSsp="False" InheritRenderingEngine="False" InheritUsername="False" InheritICAEncryptionStrength="False" InheritRDPAuthenticationLevel="False" InheritLoadBalanceInfo="False" InheritPreExtApp="False" InheritPostExtApp="False" InheritMacAddress="False" InheritUserField="False" InheritExtApp="False" InheritVNCCompression="False" InheritVNCEncoding="False" InheritVNCAuthMode="False" InheritVNCProxyType="False" InheritVNCProxyIP="False" InheritVNCProxyPort="False" InheritVNCProxyUsername="False" InheritVNCProxyPassword="False" InheritVNCColors="False" InheritVNCSmartSizeMode="False" InheritVNCViewOnly="False" InheritRDGatewayUsageMethod="False" InheritRDGatewayHostname="False" InheritRDGatewayUseConnectionCredentials="False" InheritRDGatewayUsername="False" InheritRDGatewayPassword="False" InheritRDGatewayDomain="False" />
</Connections>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<RDCMan schemaVersion="1">
<version>99.99</version>
<file>
</file>
</RDCMan>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<RDCMan schemaVersion="1">
<file>
</file>
</RDCMan>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<RDCMan schemaVersion="-99">
<version>2.2</version>
<file>
</file>
</RDCMan>

View File

@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<RDCMan schemaVersion="1">
<version>2.2</version>
<file>
<properties>
<name>test_rdcman_v2_2_schema1</name>
<expanded>True</expanded>
<comment />
<logonCredentials inherit="FromParent" />
<connectionSettings inherit="FromParent" />
<gatewaySettings inherit="FromParent" />
<remoteDesktop inherit="FromParent" />
<localResources inherit="FromParent" />
<securitySettings inherit="FromParent" />
<displaySettings inherit="FromParent" />
</properties>
<group>
<properties>
<name>Group1</name>
<expanded>True</expanded>
<comment />
<logonCredentials inherit="FromParent" />
<connectionSettings inherit="FromParent" />
<gatewaySettings inherit="FromParent" />
<remoteDesktop inherit="FromParent" />
<localResources inherit="FromParent" />
<securitySettings inherit="FromParent" />
<displaySettings inherit="FromParent" />
</properties>
<server>
<name>server1</name>
<displayName>server1_displayname</displayName>
<comment>Comment text here</comment>
<logonCredentials inherit="None">
<userName>myusername1</userName>
<domain>mydomain</domain>
<password storeAsClearText="False">AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA/jk3lWsW+ku0n4AOVYyLTAAAAAACAAAAAAAQZgAAAAEAACAAAABhmrmYHd+c7VjWfPvxJ8pgi55yeV2brJDV/i9XzGUz6wAAAAAOgAAAAAIAACAAAAACJMhtb6tmkJn9vSv9J4VMWgt3S7Ikmf63xK/uKQ+YuyAAAACD3mJOT1910KD71zqbi+m/F6A0LK0tu0BhpOhr9v0yH0AAAADrb+Uv2btNYhfTUDGbw5pT5dbp5oXzc3I8QO7X1vgMXiI5TkrSxfHP/2j+Yak++vAjpVtzlxk49hpDLNAZnnhg</password>
</logonCredentials>
<connectionSettings inherit="None">
<connectToConsole>True</connectToConsole>
<startProgram />
<workingDir />
<port>9933</port>
</connectionSettings>
<gatewaySettings inherit="None">
<userName>gatewayusername</userName>
<domain>innerdomain</domain>
<password storeAsClearText="False">AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA/jk3lWsW+ku0n4AOVYyLTAAAAAACAAAAAAAQZgAAAAEAACAAAACgU917evQ54VsDf3nkofPOAPj0icRejg3yfyUwZqV3DgAAAAAOgAAAAAIAACAAAACuPdtJTxd2yvFuTpSOeZz1loraPu2WFqUXiJp4cfjbJTAAAAB8L5YX93h6pQoKJozrk+Y+spHWqP+eqBUXRJ45oLreKslslSWCEO7VWg4rgr0FYsNAAAAAU1i5aSTlBy99EkNEd2inrAJAopCfNig6osiEVdvA6eYnCogG5mhzYEK5d5Wt49S8HbEyuLF/8IxV0PKG53vCZQ==</password>
<enabled>True</enabled>
<hostName>gatewayserverhost.innerdomain.net</hostName>
<logonMethod>4</logonMethod>
<localBypass>False</localBypass>
<credSharing>False</credSharing>
</gatewaySettings>
<remoteDesktop inherit="None">
<size>1024 x 768</size>
<sameSizeAsClientArea>True</sameSizeAsClientArea>
<fullScreen>False</fullScreen>
<colorDepth>24</colorDepth>
</remoteDesktop>
<localResources inherit="None">
<audioRedirection>2</audioRedirection>
<audioRedirectionQuality>0</audioRedirectionQuality>
<audioCaptureRedirection>0</audioCaptureRedirection>
<keyboardHook>1</keyboardHook>
<redirectClipboard>True</redirectClipboard>
<redirectDrives>True</redirectDrives>
<redirectPorts>True</redirectPorts>
<redirectPrinters>True</redirectPrinters>
<redirectSmartCards>True</redirectSmartCards>
</localResources>
<securitySettings inherit="None">
<authentication>1</authentication>
</securitySettings>
<displaySettings inherit="None">
<thumbnailScale>1</thumbnailScale>
</displaySettings>
</server>
<server>
<name>server2</name>
<displayName>server2</displayName>
<comment />
<logonCredentials inherit="FromParent" />
<connectionSettings inherit="FromParent" />
<gatewaySettings inherit="FromParent" />
<remoteDesktop inherit="FromParent" />
<localResources inherit="FromParent" />
<securitySettings inherit="FromParent" />
<displaySettings inherit="FromParent" />
</server>
</group>
<group>
<properties>
<name>Group2</name>
<expanded>True</expanded>
<comment />
<logonCredentials inherit="FromParent" />
<connectionSettings inherit="FromParent" />
<gatewaySettings inherit="FromParent" />
<remoteDesktop inherit="FromParent" />
<localResources inherit="FromParent" />
<securitySettings inherit="FromParent" />
<displaySettings inherit="FromParent" />
</properties>
<group>
<properties>
<name>Group3</name>
<expanded>True</expanded>
<comment />
<logonCredentials inherit="FromParent" />
<connectionSettings inherit="FromParent" />
<gatewaySettings inherit="FromParent" />
<remoteDesktop inherit="FromParent" />
<localResources inherit="FromParent" />
<securitySettings inherit="FromParent" />
<displaySettings inherit="FromParent" />
</properties>
<server>
<name>server3</name>
<displayName>server3</displayName>
<comment />
<logonCredentials inherit="FromParent" />
<connectionSettings inherit="FromParent" />
<gatewaySettings inherit="FromParent" />
<remoteDesktop inherit="FromParent" />
<localResources inherit="FromParent" />
<securitySettings inherit="FromParent" />
<displaySettings inherit="FromParent" />
</server>
<server>
<name>server4</name>
<displayName>server4</displayName>
<comment />
<logonCredentials inherit="FromParent" />
<connectionSettings inherit="FromParent" />
<gatewaySettings inherit="FromParent" />
<remoteDesktop inherit="FromParent" />
<localResources inherit="FromParent" />
<securitySettings inherit="FromParent" />
<displaySettings inherit="FromParent" />
</server>
</group>
</group>
</file>
</RDCMan>

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<RDCMan programVersion="2.7" schemaVersion="3">
<file>
<credentialsProfiles />
<properties>
<expanded>True</expanded>
<name>test_RDCMan_connections</name>
</properties>
<smartGroup>
<properties>
<expanded>False</expanded>
<name>AllServers</name>
</properties>
<ruleGroup operator="All">
<rule>
<property>DisplayName</property>
<operator>Matches</operator>
<value>server</value>
</rule>
</ruleGroup>
</smartGroup>
<group>
<properties>
<expanded>True</expanded>
<name>Group1</name>
</properties>
<server>
<properties>
<name>server1</name>
</properties>
<logonCredentials inherit="None">
<profileName scope="Local">Custom</profileName>
<userName>someusername1</userName>
<password>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA/jk3lWsW+ku0n4AOVYyLTAAAAAACAAAAAAAQZgAAAAEAACAAAACZryl2a4trJLcUdyg7jL/m51fxn4Vy+je6SBhT5FasmgAAAAAOgAAAAAIAACAAAAAcG6MQhKFvEcKRrRE74YKrrnYKxLFnVxbGzyfl7JoyvjAAAACAofcbQqcr6h9VQuwwWW5IBkW1zsugofl1MjsL9t2uWfuBgnrya1Xlyue5E7cG8BZAAAAApgx/XXqBqXhr6CV2SJTlXihg7n5epOIT02A8ymy3qRftDgXlmu3IaN7krK3gofv+iNdVrvIdJJMYCihm7dyqOw==</password>
<domain>mydomain</domain>
</logonCredentials>
<connectionSettings inherit="None">
<connectToConsole>False</connectToConsole>
<startProgram />
<workingDir />
<port>9933</port>
<loadBalanceInfo />
</connectionSettings>
<gatewaySettings inherit="None">
<enabled>True</enabled>
<hostName>gatewayserver.innerdomain.net</hostName>
<logonMethod>Any</logonMethod>
<localBypass>True</localBypass>
<credSharing>True</credSharing>
<profileName scope="Local">Custom</profileName>
<userName />
<password />
<domain />
</gatewaySettings>
<remoteDesktop inherit="None">
<sameSizeAsClientArea>False</sameSizeAsClientArea>
<fullScreen>True</fullScreen>
<colorDepth>24</colorDepth>
</remoteDesktop>
<localResources inherit="None">
<audioRedirection>Client</audioRedirection>
<audioRedirectionQuality>Dynamic</audioRedirectionQuality>
<audioCaptureRedirection>DoNotRecord</audioCaptureRedirection>
<keyboardHook>FullScreenClient</keyboardHook>
<redirectClipboard>True</redirectClipboard>
<redirectDrives>True</redirectDrives>
<redirectDrivesList>
<item>C:\</item>
<item>D:\</item>
<item>E:\</item>
<item>F:\</item>
<item>G:\</item>
</redirectDrivesList>
<redirectPrinters>True</redirectPrinters>
<redirectPorts>True</redirectPorts>
<redirectSmartCards>True</redirectSmartCards>
<redirectPnpDevices>True</redirectPnpDevices>
</localResources>
<displaySettings inherit="None">
<thumbnailScale>1</thumbnailScale>
<smartSizeDockedWindows>False</smartSizeDockedWindows>
<smartSizeUndockedWindows>False</smartSizeUndockedWindows>
</displaySettings>
<securitySettings inherit="None">
<authentication>Warn</authentication>
</securitySettings>
</server>
<server>
<properties>
<name>server2</name>
</properties>
</server>
</group>
<group>
<properties>
<expanded>True</expanded>
<name>Group2</name>
</properties>
<group>
<properties>
<expanded>True</expanded>
<name>Group3</name>
</properties>
<server>
<properties>
<name>server3</name>
</properties>
</server>
<server>
<properties>
<name>server4</name>
</properties>
</server>
</group>
</group>
</file>
<connected />
<favorites />
<recentlyUsed />
</RDCMan>

View File

@@ -1,7 +1,10 @@
using System.Security;
using System;
using System.Collections;
using System.Security;
using mRemoteNG.Security;
using mRemoteNG.Security.SymmetricEncryption;
using NUnit.Framework;
using NUnit.Framework.Constraints;
namespace mRemoteNGTests.Security
@@ -39,11 +42,12 @@ namespace mRemoteNGTests.Security
Assert.That(cipherText.IsBase64String, Is.True);
}
[Test]
public void DecryptedTextIsEqualToOriginalPlainText()
[TestCaseSource(nameof(GetAllBlockCipherEngineAndModeCombinations))]
public void DecryptedTextIsEqualToOriginalPlainText(BlockCipherEngines engine, BlockCipherModes mode)
{
var cipherText = _cryptographyProvider.Encrypt(_plainText, _encryptionKey);
var decryptedCipherText = _cryptographyProvider.Decrypt(cipherText, _encryptionKey);
var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(engine, mode);
var cipherText = cryptoProvider.Encrypt(_plainText, _encryptionKey);
var decryptedCipherText = cryptoProvider.Decrypt(cipherText, _encryptionKey);
Assert.That(decryptedCipherText, Is.EqualTo(_plainText));
}
@@ -54,5 +58,60 @@ namespace mRemoteNGTests.Security
var cipherText2 = _cryptographyProvider.Encrypt(_plainText, _encryptionKey);
Assert.That(cipherText1, Is.Not.EqualTo(cipherText2));
}
private static IEnumerable GetAllBlockCipherEngineAndModeCombinations()
{
var combinationList = new ArrayList();
var engineChoices = Enum.GetValues(typeof(BlockCipherEngines));
var modeChoices = Enum.GetValues(typeof(BlockCipherModes));
foreach (var engine in engineChoices)
{
foreach (var mode in modeChoices)
{
combinationList.Add(new[] { engine, mode });
}
}
return combinationList;
}
[Test]
public void DecryptionFailureThrowsException()
{
var cipherText = _cryptographyProvider.Encrypt(_plainText, _encryptionKey);
ActualValueDelegate<string> decryptMethod = () => _cryptographyProvider.Decrypt(cipherText, "wrongKey".ConvertToSecureString());
Assert.That(decryptMethod, Throws.TypeOf<EncryptionException>());
}
[TestCaseSource(typeof(TestCaseSources), nameof(TestCaseSources.AllEngineAndModeCombos))]
public void GetCipherEngine(BlockCipherEngines engine, BlockCipherModes mode)
{
var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(engine, mode);
Assert.That(cryptoProvider.CipherEngine, Is.EqualTo(engine));
}
[TestCaseSource(typeof(TestCaseSources), nameof(TestCaseSources.AllEngineAndModeCombos))]
public void GetCipherMode(BlockCipherEngines engine, BlockCipherModes mode)
{
var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(engine, mode);
Assert.That(cryptoProvider.CipherMode, Is.EqualTo(mode));
}
private class TestCaseSources
{
public static IEnumerable AllEngineAndModeCombos
{
get
{
foreach (var engine in Enum.GetValues(typeof(BlockCipherEngines)))
{
foreach (var mode in Enum.GetValues(typeof(BlockCipherModes)))
{
yield return new TestCaseData(engine, mode);
}
}
}
}
}
}
}

View File

@@ -0,0 +1,114 @@
using System.Security;
using mRemoteNG.Security;
using mRemoteNG.Security.Authentication;
using mRemoteNG.Security.SymmetricEncryption;
using NUnit.Framework;
namespace mRemoteNGTests.Security.Authentication
{
public class PasswordAuthenticatorTests
{
private PasswordAuthenticator _authenticator;
private readonly SecureString _correctPassword = "9theCorrectPass#5".ConvertToSecureString();
private readonly SecureString _wrongPassword = "wrongPassword".ConvertToSecureString();
[SetUp]
public void Setup()
{
var cryptoProvider = new AeadCryptographyProvider {KeyDerivationIterations = 10000};
const string cipherText = "MPELiwk7+xeNlruIyt5uxTvVB+/RLVoLdUGnwY4CWCqwKe7T2IBwWo4oaKum5hdv7447g5m2nZsYPrfARSlotQB4r1KZQg==";
_authenticator = new PasswordAuthenticator(cryptoProvider, cipherText);
}
[TearDown]
public void Teardown()
{
_authenticator = null;
}
[Test]
public void AuthenticatingWithCorrectPasswordReturnsTrue()
{
var authenticated = _authenticator.Authenticate(_correctPassword);
Assert.That(authenticated);
}
[Test]
public void AuthenticatingWithWrongPasswordReturnsFalse()
{
var authenticated = _authenticator.Authenticate(_wrongPassword);
Assert.That(!authenticated);
}
[Test]
public void AuthenticationRequestorIsCalledWhenInitialPasswordIsWrong()
{
var wasCalled = false;
_authenticator.AuthenticationRequestor = () =>
{
wasCalled = true;
return _correctPassword;
};
_authenticator.Authenticate(_wrongPassword);
Assert.That(wasCalled);
}
[Test]
public void AuthenticationRequestorNotCalledWhenInitialPasswordIsCorrect()
{
var wasCalled = false;
_authenticator.AuthenticationRequestor = () =>
{
wasCalled = true;
return _correctPassword;
};
_authenticator.Authenticate(_correctPassword);
Assert.That(!wasCalled);
}
[Test]
public void ProvidingCorrectPasswordToTheAuthenticationRequestorReturnsTrue()
{
_authenticator.AuthenticationRequestor = () => _correctPassword;
var authenticated = _authenticator.Authenticate(_wrongPassword);
Assert.That(authenticated);
}
[Test]
public void AuthenticationFailsWhenAuthenticationRequestorGivenEmptyPassword()
{
_authenticator.AuthenticationRequestor = () => new SecureString();
var authenticated = _authenticator.Authenticate(_wrongPassword);
Assert.That(!authenticated);
}
[Test]
public void AuthenticatorRespectsMaxAttempts()
{
var authAttempts = 0;
_authenticator.AuthenticationRequestor = () =>
{
authAttempts++;
return _wrongPassword;
};
_authenticator.Authenticate(_wrongPassword);
Assert.That(authAttempts == _authenticator.MaxAttempts);
}
[Test]
public void AuthenticatorRespectsMaxAttemptsCustomValue()
{
const int customMaxAttempts = 5;
_authenticator.MaxAttempts = customMaxAttempts;
var authAttempts = 0;
_authenticator.AuthenticationRequestor = () =>
{
authAttempts++;
return _wrongPassword;
};
_authenticator.Authenticate(_wrongPassword);
Assert.That(authAttempts == customMaxAttempts);
}
}
}

View File

@@ -1,4 +1,7 @@
using mRemoteNG.Security;
using System;
using System.Collections;
using mRemoteNG.Security;
using mRemoteNG.Security.SymmetricEncryption;
using NUnit.Framework;
@@ -21,92 +24,42 @@ namespace mRemoteNGTests.Security
_cryptographyProviderFactory = null;
}
[Test]
public void CanCreateAesGcm()
[TestCaseSource(typeof(TestCaseSources), nameof(TestCaseSources.AllEngineAndModeCombos))]
public void CanCreateAeadProvidersWithCorrectEngine(BlockCipherEngines engine, BlockCipherModes mode)
{
var engine = BlockCipherEngines.AES;
var mode = BlockCipherModes.GCM;
var cryptoProvider = _cryptographyProviderFactory.CreateAeadCryptographyProvider(engine, mode);
Assert.That(cryptoProvider.CipherEngine, Is.EqualTo($"{engine}/{mode}"));
Assert.That(cryptoProvider.CipherEngine, Is.EqualTo(engine));
}
[Test]
public void CanCreateAesCcm()
[TestCaseSource(typeof(TestCaseSources), nameof(TestCaseSources.AllEngineAndModeCombos))]
public void CanCreateAeadProvidersWithCorrectMode(BlockCipherEngines engine, BlockCipherModes mode)
{
var engine = BlockCipherEngines.AES;
var mode = BlockCipherModes.CCM;
var cryptoProvider = _cryptographyProviderFactory.CreateAeadCryptographyProvider(engine, mode);
Assert.That(cryptoProvider.CipherEngine, Is.EqualTo($"{engine}/{mode}"));
}
[Test]
public void CanCreateAesEax()
{
var engine = BlockCipherEngines.AES;
var mode = BlockCipherModes.EAX;
var cryptoProvider = _cryptographyProviderFactory.CreateAeadCryptographyProvider(engine, mode);
Assert.That(cryptoProvider.CipherEngine, Is.EqualTo($"{engine}/{mode}"));
}
[Test]
public void CanCreateSerpentGcm()
{
var engine = BlockCipherEngines.Serpent;
var mode = BlockCipherModes.GCM;
var cryptoProvider = _cryptographyProviderFactory.CreateAeadCryptographyProvider(engine, mode);
Assert.That(cryptoProvider.CipherEngine, Is.EqualTo($"{engine}/{mode}"));
}
[Test]
public void CanCreateSerpentCcm()
{
var engine = BlockCipherEngines.Serpent;
var mode = BlockCipherModes.CCM;
var cryptoProvider = _cryptographyProviderFactory.CreateAeadCryptographyProvider(engine, mode);
Assert.That(cryptoProvider.CipherEngine, Is.EqualTo($"{engine}/{mode}"));
}
[Test]
public void CanCreateSerpentEax()
{
var engine = BlockCipherEngines.Serpent;
var mode = BlockCipherModes.EAX;
var cryptoProvider = _cryptographyProviderFactory.CreateAeadCryptographyProvider(engine, mode);
Assert.That(cryptoProvider.CipherEngine, Is.EqualTo($"{engine}/{mode}"));
}
[Test]
public void CanCreateTwofishCcm()
{
var engine = BlockCipherEngines.Twofish;
var mode = BlockCipherModes.CCM;
var cryptoProvider = _cryptographyProviderFactory.CreateAeadCryptographyProvider(engine, mode);
Assert.That(cryptoProvider.CipherEngine, Is.EqualTo($"{engine}/{mode}"));
}
[Test]
public void CanCreateTwofishEax()
{
var engine = BlockCipherEngines.Twofish;
var mode = BlockCipherModes.EAX;
var cryptoProvider = _cryptographyProviderFactory.CreateAeadCryptographyProvider(engine, mode);
Assert.That(cryptoProvider.CipherEngine, Is.EqualTo($"{engine}/{mode}"));
}
[Test]
public void CanCreateTwofishGcm()
{
var engine = BlockCipherEngines.Twofish;
var mode = BlockCipherModes.GCM;
var cryptoProvider = _cryptographyProviderFactory.CreateAeadCryptographyProvider(engine, mode);
Assert.That(cryptoProvider.CipherEngine, Is.EqualTo($"{engine}/{mode}"));
Assert.That(cryptoProvider.CipherMode, Is.EqualTo(mode));
}
[Test]
public void CanCreateLegacyRijndael()
{
var cryptoProvider = _cryptographyProviderFactory.CreateLegacyRijndaelCryptographyProvider();
Assert.That(cryptoProvider.CipherEngine, Is.EqualTo("Rijndael"));
Assert.That(cryptoProvider, Is.TypeOf<LegacyRijndaelCryptographyProvider>());
}
private class TestCaseSources
{
public static IEnumerable AllEngineAndModeCombos
{
get
{
foreach (var engine in Enum.GetValues(typeof(BlockCipherEngines)))
{
foreach (var mode in Enum.GetValues(typeof(BlockCipherModes)))
{
yield return new TestCaseData(engine, mode);
}
}
}
}
}
}
}

View File

@@ -0,0 +1,91 @@
using System;
using mRemoteNG.Security.KeyDerivation;
using NUnit.Framework;
namespace mRemoteNGTests.Security.KeyDerivation
{
public class Pkcs5S2KeyGeneratorTests
{
[Test]
public void DefaultConstructorThrowsNoException()
{
// ReSharper disable once ObjectCreationAsStatement
Assert.DoesNotThrow(() => new Pkcs5S2KeyGenerator());
}
[Test]
public void CreatingGeneratorWithLowIterationCountThrowsError()
{
// ReSharper disable once ObjectCreationAsStatement
Assert.Throws<ArgumentOutOfRangeException>(() => new Pkcs5S2KeyGenerator(256, 999));
}
[Test]
public void CreatingGeneratorWithNegativeKeyBitSizeThrowsError()
{
// ReSharper disable once ObjectCreationAsStatement
Assert.Throws<ArgumentOutOfRangeException>(() => new Pkcs5S2KeyGenerator(-1));
}
[Test]
public void IdenticalParametersProduceIdenticalKeys()
{
var keyDerivationFunction = new Pkcs5S2KeyGenerator();
var key1 = keyDerivationFunction.DeriveKey("", new byte[0]);
var key2 = keyDerivationFunction.DeriveKey("", new byte[0]);
Assert.That(key1, Is.EquivalentTo(key2));
}
[Test]
public void DifferingIterationsProduceDifferingKeys()
{
var keyDerivationFunction1 = new Pkcs5S2KeyGenerator(256, 1001);
var keyDerivationFunction2 = new Pkcs5S2KeyGenerator(256, 1002);
var key1 = keyDerivationFunction1.DeriveKey("", new byte[0]);
var key2 = keyDerivationFunction2.DeriveKey("", new byte[0]);
Assert.That(key1, Is.Not.EquivalentTo(key2));
}
[Test]
public void DifferingKeysizeProduceDifferingKeys()
{
var keyDerivationFunction1 = new Pkcs5S2KeyGenerator();
var keyDerivationFunction2 = new Pkcs5S2KeyGenerator(512);
var key1 = keyDerivationFunction1.DeriveKey("", new byte[0]);
var key2 = keyDerivationFunction2.DeriveKey("", new byte[0]);
Assert.That(key1, Is.Not.EquivalentTo(key2));
}
[Test]
public void DifferingPasswordsProduceDifferingKeys()
{
var keyDerivationFunction = new Pkcs5S2KeyGenerator();
var key1 = keyDerivationFunction.DeriveKey("a", new byte[0]);
var key2 = keyDerivationFunction.DeriveKey("b", new byte[0]);
Assert.That(key1, Is.Not.EquivalentTo(key2));
}
[Test]
public void DifferingSaltsProduceDifferingKeys()
{
var keyDerivationFunction = new Pkcs5S2KeyGenerator();
var key1 = keyDerivationFunction.DeriveKey("", new byte[0]);
var key2 = keyDerivationFunction.DeriveKey("", new byte[] {1});
Assert.That(key1, Is.Not.EquivalentTo(key2));
}
[TestCase(0)]
[TestCase(1)]
[TestCase(8)]
[TestCase(9)]
[TestCase(256)]
[TestCase(333)]
public void KeyLengthIsKeyBitSizeDividedBy8(int keyBitSize)
{
var keyDerivationFunction = new Pkcs5S2KeyGenerator(keyBitSize);
var key = keyDerivationFunction.DeriveKey("", new byte[0]);
Assert.That(key.Length, Is.EqualTo(keyBitSize / 8));
}
}
}

View File

@@ -2,16 +2,18 @@
using mRemoteNG.Security;
using mRemoteNG.Security.SymmetricEncryption;
using NUnit.Framework;
using NUnit.Framework.Constraints;
namespace mRemoteNGTests.Security
{
[TestFixture()]
public class LegacyRijndaelCryptographyProviderTests
{
private ICryptographyProvider _rijndaelCryptographyProvider;
private SecureString _encryptionKey;
private string _plainText;
private const string CipherText = "RmV7zw/a7ZRRzZdcTkrLDgBfyEmeh8OFMgg2OKFJnwg=";
[SetUp]
public void SetUp()
@@ -55,5 +57,33 @@ namespace mRemoteNGTests.Security
var cipherText2 = _rijndaelCryptographyProvider.Encrypt(_plainText, _encryptionKey);
Assert.That(cipherText1, Is.Not.EqualTo(cipherText2));
}
[Test]
public void DecryptingFromPreviousApplicationExecutionWorks()
{
var decryptedCipherText = _rijndaelCryptographyProvider.Decrypt(CipherText, _encryptionKey);
Assert.That(decryptedCipherText, Is.EqualTo(_plainText));
}
[Test]
public void DecryptionFailureThrowsException()
{
ActualValueDelegate<string> decryptMethod = () => _rijndaelCryptographyProvider.Decrypt(CipherText, "wrongKey".ConvertToSecureString());
Assert.That(decryptMethod, Throws.TypeOf<EncryptionException>());
}
[Test]
public void EncryptingEmptyStringReturnsEmptyString()
{
var cipherText = _rijndaelCryptographyProvider.Encrypt("", _encryptionKey);
Assert.That(cipherText, Is.EqualTo(""));
}
[Test]
public void DecryptingEmptyStringReturnsEmptyString()
{
var decryptedCipherText = _rijndaelCryptographyProvider.Decrypt("", _encryptionKey);
Assert.That(decryptedCipherText, Is.EqualTo(""));
}
}
}

View File

@@ -0,0 +1,41 @@
using System;
using System.Security;
using mRemoteNG.Security;
using NUnit.Framework;
namespace mRemoteNGTests.Security
{
public class SecureStringExtensionsTests
{
[Test]
public void ConvertToSecureString()
{
var securedString = "MySecureString".ConvertToSecureString();
Assert.That(securedString.Length, Is.GreaterThan(0));
}
[Test]
public void ConvertToUnsecureString()
{
var originalText = "MySecureString";
var securedString = originalText.ConvertToSecureString();
var unsecuredString = securedString.ConvertToUnsecureString();
Assert.That(unsecuredString, Is.EqualTo(originalText));
}
[Test]
public void ConvertToSecureStringOnNullStringThrowsException()
{
string myString = null;
Assert.Throws<ArgumentNullException>(() => myString.ConvertToSecureString());
}
[Test]
public void ConvertToUnsecureStringOnNullStringThrowsException()
{
SecureString secureString = null;
Assert.Throws<ArgumentNullException>(() => secureString.ConvertToUnsecureString());
}
}
}

View File

@@ -0,0 +1,105 @@
using System;
using System.Collections;
using mRemoteNG.Connection;
using mRemoteNG.Tools;
using NUnit.Framework;
namespace mRemoteNGTests.Tools
{
public class ExternalToolsArgumentParserTests
{
private ExternalToolArgumentParser _argumentParser;
private const string TestString = @"()%!^abc123*<>&|""'\";
private const string StringAfterMetacharacterEscaping = @"^(^)^%^!^^abc123*^<^>^&^|^""'\";
private const string StringAfterAllEscaping = @"^(^)^%^!^^abc123*^<^>^&^|\^""'\";
private const string StringAfterNoEscaping = TestString;
private const int Port = 9933;
private const string PortAsString = "9933";
private const string SampleCommandString = @"/k echo ()%!^abc123*<>&|""'\";
[OneTimeSetUp]
public void Setup()
{
var connectionInfo = new ConnectionInfo
{
Name = TestString,
Hostname = TestString,
Port = Port,
Username = TestString,
Password = TestString,
Domain = TestString,
Description = TestString,
MacAddress = TestString,
UserField = TestString
};
_argumentParser = new ExternalToolArgumentParser(connectionInfo);
}
[OneTimeTearDown]
public void Teardown()
{
_argumentParser = null;
}
[TestCaseSource(typeof(ParserTestsDataSource), nameof(ParserTestsDataSource.TestCases))]
public string ParserTests(string argumentString)
{
return _argumentParser.ParseArguments(argumentString);
}
[Test]
public void NullConnectionInfoResultsInEmptyVariables()
{
var parser = new ExternalToolArgumentParser(null);
var parsedText = parser.ParseArguments("test %USERNAME% test");
Assert.That(parsedText, Is.EqualTo("test test"));
}
private class ParserTestsDataSource
{
public static IEnumerable TestCases
{
get
{
yield return new TestCaseData("%NAME%").Returns(StringAfterAllEscaping);
yield return new TestCaseData("%-NAME%").Returns(StringAfterMetacharacterEscaping);
yield return new TestCaseData("%!NAME%").Returns(StringAfterNoEscaping);
yield return new TestCaseData("%HOSTNAME%").Returns(StringAfterAllEscaping);
yield return new TestCaseData("%-HOSTNAME%").Returns(StringAfterMetacharacterEscaping);
yield return new TestCaseData("%!HOSTNAME%").Returns(StringAfterNoEscaping);
yield return new TestCaseData("%PORT%").Returns(PortAsString);
yield return new TestCaseData("%-PORT%").Returns(PortAsString);
yield return new TestCaseData("%!PORT%").Returns(PortAsString);
yield return new TestCaseData("%USERNAME%").Returns(StringAfterAllEscaping);
yield return new TestCaseData("%-USERNAME%").Returns(StringAfterMetacharacterEscaping);
yield return new TestCaseData("%!USERNAME%").Returns(StringAfterNoEscaping);
yield return new TestCaseData("%PASSWORD%").Returns(StringAfterAllEscaping);
yield return new TestCaseData("%-PASSWORD%").Returns(StringAfterMetacharacterEscaping);
yield return new TestCaseData("%!PASSWORD%").Returns(StringAfterNoEscaping);
yield return new TestCaseData("%DOMAIN%").Returns(StringAfterAllEscaping);
yield return new TestCaseData("%-DOMAIN%").Returns(StringAfterMetacharacterEscaping);
yield return new TestCaseData("%!DOMAIN%").Returns(StringAfterNoEscaping);
yield return new TestCaseData("%DESCRIPTION%").Returns(StringAfterAllEscaping);
yield return new TestCaseData("%-DESCRIPTION%").Returns(StringAfterMetacharacterEscaping);
yield return new TestCaseData("%!DESCRIPTION%").Returns(StringAfterNoEscaping);
yield return new TestCaseData("%MACADDRESS%").Returns(StringAfterAllEscaping);
yield return new TestCaseData("%-MACADDRESS%").Returns(StringAfterMetacharacterEscaping);
yield return new TestCaseData("%!MACADDRESS%").Returns(StringAfterNoEscaping);
yield return new TestCaseData("%USERFIELD%").Returns(StringAfterAllEscaping);
yield return new TestCaseData("%-USERFIELD%").Returns(StringAfterMetacharacterEscaping);
yield return new TestCaseData("%!USERFIELD%").Returns(StringAfterNoEscaping);
yield return new TestCaseData("%%") {TestName = "EmptyVariableTagsNotParsed" }.Returns("%%");
yield return new TestCaseData("/k echo %!USERNAME%") { TestName = "ParsingWorksWhenVariableIsNotInFirstPosition" }.Returns(SampleCommandString);
yield return new TestCaseData("%COMSPEC%") { TestName = "EnvironmentVariablesParsed" }.Returns(Environment.GetEnvironmentVariable("comspec"));
yield return new TestCaseData("%UNSUPPORTEDPARAMETER%") { TestName = "UnsupportedParametersNotParsed" }.Returns("%UNSUPPORTEDPARAMETER%");
yield return new TestCaseData(@"\%COMSPEC\%") { TestName = "BackslashEscapedEnvironmentVariablesParsed" }.Returns(Environment.GetEnvironmentVariable("comspec"));
yield return new TestCaseData(@"^%COMSPEC^%") { TestName = "ChevronEscapedEnvironmentVariablesNotParsed" }.Returns("%COMSPEC%");
}
}
}
}
}

View File

@@ -0,0 +1,287 @@
using System.Windows.Forms;
using BrightIdeasSoftware;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Tree;
using mRemoteNG.Tree.Root;
using NUnit.Framework;
namespace mRemoteNGTests.Tree
{
public class ConnectionTreeDragAndDropHandlerTests
{
private ConnectionTreeDragAndDropHandler _dragAndDropHandler;
private RootNodeInfo _rootNode;
private ContainerInfo _container1;
private ContainerInfo _container2;
private ContainerInfo _container3;
private ConnectionInfo _connection1;
private ConnectionInfo _connection2;
private ConnectionInfo _connection3;
private ConnectionInfo _connection4;
private ConnectionInfo _connection5;
[SetUp]
public void Setup()
{
_dragAndDropHandler = new ConnectionTreeDragAndDropHandler();
InitializeNodes();
CreateSimpleTreeModel();
}
[TearDown]
public void Teardown()
{
_dragAndDropHandler = null;
DestroyNodes();
}
[Test]
public void CanDragConnectionOntoContainer()
{
var source = _connection3;
var target = _container1;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.Move));
}
[Test]
public void CanDragContainerOntoContainer()
{
var source = _container1;
var target = _container2;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.Move));
}
[Test]
public void CanDragContainerBetweenContainers()
{
var source = _container3;
var target = _container2;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.AboveItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.Move));
}
[Test]
public void CanDragConnectionBetweenConnections()
{
var source = _connection1;
var target = _connection4;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.AboveItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.Move));
}
[Test]
public void CantDragConnectionOntoItself()
{
var source = _connection1;
var target = _connection1;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragContainerOntoItself()
{
var source = _container1;
var target = _container1;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragContainerOntoItsChild()
{
var source = _container2;
var target = _container3;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragContainerBetweenItsChildren()
{
var source = _container3;
var target = _connection4;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.BelowItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragNodeOntoItsCurrentParent()
{
var source = _container3;
var target = _container2;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragRootNodeInfo()
{
var source = _rootNode;
var target = new ContainerInfo();
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragNodeAboveRootNodeInfo()
{
var source = _connection1;
var target = _rootNode;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.AboveItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragNodeBelowRootNodeInfo()
{
var source = _connection1;
var target = _rootNode;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.BelowItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragPuttySessionInfo()
{
var source = new PuttySessionInfo();
var target = _container2;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragConnectionOntoRootPuttySessionNode()
{
var source = _connection1;
var target = new RootPuttySessionsNodeInfo();
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragContainerOntoRootPuttySessionNode()
{
var source = _container1;
var target = new RootPuttySessionsNodeInfo();
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragNodeAbovePuttySessionNodes()
{
var source = _connection1;
var target = new PuttySessionInfo();
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.AboveItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragNodeBelowPuttySessionNodes()
{
var source = _connection1;
var target = new PuttySessionInfo();
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.BelowItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void DraggingNodeBelowSiblingRearrangesTheUnderlyingModelCorrectly()
{
var source = _connection3;
var target = _connection5;
var location = DropTargetLocation.BelowItem;
_dragAndDropHandler.DropModel(source, target, location);
var actualIndex = _container3.Children.IndexOf(source);
var expectedIndex = _container3.Children.IndexOf(target) + 1;
Assert.That(actualIndex, Is.EqualTo(expectedIndex));
}
[Test]
public void DraggingNodeAboveSiblingRearrangesTheUnderlyingModelCorrectly()
{
var source = _connection3;
var target = _connection5;
var location = DropTargetLocation.AboveItem;
_dragAndDropHandler.DropModel(source, target, location);
var actualIndex = _container3.Children.IndexOf(source);
var expectedIndex = _container3.Children.IndexOf(target) - 1;
Assert.That(actualIndex, Is.EqualTo(expectedIndex));
}
[Test]
public void DraggingNodeToNewContainerAddsNodeToTheNewContainer()
{
var source = _connection3;
var target = _container1;
var location = DropTargetLocation.Item;
_dragAndDropHandler.DropModel(source, target, location);
Assert.That(target.Children.Contains(source));
}
[Test]
public void DraggingNodeToNewContainerRemovesNodeFromOldContainer()
{
var source = _connection3;
var target = _container1;
var location = DropTargetLocation.Item;
_dragAndDropHandler.DropModel(source, target, location);
Assert.That(!_container3.Children.Contains(source));
}
private void InitializeNodes()
{
_rootNode = new RootNodeInfo(RootNodeType.Connection);
_container1 = new ContainerInfo();
_container2 = new ContainerInfo();
_container3 = new ContainerInfo();
_connection1 = new ConnectionInfo();
_connection2 = new ConnectionInfo();
_connection3 = new ConnectionInfo();
_connection4 = new ConnectionInfo();
_connection5 = new ConnectionInfo();
}
private void CreateSimpleTreeModel()
{
/*
* Root
* |-- container1
* | L-- connection1
* L-- container2
* |-- container3
* | |-- connection3
* | |-- connection4
* | L-- connection5
* L-- connection2
*/
_rootNode.AddChild(_container1);
_rootNode.AddChild(_container2);
_container1.AddChild(_connection1);
_container2.AddChild(_container3);
_container2.AddChild(_connection2);
_container3.AddChild(_connection3);
_container3.AddChild(_connection4);
_container3.AddChild(_connection5);
}
private void DestroyNodes()
{
_rootNode = null;
_container1 = null;
_container2 = null;
_container3 = null;
_connection1 = null;
_connection2 = null;
_connection3 = null;
_connection4 = null;
_connection5 = null;
}
}
}

View File

@@ -0,0 +1,40 @@
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Tree;
using NUnit.Framework;
namespace mRemoteNGTests.Tree
{
public class ConnectionTreeModelTests
{
private ConnectionTreeModel _connectionTreeModel;
[SetUp]
public void Setup()
{
_connectionTreeModel = new ConnectionTreeModel();
}
[TearDown]
public void Teardown()
{
_connectionTreeModel = null;
}
[Test]
public void GetChildListProvidesAllChildren()
{
var root = new ContainerInfo();
var folder1 = new ContainerInfo();
var folder2 = new ContainerInfo();
var con1 = new ConnectionInfo();
root.AddChild(folder1);
folder1.AddChild(folder2);
root.AddChild(con1);
_connectionTreeModel.AddRootNode(root);
var connectionList = _connectionTreeModel.GetRecursiveChildList(root);
Assert.That(connectionList, Is.EquivalentTo(new[] {folder1,folder2,con1}));
}
}
}

View File

@@ -0,0 +1,94 @@
using System.Linq;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Tree;
using mRemoteNG.Tree.Root;
using NUnit.Framework;
namespace mRemoteNGTests.Tree
{
public class NodeSearcherTests
{
private NodeSearcher _nodeSearcher;
private ContainerInfo _folder1;
private ContainerInfo _folder2;
private ConnectionInfo _con1;
private ConnectionInfo _con2;
private ConnectionInfo _con3;
private ConnectionInfo _con4;
private ConnectionInfo _con5;
[OneTimeSetUp]
public void OnetimeSetup()
{
var connectionTreeModel = SetupConnectionTreeModel();
_nodeSearcher = new NodeSearcher(connectionTreeModel);
}
[Test]
public void SearchByNameReturnsAllExpectedMatches()
{
var matches = _nodeSearcher.SearchByName("folder");
Assert.That(matches.ToList(), Is.EquivalentTo(new[] {_folder1, _folder2}));
}
[Test]
public void NextMatchAdvancesTheIterator()
{
_nodeSearcher.SearchByName("folder");
var match1 = _nodeSearcher.CurrentMatch;
var match2 = _nodeSearcher.NextMatch();
Assert.That(match1, Is.Not.EqualTo(match2));
}
[Test]
public void PreviousMatchRollsBackTheIterator()
{
_nodeSearcher.SearchByName("con");
var match1 = _nodeSearcher.CurrentMatch;
_nodeSearcher.NextMatch();
var match2 = _nodeSearcher.PreviousMatch();
Assert.That(match1, Is.EqualTo(match2));
}
[Test]
public void SearchingWithEmptyStringReturnsNoMatches()
{
var matches = _nodeSearcher.SearchByName("");
Assert.That(matches.Count(), Is.EqualTo(0));
}
private ConnectionTreeModel SetupConnectionTreeModel()
{
/*
* Tree:
* Root
* |--- folder1
* | |--- con1
* | L--- con2
* |--- folder2
* | |--- con3
* | L--- con4
* L--- con5
*
*/
var connectionTreeModel = new ConnectionTreeModel();
var root = new RootNodeInfo(RootNodeType.Connection);
_folder1 = new ContainerInfo { Name = "folder1"};
_con1 = new ConnectionInfo { Name = "con1"};
_con2 = new ConnectionInfo { Name = "con2"};
_folder2 = new ContainerInfo { Name = "folder2" };
_con3 = new ConnectionInfo { Name = "con3" };
_con4 = new ConnectionInfo { Name = "con4" };
_con5 = new ConnectionInfo { Name = "con5" };
connectionTreeModel.AddRootNode(root);
root.AddChildRange(new [] { _folder1, _folder2, _con5 });
_folder1.AddChildRange(new [] { _con1, _con2 });
_folder2.AddChildRange(new[] { _con3, _con4 });
return connectionTreeModel;
}
}
}

View File

@@ -0,0 +1,50 @@
using mRemoteNG.Tree.Root;
using NUnit.Framework;
namespace mRemoteNGTests.Tree
{
public class RootNodeInfoTests
{
private RootNodeInfo _rootNodeInfo;
[SetUp]
public void Setup()
{
_rootNodeInfo = new RootNodeInfo(RootNodeType.Connection);
}
[Test]
public void DefaultPasswordReturnsExpectedValue()
{
var defaultPassword = _rootNodeInfo.DefaultPassword;
Assert.That(defaultPassword, Is.EqualTo("mR3m"));
}
[TestCase("a", true)]
[TestCase("mR3m", false)]
[TestCase("", false)]
[TestCase(null, false)]
public void PasswordPropertyReflectsWhetherACustomPasswordIsInUse(string password, bool expected)
{
_rootNodeInfo.PasswordString = password;
Assert.That(_rootNodeInfo.Password, Is.EqualTo(expected));
}
[TestCase("")]
[TestCase(null)]
public void PasswordStringReturnsDefaultPasswordWhenNoCustomOneIsSet(string password)
{
_rootNodeInfo.PasswordString = password;
Assert.That(_rootNodeInfo.PasswordString, Is.EqualTo(_rootNodeInfo.DefaultPassword));
}
[TestCase("a")]
[TestCase("1234")]
public void PasswordStringReturnsCustomPassword(string password)
{
_rootNodeInfo.PasswordString = password;
Assert.That(_rootNodeInfo.PasswordString, Is.EqualTo(password));
}
}
}

View File

@@ -1,33 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using mRemoteNG.Controls;
using NUnit.Framework;
using NUnit.Extensions.Forms;
using System.Windows.Forms;
namespace mRemoteNGTests.UI.Controls
{
public class CustomListViewTests
{
mRemoteNG.Controls.ListView _listView;
[SetUp]
public void Setup()
{
_listView = new mRemoteNG.Controls.ListView();
_listView.Name = "myTestListView";
_listView.View = System.Windows.Forms.View.Tile;
}
[TearDown]
public void Teardown()
{
_listView.Dispose();
while (_listView.Disposing) ;
_listView = null;
}
}
}

View File

@@ -1,11 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using NUnit.Framework;
using NUnit.Extensions.Forms;
using System.Threading.Tasks;
using mRemoteNG.Forms;
using mRemoteNG.UI.Forms;
namespace mRemoteNGTests.UI.Forms
@@ -26,7 +20,9 @@ namespace mRemoteNGTests.UI.Forms
public void Teardown()
{
_passwordForm.Dispose();
while (_passwordForm.Disposing) ;
while (_passwordForm.Disposing)
{
}
_passwordForm = null;
}

View File

@@ -66,18 +66,23 @@
<HintPath>..\packages\NSubstitute.1.10.0.0\lib\net45\NSubstitute.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="nunit.framework, Version=3.4.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.4.1\lib\net45\nunit.framework.dll</HintPath>
<Reference Include="nunit.framework, Version=3.5.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.5.0\lib\net45\nunit.framework.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NUnitForms">
<HintPath>nUnitForms\bin\NUnitForms.dll</HintPath>
</Reference>
<Reference Include="ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4, processorArchitecture=MSIL">
<HintPath>..\packages\ObjectListView.Official.2.9.1\lib\net20\ObjectListView.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="WeifenLuo.WinFormsUI.Docking, Version=2.9.0.0, Culture=neutral, PublicKeyToken=5cded1a1a0a7b481, processorArchitecture=MSIL">
<HintPath>..\packages\DockPanelSuite.2.10.0\lib\net40\WeifenLuo.WinFormsUI.Docking.dll</HintPath>
<Private>True</Private>
@@ -86,6 +91,7 @@
<HintPath>..\packages\DockPanelSuite.ThemeVS2012Light.2.10.0\lib\net40\WeifenLuo.WinFormsUI.Docking.ThemeVS2012Light.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="WindowsBase" />
</ItemGroup>
<Choose>
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
@@ -102,17 +108,46 @@
<ItemGroup>
<Compile Include="App\LoggerTests.cs" />
<Compile Include="BinaryFileTests.cs" />
<Compile Include="Config\Serializers\DataTableSerializerTests.cs" />
<Compile Include="Config\Serializers\PortScanDeserializerTests.cs" />
<Compile Include="Config\Serializers\PuttyConnectionManagerDeserializerTests.cs" />
<Compile Include="Config\Serializers\XmlConnectionNodeSerializerTests.cs" />
<Compile Include="Config\Serializers\XmlConnectionsDeserializerTests.cs" />
<Compile Include="Config\Serializers\RemoteDesktopConnectionDeserializerTests.cs" />
<Compile Include="Config\Serializers\RemoteDesktopConnectionManagerDeserializerTests.cs" />
<Compile Include="Config\Serializers\XmlConnectionsDocumentCompilerTests.cs" />
<Compile Include="Config\Serializers\XmlConnectionsDocumentEncryptorTests.cs" />
<Compile Include="Config\Serializers\XmlConnectionsSerializerTests.cs" />
<Compile Include="Config\Serializers\XmlRootNodeSerializerTests.cs" />
<Compile Include="Connection\AbstractConnectionInfoDataTests.cs" />
<Compile Include="Connection\ConnectionInfoComparerTests.cs" />
<Compile Include="Connection\Protocol\ProtocolListTests.cs" />
<Compile Include="IntegrationTests\XmlSerializationLifeCycleTests.cs" />
<Compile Include="Security\Authentication\PasswordAuthenticatorTests.cs" />
<Compile Include="Security\KeyDerivation\Pkcs5S2KeyGeneratorTests.cs" />
<Compile Include="Security\SecureStringExtensionsTests.cs" />
<Compile Include="Tools\ExternalToolsArgumentParserTests.cs" />
<Compile Include="Tree\ConnectionTreeDragAndDropHandlerTests.cs" />
<Compile Include="Tree\ConnectionTreeModelTests.cs" />
<Compile Include="Connection\ConnectionInfoInheritanceTests.cs" />
<Compile Include="Connection\ConnectionInfoTests.cs" />
<Compile Include="Connection\DefaultConnectionInfoTests.cs" />
<Compile Include="Connection\DefaultConnectionInheritanceTests.cs" />
<Compile Include="Container\ContainerInfoTests.cs" />
<Compile Include="IntegrationTests\ConnectionInheritanceIntegrationTests.cs" />
<Compile Include="ListViewTester.cs" />
<Compile Include="Config\Connections\SqlConnectionUpdateCheckerTests.cs" />
<Compile Include="Config\Connections\SqlUpdateQueryBuilderTest.cs" />
<Compile Include="Config\Connections\SqlUpdateTimerTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Security\AeadCryptographyProviderTests.cs" />
<Compile Include="Security\CryptographyProviderFactoryTests.cs" />
<Compile Include="Security\EncryptedSecureStringTests.cs" />
<Compile Include="Security\LegacyRijndaelCryptographyProviderTests.cs" />
<Compile Include="UI\Controls\CustomListViewTests.cs" />
<Compile Include="Tree\NodeSearcherTests.cs" />
<Compile Include="Tree\RootNodeInfoTests.cs" />
<Compile Include="UI\Controls\TestForm.cs">
<SubType>Form</SubType>
</Compile>
@@ -133,10 +168,39 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="UI\Controls\TestForm.resx">
<DependentUpon>TestForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="Resources\confCons_v2_5.xml" />
<None Include="Resources\test_puttyConnectionManager_database.dat" />
<None Include="Resources\test_rdcman_badVersionNumber.rdg" />
<None Include="Resources\test_rdcman_noversion.rdg" />
<None Include="Resources\test_rdcman_v2_2_badschemaversion.rdg" />
<None Include="Resources\test_rdcman_v2_2_schema1.rdg" />
<None Include="Resources\test_RDCMan_v2_7_schema3.rdg" />
<None Include="Resources\test_remotedesktopconnection.rdp" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\confCons_v2_6.xml" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\confCons_v2_6_fullencryption.xml" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\confCons_v2_6_passwordis_Password.xml" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\confCons_v2_6_passwordis_Password_fullencryption.xml" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\confCons_v2_6_5k-iterations.xml" />
</ItemGroup>
<Choose>
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
<ItemGroup>

View File

@@ -4,5 +4,6 @@
<package id="DockPanelSuite" version="2.10.0" targetFramework="net45" />
<package id="DockPanelSuite.ThemeVS2012Light" version="2.10.0" targetFramework="net45" />
<package id="NSubstitute" version="1.10.0.0" targetFramework="net45" />
<package id="NUnit" version="3.4.1" targetFramework="net45" />
<package id="NUnit" version="3.5.0" targetFramework="net45" />
<package id="ObjectListView.Official" version="2.9.1" targetFramework="net45" />
</packages>

View File

@@ -42,8 +42,10 @@ Global
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|x86.Build.0 = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Portable|x86.ActiveCfg = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug|x86.ActiveCfg = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug|x86.Build.0 = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Portable|x86.ActiveCfg = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release|x86.ActiveCfg = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release|x86.Build.0 = Release|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Portable|x86.ActiveCfg = Debug Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug|x86.ActiveCfg = Debug|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Portable|x86.ActiveCfg = Release Portable|x86

View File

@@ -20,7 +20,7 @@ namespace mRemoteNG.App
{
if (FipsPolicyEnabledForServer2003() || FipsPolicyEnabledForServer2008AndNewer())
{
MessageBox.Show(frmMain.Default, string.Format(Language.strErrorFipsPolicyIncompatible, GeneralAppInfo.ProdName, GeneralAppInfo.ProdName, MessageBoxButtons.OK, MessageBoxIcon.Error));
MessageBox.Show(frmMain.Default, string.Format(Language.strErrorFipsPolicyIncompatible, GeneralAppInfo.ProductName, GeneralAppInfo.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error));
Environment.Exit(1);
}
}
@@ -53,7 +53,7 @@ namespace mRemoteNG.App
{
proccesses = Process.GetProcessesByName("virtscrl");
}
catch (Exception ex)
catch (InvalidOperationException ex)
{
Runtime.MessageCollector.AddExceptionMessage("Error in CheckLenovoAutoScrollUtility", ex);
}

View File

@@ -1,98 +1,102 @@
using System;
using System.Linq;
using System.Windows.Forms;
using mRemoteNG.Forms;
using mRemoteNG.Config.Connections;
using mRemoteNG.Config.DataProviders;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Security;
using mRemoteNG.Tree;
using mRemoteNG.Tree.Root;
using mRemoteNG.UI.Forms;
namespace mRemoteNG.App
{
public class Export
public static class Export
{
public static void ExportToFile(TreeNode rootTreeNode, TreeNode selectedTreeNode)
public static void ExportToFile(ConnectionInfo selectedNode, ConnectionTreeModel connectionTreeModel)
{
try
{
TreeNode exportTreeNode = default(TreeNode);
Security.Save saveSecurity = new Security.Save();
var saveSecurity = new SaveFilter();
using (ExportForm exportForm = new ExportForm())
using (var exportForm = new ExportForm())
{
if (Tree.ConnectionTreeNode.GetNodeType(selectedTreeNode) == Tree.TreeNodeType.Container)
if (selectedNode?.GetTreeNodeType() == TreeNodeType.Container)
exportForm.SelectedFolder = selectedNode as ContainerInfo;
else if (selectedNode?.GetTreeNodeType() == TreeNodeType.Connection)
{
exportForm.SelectedFolder = selectedTreeNode;
}
else if (Tree.ConnectionTreeNode.GetNodeType(selectedTreeNode) == Tree.TreeNodeType.Connection)
{
if (Tree.ConnectionTreeNode.GetNodeType(selectedTreeNode.Parent) == Tree.TreeNodeType.Container)
{
exportForm.SelectedFolder = selectedTreeNode.Parent;
}
exportForm.SelectedConnection = selectedTreeNode;
if (selectedNode.Parent.GetTreeNodeType() == TreeNodeType.Container)
exportForm.SelectedFolder = selectedNode.Parent;
exportForm.SelectedConnection = selectedNode;
}
if (exportForm.ShowDialog(frmMain.Default) != DialogResult.OK)
{
return ;
}
switch (exportForm.Scope)
ConnectionInfo exportTarget;
switch (exportForm.Scope)
{
case mRemoteNG.Forms.ExportForm.ExportScope.SelectedFolder:
exportTreeNode = exportForm.SelectedFolder;
case ExportForm.ExportScope.SelectedFolder:
exportTarget = exportForm.SelectedFolder;
break;
case mRemoteNG.Forms.ExportForm.ExportScope.SelectedConnection:
exportTreeNode = exportForm.SelectedConnection;
case ExportForm.ExportScope.SelectedConnection:
exportTarget = exportForm.SelectedConnection;
break;
default:
exportTreeNode = rootTreeNode;
exportTarget = connectionTreeModel.RootNodes.First(node => node is RootNodeInfo);
break;
}
saveSecurity.Username = exportForm.IncludeUsername;
saveSecurity.Password = exportForm.IncludePassword;
saveSecurity.Domain = exportForm.IncludeDomain;
saveSecurity.Inheritance = exportForm.IncludeInheritance;
saveSecurity.SaveUsername = exportForm.IncludeUsername;
saveSecurity.SavePassword = exportForm.IncludePassword;
saveSecurity.SaveDomain = exportForm.IncludeDomain;
saveSecurity.SaveInheritance = exportForm.IncludeInheritance;
SaveExportFile(exportForm.FileName, exportForm.SaveFormat, exportTreeNode, saveSecurity);
SaveExportFile(exportForm.FileName, exportForm.SaveFormat, saveSecurity, exportTarget);
}
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionMessage(message: "App.Export.ExportToFile() failed.", ex: ex, logOnly: true);
Runtime.MessageCollector.AddExceptionMessage("App.Export.ExportToFile() failed.", ex, logOnly: true);
}
}
private static void SaveExportFile(string fileName, ConnectionsSaver.Format saveFormat, TreeNode rootNode, Security.Save saveSecurity)
private static void SaveExportFile(string fileName, ConnectionsSaver.Format saveFormat, SaveFilter saveFilter, ConnectionInfo exportTarget)
{
try
{
if (Runtime.SQLConnProvider != null)
{
Runtime.SQLConnProvider.Disable();
}
ConnectionsSaver connectionsSave = new ConnectionsSaver();
connectionsSave.Export = true;
connectionsSave.ConnectionFileName = fileName;
connectionsSave.SaveFormat = saveFormat;
connectionsSave.ConnectionList = Runtime.ConnectionList;
connectionsSave.ContainerList = Runtime.ContainerList;
connectionsSave.RootTreeNode = rootNode;
connectionsSave.SaveSecurity = saveSecurity;
connectionsSave.SaveConnections();
ISerializer<string> serializer;
switch (saveFormat)
{
case ConnectionsSaver.Format.mRXML:
var factory = new CryptographyProviderFactory();
var cryptographyProvider = factory.CreateAeadCryptographyProvider(mRemoteNG.Settings.Default.EncryptionEngine, mRemoteNG.Settings.Default.EncryptionBlockCipherMode);
cryptographyProvider.KeyDerivationIterations = Settings.Default.EncryptionKeyDerivationIterations;
serializer = new XmlConnectionsSerializer(cryptographyProvider);
((XmlConnectionsSerializer) serializer).SaveFilter = saveFilter;
break;
case ConnectionsSaver.Format.mRCSV:
serializer = new CsvConnectionsSerializerMremotengFormat();
((CsvConnectionsSerializerMremotengFormat)serializer).SaveFilter = saveFilter;
break;
default:
throw new ArgumentOutOfRangeException(nameof(saveFormat), saveFormat, null);
}
var serializedData = serializer.Serialize(exportTarget);
var fileDataProvider = new FileDataProvider(fileName);
fileDataProvider.Save(serializedData);
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionMessage(string.Format("Export.SaveExportFile(\"{0}\") failed.", fileName), ex);
Runtime.MessageCollector.AddExceptionStackTrace($"Export.SaveExportFile(\"{fileName}\") failed.", ex);
}
finally
{
if (Runtime.SQLConnProvider != null)
{
Runtime.SQLConnProvider.Enable();
}
Runtime.RemoteConnectionsSyncronizer?.Enable();
}
}
}

View File

@@ -1,20 +1,17 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using mRemoteNG.Config.Import;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Container;
using mRemoteNG.Tree;
using mRemoteNG.UI.TaskDialog;
using mRemoteNG.Tools;
namespace mRemoteNG.App
{
public class Import
public static class Import
{
#region Private Enumerations
private enum FileType
{
Unknown = 0,
@@ -25,12 +22,8 @@ namespace mRemoteNG.App
PuttyConnectionManager
}
#endregion
#region Public Methods
public static void ImportFromFile(TreeNode rootTreeNode, TreeNode selectedTreeNode,
bool alwaysUseSelectedTreeNode = false)
public static void ImportFromFile(ContainerInfo importDestinationContainer)
{
try
{
@@ -51,37 +44,32 @@ namespace mRemoteNG.App
openFileDialog.Filter = string.Join("|", fileTypes.ToArray());
if (openFileDialog.ShowDialog() != DialogResult.OK)
{
return;
}
var parentTreeNode = GetParentTreeNode(rootTreeNode, selectedTreeNode, alwaysUseSelectedTreeNode);
if (parentTreeNode == null)
{
return;
}
foreach (var fileName in openFileDialog.FileNames)
{
try
{
IConnectionImporter importer;
// ReSharper disable once SwitchStatementMissingSomeCases
switch (DetermineFileType(fileName))
{
case FileType.mRemoteXml:
Config.Import.mRemoteNG.Import(fileName, parentTreeNode);
importer = new mRemoteNGImporter();
break;
case FileType.RemoteDesktopConnection:
RemoteDesktopConnection.Import(fileName, parentTreeNode);
importer = new RemoteDesktopConnectionImporter();
break;
case FileType.RemoteDesktopConnectionManager:
RemoteDesktopConnectionManager.Import(fileName, parentTreeNode);
importer = new RemoteDesktopConnectionManagerImporter();
break;
case FileType.PuttyConnectionManager:
PuttyConnectionManager.Import(fileName, parentTreeNode);
importer = new PuttyConnectionManagerImporter();
break;
default:
throw new FileFormatException("Unrecognized file format.");
}
importer.Import(fileName, importDestinationContainer);
}
catch (Exception ex)
{
@@ -91,14 +79,7 @@ namespace mRemoteNG.App
}
}
parentTreeNode.Expand();
var parentContainer = (ContainerInfo) parentTreeNode.Tag;
if (parentContainer != null)
{
parentContainer.IsExpanded = true;
}
Runtime.SaveConnectionsBG();
Runtime.SaveConnectionsAsync();
}
}
catch (Exception ex)
@@ -107,60 +88,26 @@ namespace mRemoteNG.App
}
}
public static void ImportFromActiveDirectory(string ldapPath)
public static void ImportFromActiveDirectory(string ldapPath, ContainerInfo importDestinationContainer, bool importSubOU)
{
try
{
var rootTreeNode = ConnectionTree.TreeView.Nodes[0];
var selectedTreeNode = ConnectionTree.TreeView.SelectedNode;
var parentTreeNode = GetParentTreeNode(rootTreeNode, selectedTreeNode);
if (parentTreeNode == null)
{
return;
}
ActiveDirectory.Import(ldapPath, parentTreeNode);
parentTreeNode.Expand();
var parentContainer = (ContainerInfo) parentTreeNode.Tag;
if (parentContainer != null)
{
parentContainer.IsExpanded = true;
}
Runtime.SaveConnectionsBG();
ActiveDirectoryImporter.Import(ldapPath, importDestinationContainer, importSubOU);
Runtime.SaveConnectionsAsync();
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionMessage("App.Import.ImportFromActiveDirectory() failed.", ex,
logOnly: true);
Runtime.MessageCollector.AddExceptionMessage("App.Import.ImportFromActiveDirectory() failed.", ex, logOnly: true);
}
}
public static void ImportFromPortScan(IEnumerable hosts, ProtocolType protocol)
public static void ImportFromPortScan(IEnumerable<ScanHost> hosts, ProtocolType protocol, ContainerInfo importDestinationContainer)
{
try
{
var rootTreeNode = ConnectionTree.TreeView.Nodes[0];
var selectedTreeNode = ConnectionTree.TreeView.SelectedNode;
var parentTreeNode = GetParentTreeNode(rootTreeNode, selectedTreeNode);
if (parentTreeNode == null)
{
return;
}
PortScan.Import(hosts, protocol, parentTreeNode);
parentTreeNode.Expand();
var parentContainer = (ContainerInfo) parentTreeNode.Tag;
if (parentContainer != null)
{
parentContainer.IsExpanded = true;
}
Runtime.SaveConnectionsBG();
var importer = new PortScanImporter(protocol);
importer.Import(hosts, importDestinationContainer);
Runtime.SaveConnectionsAsync();
}
catch (Exception ex)
{
@@ -168,70 +115,14 @@ namespace mRemoteNG.App
logOnly: true);
}
}
#endregion
#region Private Methods
private static TreeNode GetParentTreeNode(TreeNode rootTreeNode, TreeNode selectedTreeNode,
bool alwaysUseSelectedTreeNode = false)
{
TreeNode parentTreeNode;
selectedTreeNode = GetContainerTreeNode(selectedTreeNode);
if (selectedTreeNode == null || selectedTreeNode == rootTreeNode)
{
parentTreeNode = rootTreeNode;
}
else
{
if (alwaysUseSelectedTreeNode)
{
parentTreeNode = GetContainerTreeNode(selectedTreeNode);
}
else
{
CTaskDialog.ShowCommandBox(Application.ProductName, Language.strImportLocationMainInstruction,
Language.strImportLocationContent, "", "", "",
string.Format(Language.strImportLocationCommandButtons, Environment.NewLine, rootTreeNode.Text,
selectedTreeNode.Text), true, ESysIcons.Question, 0);
switch (CTaskDialog.CommandButtonResult)
{
case 0: // Root
parentTreeNode = rootTreeNode;
break;
case 1: // Selected Folder
parentTreeNode = GetContainerTreeNode(selectedTreeNode);
break;
default: // Cancel
parentTreeNode = null;
break;
}
}
}
return parentTreeNode;
}
private static TreeNode GetContainerTreeNode(TreeNode treeNode)
{
if ((ConnectionTreeNode.GetNodeType(treeNode) == TreeNodeType.Root) ||
(ConnectionTreeNode.GetNodeType(treeNode) == TreeNodeType.Container))
{
return treeNode;
}
if (ConnectionTreeNode.GetNodeType(treeNode) == TreeNodeType.Connection)
{
return treeNode.Parent;
}
return null;
}
private static FileType DetermineFileType(string fileName)
{
// TODO: Use the file contents to determine the file type instead of trusting the extension
var fileExtension = Convert.ToString(Path.GetExtension(fileName).ToLowerInvariant());
switch (fileExtension)
var extension = Path.GetExtension(fileName);
if (extension == null) return FileType.Unknown;
switch (extension.ToLowerInvariant())
{
case ".xml":
return FileType.mRemoteXml;
@@ -245,7 +136,5 @@ namespace mRemoteNG.App
return FileType.Unknown;
}
}
#endregion
}
}

View File

@@ -1,10 +1,10 @@
namespace mRemoteNG.App.Info
{
public class ConnectionsFileInfo
public static class ConnectionsFileInfo
{
public static readonly string DefaultConnectionsPath = SettingsFileInfo.SettingsPath;
public static readonly string DefaultConnectionsFile = "confCons.xml";
public static readonly string DefaultConnectionsFileNew = "confConsNew.xml";
public static readonly double ConnectionFileVersion = 2.5;
public static readonly double ConnectionFileVersion = 2.6;
}
}

View File

@@ -2,10 +2,8 @@ using System.Collections.Generic;
using System;
using System.IO;
using System.Reflection;
using System.Security;
using System.Threading;
using System.Windows.Forms;
using mRemoteNG.Security;
using static System.Environment;
@@ -17,11 +15,10 @@ namespace mRemoteNG.App.Info
public static readonly string UrlDonate = "http://donate.mremoteng.org/";
public static readonly string UrlForum = "http://forum.mremoteng.org/";
public static readonly string UrlBugs = "http://bugs.mremoteng.org/";
public static readonly string version = Application.ProductVersion;
public static readonly string ProdName = Application.ProductName;
public static readonly string copyright = ((AssemblyCopyrightAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyCopyrightAttribute), false)).Copyright;
public static readonly string HomePath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
public static readonly SecureString EncryptionKey = "mR3m".ConvertToSecureString();
public static readonly string ApplicationVersion = Application.ProductVersion;
public static readonly string ProductName = Application.ProductName;
public static readonly string Copyright = ((AssemblyCopyrightAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyCopyrightAttribute), false)).Copyright;
public static readonly string HomePath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location);
public static string ReportingFilePath = "";
public static readonly string PuttyPath = HomePath + "\\PuTTYNG.exe";
public static string UserAgent
@@ -31,22 +28,22 @@ namespace mRemoteNG.App.Info
var details = new List<string>();
details.Add("compatible");
details.Add(OSVersion.Platform == PlatformID.Win32NT ? $"Windows NT {OSVersion.Version.Major}.{OSVersion.Version.Minor}": OSVersion.VersionString);
if (Tools.EnvironmentInfo.IsWow64)
if (Is64BitProcess)
{
details.Add("WOW64");
}
details.Add(Thread.CurrentThread.CurrentUICulture.Name);
details.Add($".NET CLR {Environment.Version}");
string detailsString = string.Join("; ", details.ToArray());
var detailsString = string.Join("; ", details.ToArray());
return $"Mozilla/5.0 ({detailsString}) {ProdName}/{version}";
return $"Mozilla/5.0 ({detailsString}) {ProductName}/{ApplicationVersion}";
}
}
public static Version getVer()
public static Version GetApplicationVersion()
{
System.Version v = new Version();
System.Version.TryParse(version, out v);
Version v;
System.Version.TryParse(ApplicationVersion, out v);
return v;
}
}

View File

@@ -1,14 +1,15 @@
using System;
using System.IO;
using System.IO;
using System.Reflection;
#if !PORTABLE
using System.Windows.Forms;
#endif
namespace mRemoteNG.App.Info
{
public class SettingsFileInfo
public static class SettingsFileInfo
{
//public static readonly string exe = Assembly.GetExecutingAssembly().GetName().CodeBase;
public static readonly string exePath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
public static readonly string exePath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location);
#if !PORTABLE
public static readonly string SettingsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "\\" + Application.ProductName;
#else

View File

@@ -1,20 +1,34 @@
namespace mRemoteNG.App.Info
{
public class UpdateChannelInfo
public static class UpdateChannelInfo
{
public static string FileName
{
#if PORTABLE
get
{
#if DEBUG
return "update-debug.txt";
#else
if ((string)(mRemoteNG.Settings.Default.UpdateChannel.ToLowerInvariant()) == "debug")
return "update-debug.txt";
else
return "update.txt";
#endif
/* */
/* return PORTABLE update files here */
/* */
#if DEBUG
return "update-portable-debug.txt";
#else
return Settings.Default.UpdateChannel.ToLowerInvariant() == "debug" ? "update-portable-debug.txt" : "update-portable.txt";
#endif
}
#else //NOT portable
get
{
/* */
/* return INSTALLER update files here */
/* */
#if DEBUG
return "update-debug.txt";
#else
return Settings.Default.UpdateChannel.ToLowerInvariant() == "debug" ? "update-debug.txt" : "update.txt";
#endif
}
#endif //endif for PORTABLE
}
}
}

View File

@@ -15,13 +15,7 @@ namespace mRemoteNG.App
private static readonly Logger _loggerInstance = new Logger();
private ILog _log;
public static ILog Instance
{
get
{
return _loggerInstance._log;
}
}
public static ILog Instance => _loggerInstance._log;
private Logger()
{
@@ -39,16 +33,13 @@ namespace mRemoteNG.App
ILoggerRepository repository = LogManager.GetRepository();
IAppender[] appenders = repository.GetAppenders();
FileAppender fileAppender = default(FileAppender);
foreach (IAppender appender in appenders)
{
fileAppender = appender as FileAppender;
if (!(fileAppender == null || fileAppender.Name != "LogFileAppender"))
{
fileAppender.File = logFile;
fileAppender.ActivateOptions();
}
var fileAppender = (RollingFileAppender)appender;
if (fileAppender == null || fileAppender.Name != "LogFileAppender") continue;
fileAppender.File = logFile;
fileAppender.ActivateOptions();
}
_log = LogManager.GetLogger("Logger");
}

View File

@@ -7,79 +7,79 @@ namespace mRemoteNG.App
public static class NativeMethods
{
#region Functions
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern bool AppendMenu(IntPtr hMenu, int uFlags, IntPtr uIDNewItem, string lpNewItem);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern IntPtr CreatePopupMenu();
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern bool InsertMenu(IntPtr hMenu, int uPosition, int uFlags, IntPtr uIDNewItem, string lpNewItem);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern int IsIconic(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern bool MoveWindow(IntPtr hWnd, int x, int y, int cx, int cy, bool repaint);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
internal static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern bool PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
internal static extern int SendMessage(IntPtr hWnd, int msg, int wparam, int lparam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, System.Text.StringBuilder lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, System.Text.StringBuilder lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern bool SetMenuItemBitmaps(IntPtr hMenu, int uPosition, int uFlags, IntPtr hBitmapUnchecked, IntPtr hBitmapChecked);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
internal static extern int SetWindowLong(IntPtr hWnd, int nIndex, long dwNewLong);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern int ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern IntPtr WindowFromPoint(Point point);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern void GetClassName(IntPtr hWnd, System.Text.StringBuilder lpClassName, int nMaxCount);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern int GetClassName(IntPtr hWnd, System.Text.StringBuilder lpClassName, int nMaxCount);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int GetDlgCtrlID(int hwndCtl);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern int GetDlgCtrlID(IntPtr hwndCtl);
[DllImport("user32", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
internal static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
[DllImport("user32", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern bool SetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
internal static extern bool SetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
#endregion
#region Structures
[StructLayout(LayoutKind.Sequential)]
public struct WINDOWPOS
internal struct WINDOWPOS
{
public IntPtr hwnd;
public IntPtr hwndInsertAfter;
@@ -90,7 +90,7 @@ namespace mRemoteNG.App
public int flags;
}
public struct WINDOWPLACEMENT
internal struct WINDOWPLACEMENT
{
public uint length;
public uint flags;
@@ -100,13 +100,13 @@ namespace mRemoteNG.App
public RECT rcNormalPosition;
}
public struct POINT
internal struct POINT
{
public long x;
public long y;
}
public struct RECT
internal struct RECT
{
public long left;
public long top;

View File

@@ -24,6 +24,8 @@ namespace mRemoteNG.App
private static void StartApplication()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Startup.Instance.InitializeProgram();
Application.Run(frmMain.Default);
}
@@ -35,7 +37,7 @@ namespace mRemoteNG.App
private static void StartApplicationAsSingleInstance()
{
var mutexID = "mRemoteNG_SingleInstanceMutex";
const string mutexID = "mRemoteNG_SingleInstanceMutex";
bool newInstanceCreated;
mutex = new Mutex(false, mutexID, out newInstanceCreated);
if (!newInstanceCreated)
@@ -51,18 +53,16 @@ namespace mRemoteNG.App
private static void SwitchToCurrentInstance()
{
var singletonInstanceWindowHandle = GetRunningSingletonInstanceWindowHandle();
if (singletonInstanceWindowHandle != IntPtr.Zero)
{
if (NativeMethods.IsIconic(singletonInstanceWindowHandle) != 0)
NativeMethods.ShowWindow(singletonInstanceWindowHandle, (int)NativeMethods.SW_RESTORE);
}
if (singletonInstanceWindowHandle == IntPtr.Zero) return;
if (NativeMethods.IsIconic(singletonInstanceWindowHandle) != 0)
NativeMethods.ShowWindow(singletonInstanceWindowHandle, (int)NativeMethods.SW_RESTORE);
}
private static IntPtr GetRunningSingletonInstanceWindowHandle()
{
var windowHandle = IntPtr.Zero;
var currentProcess = Process.GetCurrentProcess();
foreach (Process enumeratedProcess in Process.GetProcessesByName(currentProcess.ProcessName))
foreach (var enumeratedProcess in Process.GetProcessesByName(currentProcess.ProcessName))
{
if (enumeratedProcess.Id != currentProcess.Id && enumeratedProcess.MainModule.FileName == currentProcess.MainModule.FileName && enumeratedProcess.MainWindowHandle != IntPtr.Zero)
windowHandle = enumeratedProcess.MainWindowHandle;

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,10 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms;
using mRemoteNG.UI.Forms;
using WeifenLuo.WinFormsUI.Docking;
namespace mRemoteNG.App
{
public class Screens
public static class Screens
{
public static void SendFormToScreen(Screen Screen)
{
@@ -30,8 +27,11 @@ namespace mRemoteNG.App
public static void SendPanelToScreen(DockContent Panel, Screen Screen)
{
Panel.DockState = DockState.Float;
Panel.ParentForm.Left = Screen.Bounds.Location.X;
Panel.ParentForm.Top = Screen.Bounds.Location.Y;
if (Panel.ParentForm != null)
{
Panel.ParentForm.Left = Screen.Bounds.Location.X;
Panel.ParentForm.Top = Screen.Bounds.Location.Y;
}
}
}
}

View File

@@ -1,23 +1,16 @@
using mRemoteNG.Messages;
using mRemoteNG.Tools;
using mRemoteNG.Tools;
using System;
using System.Diagnostics;
using mRemoteNG.My;
using mRemoteNG.Config.Putty;
using mRemoteNG.UI.Forms;
namespace mRemoteNG.App
{
public class Shutdown
public static class Shutdown
{
private static string _updateFilePath = null;
private static string _updateFilePath;
public static bool UpdatePending
{
get
{
return !string.IsNullOrEmpty(_updateFilePath);
}
}
private static bool UpdatePending => !string.IsNullOrEmpty(_updateFilePath);
public static void Quit(string updateFilePath = null)
{
@@ -38,13 +31,13 @@ namespace mRemoteNG.App
}
catch (Exception ex)
{
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strSettingsCouldNotBeSavedOrTrayDispose + Environment.NewLine + ex.Message, true);
Runtime.MessageCollector.AddExceptionStackTrace(Language.strSettingsCouldNotBeSavedOrTrayDispose, ex);
}
}
private static void StopPuttySessionWatcher()
{
Config.Putty.Sessions.StopWatcher();
PuttySessionsManager.Instance.StopWatcher();
}
private static void DisposeNotificationAreaIcon()
@@ -55,7 +48,7 @@ namespace mRemoteNG.App
private static void SaveConnections()
{
if (mRemoteNG.Settings.Default.SaveConsOnExit)
if (Settings.Default.SaveConsOnExit)
Runtime.SaveConnections();
}
@@ -77,7 +70,7 @@ namespace mRemoteNG.App
}
catch (Exception ex)
{
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, "The update could not be started." + Environment.NewLine + ex.Message, true);
Runtime.MessageCollector.AddExceptionStackTrace("The update could not be started.", ex);
}
}

View File

@@ -5,7 +5,6 @@ using mRemoteNG.Connection;
using mRemoteNG.Messages;
using mRemoteNG.Tools;
using mRemoteNG.UI.Forms;
using mRemoteNG.UI.Window;
using System;
using System.ComponentModel;
using System.Diagnostics;
@@ -15,20 +14,18 @@ using System.IO;
using System.Management;
using System.Threading;
using System.Windows.Forms;
using mRemoteNG.Config.Connections.Multiuser;
using mRemoteNG.UI;
using WeifenLuo.WinFormsUI.Docking;
namespace mRemoteNG.App
{
public class Startup
{
private static readonly Startup _singletonInstance = new Startup();
private CompatibilityChecker _compatibilityChecker;
private AppUpdater _appUpdate;
public static Startup Instance
{
get { return _singletonInstance; }
}
public static Startup Instance { get; } = new Startup();
private Startup()
{
@@ -48,9 +45,10 @@ namespace mRemoteNG.App
ParseCommandLineArgs();
IeBrowserEmulation.Register();
GetConnectionIcons();
DefaultConnectionInfo.Instance.LoadFrom(Settings.Default, (a)=>"ConDefault"+a);
DefaultConnectionInheritance.Instance.LoadFrom(Settings.Default, (a)=>"InhDefault"+a);
}
public void SetDefaultLayout()
{
frmMain.Default.pnlDock.Visible = false;
@@ -60,11 +58,11 @@ namespace mRemoteNG.App
frmMain.Default.pnlDock.DockTopPortion = frmMain.Default.pnlDock.Height * 0.25;
frmMain.Default.pnlDock.DockBottomPortion = frmMain.Default.pnlDock.Height * 0.25;
Windows.treePanel.Show(frmMain.Default.pnlDock, DockState.DockLeft);
Windows.configPanel.Show(frmMain.Default.pnlDock);
Windows.configPanel.DockTo(Windows.treePanel.Pane, DockStyle.Bottom, -1);
Windows.TreePanel.Show(frmMain.Default.pnlDock, DockState.DockLeft);
Windows.ConfigPanel.Show(frmMain.Default.pnlDock);
Windows.ConfigPanel.DockTo(Windows.TreePanel.Pane, DockStyle.Bottom, -1);
Windows.screenshotForm.Hide();
Windows.ScreenshotForm.Hide();
frmMain.Default.pnlDock.Visible = true;
}
@@ -85,17 +83,14 @@ namespace mRemoteNG.App
}
}
private void LogStartupData()
{
if (Settings.Default.WriteLogFile)
{
LogApplicationData();
LogCmdLineArgs();
LogSystemData();
LogCLRData();
LogCultureData();
}
if (!Settings.Default.WriteLogFile) return;
LogApplicationData();
LogCmdLineArgs();
LogSystemData();
LogCLRData();
LogCultureData();
}
private void LogSystemData()
@@ -158,12 +153,12 @@ namespace mRemoteNG.App
private void LogApplicationData()
{
#if !PORTABLE
#if !PORTABLE
Logger.Instance.InfoFormat($"{Application.ProductName} {Application.ProductVersion} starting.");
#else
#else
Logger.Instance.InfoFormat(
$"{Application.ProductName} {Application.ProductVersion} {Language.strLabelPortableEdition} starting.");
#endif
#endif
}
private void LogCmdLineArgs()
@@ -182,16 +177,16 @@ namespace mRemoteNG.App
$"System Culture: {Thread.CurrentThread.CurrentUICulture.Name}/{Thread.CurrentThread.CurrentUICulture.NativeName}");
}
public void CreateConnectionsProvider()
{
if (Settings.Default.UseSQLServer)
{
SqlConnectionsProvider _sqlConnectionsProvider = new SqlConnectionsProvider();
}
frmMain.Default.AreWeUsingSqlServerForSavingConnections = Settings.Default.UseSQLServer;
if (!Settings.Default.UseSQLServer) return;
Runtime.RemoteConnectionsSyncronizer = new RemoteConnectionsSyncronizer(new SqlConnectionsUpdateChecker());
Runtime.RemoteConnectionsSyncronizer.Enable();
}
private void CheckForUpdate()
public void CheckForUpdate()
{
if (_appUpdate == null)
{
@@ -245,50 +240,6 @@ namespace mRemoteNG.App
}
private void CheckForAnnouncement()
{
if (_appUpdate == null)
_appUpdate = new AppUpdater();
else if (_appUpdate.IsGetAnnouncementInfoRunning)
return;
_appUpdate.GetAnnouncementInfoCompletedEvent += GetAnnouncementInfoCompleted;
_appUpdate.GetAnnouncementInfoAsync();
}
private void GetAnnouncementInfoCompleted(object sender, AsyncCompletedEventArgs e)
{
if (frmMain.Default.InvokeRequired)
{
frmMain.Default.Invoke(new AsyncCompletedEventHandler(GetAnnouncementInfoCompleted), new object[] { sender, e });
return;
}
try
{
_appUpdate.GetAnnouncementInfoCompletedEvent -= GetAnnouncementInfoCompleted;
if (e.Cancelled)
{
return;
}
if (e.Error != null)
{
throw (e.Error);
}
if (_appUpdate.IsAnnouncementAvailable())
{
Windows.Show(WindowType.Announcement);
}
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionMessage("GetAnnouncementInfoCompleted() failed.", ex, MessageClass.ErrorMsg, true);
}
}
private void ParseCommandLineArgs()
{
try

View File

@@ -6,34 +6,26 @@ using System.Globalization;
namespace mRemoteNG.App
{
public class SupportedCultures : Dictionary<string, string>
[Serializable]
public class SupportedCultures : Dictionary<string, string>
{
private static SupportedCultures _Instance = null;
private static SupportedCultures _Instance;
private static SupportedCultures SingletonInstance
{
get
{
if (_Instance == null)
_Instance = new SupportedCultures();
return _Instance;
}
}
private static SupportedCultures SingletonInstance => _Instance ?? (_Instance = new SupportedCultures());
private SupportedCultures()
private SupportedCultures()
{
CultureInfo CultureInfo = default(CultureInfo);
foreach (string CultureName in Settings.Default.SupportedUICultures.Split(','))
foreach (var CultureName in Settings.Default.SupportedUICultures.Split(','))
{
try
{
CultureInfo = new CultureInfo(CultureName.Trim());
var CultureInfo = new CultureInfo(CultureName.Trim());
Add(CultureInfo.Name, CultureInfo.TextInfo.ToTitleCase(CultureInfo.NativeName));
}
catch (Exception ex)
{
Debug.Print(string.Format("An exception occurred while adding the culture \'{0}\' to the list of supported cultures. {1}", CultureName, ex.ToString()));
Debug.Print($"An exception occurred while adding the culture {CultureName} to the list of supported cultures. {ex.StackTrace}");
}
}
}
@@ -50,13 +42,13 @@ namespace mRemoteNG.App
public static string get_CultureName(string CultureNativeName)
{
string[] Names = new string[SingletonInstance.Count + 1];
string[] NativeNames = new string[SingletonInstance.Count + 1];
var Names = new string[SingletonInstance.Count + 1];
var NativeNames = new string[SingletonInstance.Count + 1];
SingletonInstance.Keys.CopyTo(Names, 0);
SingletonInstance.Values.CopyTo(NativeNames, 0);
for (int Index = 0; Index <= SingletonInstance.Count; Index++)
for (var Index = 0; Index <= SingletonInstance.Count; Index++)
{
if (NativeNames[Index] == CultureNativeName)
{
@@ -76,8 +68,8 @@ namespace mRemoteNG.App
{
get
{
List<string> ValueList = new List<string>();
foreach (string Value in SingletonInstance.Values)
var ValueList = new List<string>();
foreach (var Value in SingletonInstance.Values)
{
ValueList.Add(Value);
}

View File

@@ -1,32 +0,0 @@
using System;
namespace mRemoteNG.App.Update
{
public class AnnouncementInfo
{
#region Public Properties
public bool IsValid { get; set; }
public string Name { get; set; }
public Uri Address { get; set; }
#endregion
#region Public Methods
public static AnnouncementInfo FromString(string input)
{
AnnouncementInfo newInfo = new AnnouncementInfo();
if (string.IsNullOrEmpty(input))
{
newInfo.IsValid = false;
}
else
{
UpdateFile updateFile = new UpdateFile(input);
newInfo.Name = updateFile.GetString("Name");
newInfo.Address = updateFile.GetUri("URL");
newInfo.IsValid = true;
}
return newInfo;
}
#endregion
}
}

View File

@@ -3,12 +3,16 @@ using System.IO;
using System.Net;
using System.ComponentModel;
using System.Threading;
using mRemoteNG.Tools;
using System.Reflection;
using mRemoteNG.App.Info;
using mRemoteNG.Security;
using mRemoteNG.Security.SymmetricEncryption;
#if PORTABLE
using System.Security.Cryptography;
using System.Windows.Forms;
#else
using mRemoteNG.Tools;
#endif
namespace mRemoteNG.App.Update
{
@@ -16,98 +20,30 @@ namespace mRemoteNG.App.Update
{
private UpdateInfo _currentUpdateInfo;
private string _changeLog;
private AnnouncementInfo _currentAnnouncementInfo;
private WebProxy _webProxy;
private Thread _getUpdateInfoThread;
private Thread _getChangeLogThread;
private Thread _getAnnouncementInfoThread;
#region Public Properties
public UpdateInfo CurrentUpdateInfo
{
get
{
return _currentUpdateInfo;
}
}
#region Public Properties
public UpdateInfo CurrentUpdateInfo => _currentUpdateInfo;
public string ChangeLog => _changeLog;
public bool IsGetUpdateInfoRunning => _getUpdateInfoThread != null && _getUpdateInfoThread.IsAlive;
private bool IsGetChangeLogRunning => _getChangeLogThread != null && _getChangeLogThread.IsAlive;
public bool IsDownloadUpdateRunning => _downloadUpdateWebClient != null;
#endregion
public string ChangeLog
{
get
{
return _changeLog;
}
}
public AnnouncementInfo CurrentAnnouncementInfo
{
get
{
return _currentAnnouncementInfo;
}
}
public bool IsGetUpdateInfoRunning
{
get
{
if (_getUpdateInfoThread != null)
{
if (_getUpdateInfoThread.IsAlive)
{
return true;
}
}
return false;
}
}
public bool IsGetChangeLogRunning
{
get
{
if (_getChangeLogThread != null)
{
if (_getChangeLogThread.IsAlive)
{
return true;
}
}
return false;
}
}
public bool IsGetAnnouncementInfoRunning
{
get
{
if (_getAnnouncementInfoThread != null)
{
if (_getAnnouncementInfoThread.IsAlive)
{
return true;
}
}
return false;
}
}
public bool IsDownloadUpdateRunning
{
get
{
return (_downloadUpdateWebClient != null);
}
}
#endregion
#region Public Methods
#region Public Methods
public AppUpdater()
{
SetProxySettings();
}
public void SetProxySettings()
private void SetProxySettings()
{
var shouldWeUseProxy = Settings.Default.UpdateUseProxy;
var proxyAddress = Settings.Default.UpdateProxyAddress;
@@ -115,7 +51,7 @@ namespace mRemoteNG.App.Update
var useAuthentication = Settings.Default.UpdateProxyUseAuthentication;
var username = Settings.Default.UpdateProxyAuthUser;
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
var password = cryptographyProvider.Decrypt(Settings.Default.UpdateProxyAuthPass, GeneralAppInfo.EncryptionKey);
var password = cryptographyProvider.Decrypt(Settings.Default.UpdateProxyAuthPass, Runtime.EncryptionKey);
SetProxySettings(shouldWeUseProxy, proxyAddress, port, useAuthentication, username, password);
}
@@ -124,23 +60,9 @@ namespace mRemoteNG.App.Update
{
if (useProxy && !string.IsNullOrEmpty(address))
{
if (!(port == 0))
{
_webProxy = new WebProxy(address, port);
}
else
{
_webProxy = new WebProxy(address);
}
if (useAuthentication)
{
_webProxy.Credentials = new NetworkCredential(username, password);
}
else
{
_webProxy.Credentials = null;
}
_webProxy = port != 0 ? new WebProxy(address, port) : new WebProxy(address);
_webProxy.Credentials = useAuthentication ? new NetworkCredential(username, password) : null;
}
else
{
@@ -155,17 +77,7 @@ namespace mRemoteNG.App.Update
return false;
}
return _currentUpdateInfo.Version > GeneralAppInfo.getVer();
}
public bool IsAnnouncementAvailable()
{
if (_currentAnnouncementInfo == null || (!_currentAnnouncementInfo.IsValid || string.IsNullOrEmpty(_currentAnnouncementInfo.Name)))
{
return false;
}
return (_currentAnnouncementInfo.Name != Settings.Default.LastAnnouncement);
return _currentUpdateInfo.Version > GeneralAppInfo.GetApplicationVersion();
}
public void GetUpdateInfoAsync()
@@ -175,7 +87,7 @@ namespace mRemoteNG.App.Update
_getUpdateInfoThread.Abort();
}
_getUpdateInfoThread = new Thread(new ThreadStart(GetUpdateInfo));
_getUpdateInfoThread = new Thread(GetUpdateInfo);
_getUpdateInfoThread.SetApartmentState(ApartmentState.STA);
_getUpdateInfoThread.IsBackground = true;
_getUpdateInfoThread.Start();
@@ -185,7 +97,7 @@ namespace mRemoteNG.App.Update
{
if (_currentUpdateInfo == null || !_currentUpdateInfo.IsValid)
{
throw (new InvalidOperationException("CurrentUpdateInfo is not valid. GetUpdateInfoAsync() must be called before calling GetChangeLogAsync()."));
throw new InvalidOperationException("CurrentUpdateInfo is not valid. GetUpdateInfoAsync() must be called before calling GetChangeLogAsync().");
}
if (IsGetChangeLogRunning)
@@ -193,43 +105,46 @@ namespace mRemoteNG.App.Update
_getChangeLogThread.Abort();
}
_getChangeLogThread = new Thread(new ThreadStart(GetChangeLog));
_getChangeLogThread = new Thread(GetChangeLog);
_getChangeLogThread.SetApartmentState(ApartmentState.STA);
_getChangeLogThread.IsBackground = true;
_getChangeLogThread.Start();
}
public void GetAnnouncementInfoAsync()
{
if (IsGetAnnouncementInfoRunning)
{
_getAnnouncementInfoThread.Abort();
}
_getAnnouncementInfoThread = new Thread(new ThreadStart(GetAnnouncementInfo));
_getAnnouncementInfoThread.SetApartmentState(ApartmentState.STA);
_getAnnouncementInfoThread.IsBackground = true;
_getAnnouncementInfoThread.Start();
}
public void DownloadUpdateAsync()
{
if (_downloadUpdateWebClient != null)
{
throw (new InvalidOperationException("A previous call to DownloadUpdateAsync() is still in progress."));
throw new InvalidOperationException("A previous call to DownloadUpdateAsync() is still in progress.");
}
if (_currentUpdateInfo == null || !_currentUpdateInfo.IsValid)
{
throw (new InvalidOperationException("CurrentUpdateInfo is not valid. GetUpdateInfoAsync() must be called before calling DownloadUpdateAsync()."));
throw new InvalidOperationException("CurrentUpdateInfo is not valid. GetUpdateInfoAsync() must be called before calling DownloadUpdateAsync().");
}
_currentUpdateInfo.UpdateFilePath = Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Path.GetRandomFileName(), "exe"));
DownloadUpdateWebClient.DownloadFileAsync(CurrentUpdateInfo.DownloadAddress, _currentUpdateInfo.UpdateFilePath);
#if !PORTABLE
_currentUpdateInfo.UpdateFilePath = Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Path.GetRandomFileName(), "exe"));
#else
var sfd = new SaveFileDialog
{
InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),
FileName = _currentUpdateInfo.FileName,
RestoreDirectory = true
};
if (sfd.ShowDialog() == DialogResult.OK)
{
_currentUpdateInfo.UpdateFilePath = sfd.FileName;
}
else
{
return;
}
#endif
DownloadUpdateWebClient.DownloadFileAsync(CurrentUpdateInfo.DownloadAddress, _currentUpdateInfo.UpdateFilePath);
}
#endregion
#endregion
#region Private Properties
#region Private Properties
private WebClient _downloadUpdateWebClient;
private WebClient DownloadUpdateWebClient
{
@@ -248,12 +163,12 @@ namespace mRemoteNG.App.Update
return _downloadUpdateWebClient;
}
}
#endregion
#endregion
#region Private Methods
#region Private Methods
private WebClient CreateWebClient()
{
WebClient webClient = new WebClient();
var webClient = new WebClient();
webClient.Headers.Add("user-agent", GeneralAppInfo.UserAgent);
webClient.Proxy = _webProxy;
return webClient;
@@ -261,21 +176,21 @@ namespace mRemoteNG.App.Update
private static DownloadStringCompletedEventArgs NewDownloadStringCompletedEventArgs(string result, Exception exception, bool cancelled, object userToken)
{
Type type = typeof(DownloadStringCompletedEventArgs);
var type = typeof(DownloadStringCompletedEventArgs);
const BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance;
Type[] argumentTypes = new Type[] {typeof(string), typeof(Exception), typeof(bool), typeof(object)};
ConstructorInfo constructor = type.GetConstructor(bindingFlags, null, argumentTypes, null);
object[] arguments = new object[] {result, exception, cancelled, userToken};
Type[] argumentTypes = {typeof(string), typeof(Exception), typeof(bool), typeof(object)};
var constructor = type.GetConstructor(bindingFlags, null, argumentTypes, null);
object[] arguments = {result, exception, cancelled, userToken};
return (DownloadStringCompletedEventArgs)constructor.Invoke(arguments);
}
private DownloadStringCompletedEventArgs DownloadString(Uri address)
{
WebClient webClient = CreateWebClient();
string result = string.Empty;
var webClient = CreateWebClient();
var result = string.Empty;
Exception exception = null;
bool cancelled = false;
var cancelled = false;
try
{
@@ -295,8 +210,8 @@ namespace mRemoteNG.App.Update
private void GetUpdateInfo()
{
Uri updateFileUri = new Uri(new Uri(Convert.ToString(Settings.Default.UpdateAddress)), new Uri(UpdateChannelInfo.FileName, UriKind.Relative));
DownloadStringCompletedEventArgs e = DownloadString(updateFileUri);
var updateFileUri = new Uri(new Uri(Convert.ToString(Settings.Default.UpdateAddress)), new Uri(UpdateChannelInfo.FileName, UriKind.Relative));
var e = DownloadString(updateFileUri);
if (!e.Cancelled && e.Error == null)
{
@@ -308,73 +223,64 @@ namespace mRemoteNG.App.Update
Settings.Default.UpdatePending = IsUpdateAvailable();
}
}
if (GetUpdateInfoCompletedEventEvent != null)
GetUpdateInfoCompletedEventEvent(this, e);
}
GetUpdateInfoCompletedEventEvent?.Invoke(this, e);
}
private void GetChangeLog()
{
DownloadStringCompletedEventArgs e = DownloadString(_currentUpdateInfo.ChangeLogAddress);
var e = DownloadString(_currentUpdateInfo.ChangeLogAddress);
if (!e.Cancelled && e.Error == null)
{
_changeLog = e.Result;
}
if (GetChangeLogCompletedEventEvent != null)
GetChangeLogCompletedEventEvent(this, e);
}
private void GetAnnouncementInfo()
{
Uri announcementFileUri = new Uri(Convert.ToString(Settings.Default.AnnouncementAddress));
DownloadStringCompletedEventArgs e = DownloadString(announcementFileUri);
if (!e.Cancelled && e.Error == null)
{
_currentAnnouncementInfo = AnnouncementInfo.FromString(e.Result);
if (!string.IsNullOrEmpty(_currentAnnouncementInfo.Name))
{
Settings.Default.LastAnnouncement = _currentAnnouncementInfo.Name;
}
}
if (GetAnnouncementInfoCompletedEventEvent != null)
GetAnnouncementInfoCompletedEventEvent(this, e);
}
GetChangeLogCompletedEventEvent?.Invoke(this, e);
}
private void DownloadUpdateProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
if (DownloadUpdateProgressChangedEventEvent != null)
DownloadUpdateProgressChangedEventEvent(sender, e);
}
DownloadUpdateProgressChangedEventEvent?.Invoke(sender, e);
}
private void DownloadUpdateCompleted(object sender, AsyncCompletedEventArgs e)
{
AsyncCompletedEventArgs raiseEventArgs = e;
var raiseEventArgs = e;
if (!e.Cancelled && e.Error == null)
{
try
{
Authenticode updateAuthenticode = new Authenticode(_currentUpdateInfo.UpdateFilePath);
updateAuthenticode.RequireThumbprintMatch = true;
updateAuthenticode.ThumbprintToMatch = _currentUpdateInfo.CertificateThumbprint;
if (updateAuthenticode.Verify() != Authenticode.StatusValue.Verified)
{
if (updateAuthenticode.Status == Authenticode.StatusValue.UnhandledException)
#if !PORTABLE
var updateAuthenticode = new Authenticode(_currentUpdateInfo.UpdateFilePath)
{
RequireThumbprintMatch = true,
ThumbprintToMatch = _currentUpdateInfo.CertificateThumbprint
};
if (updateAuthenticode.Verify() != Authenticode.StatusValue.Verified)
{
if (updateAuthenticode.Status == Authenticode.StatusValue.UnhandledException)
{
throw (updateAuthenticode.Exception);
}
else
{
throw (new Exception(updateAuthenticode.StatusMessage));
}
}
}
throw (new Exception(updateAuthenticode.StatusMessage));
}
#else
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(_currentUpdateInfo.UpdateFilePath))
{
var hash = md5.ComputeHash(stream);
var hashString = BitConverter.ToString(hash).Replace("-", "");
if (!hashString.Equals(_currentUpdateInfo.CertificateThumbprint))
throw new Exception("MD5 Hashes didn't match!");
}
}
#endif
}
catch (Exception ex)
{
raiseEventArgs = new AsyncCompletedEventArgs(ex, false, null);
@@ -385,16 +291,15 @@ namespace mRemoteNG.App.Update
{
File.Delete(_currentUpdateInfo.UpdateFilePath);
}
if (DownloadUpdateCompletedEventEvent != null)
DownloadUpdateCompletedEventEvent(this, raiseEventArgs);
_downloadUpdateWebClient.Dispose();
DownloadUpdateCompletedEventEvent?.Invoke(this, raiseEventArgs);
_downloadUpdateWebClient.Dispose();
_downloadUpdateWebClient = null;
}
#endregion
#endregion
#region Events
#region Events
private AsyncCompletedEventHandler GetUpdateInfoCompletedEventEvent;
public event AsyncCompletedEventHandler GetUpdateInfoCompletedEvent
{
@@ -421,20 +326,7 @@ namespace mRemoteNG.App.Update
}
}
private AsyncCompletedEventHandler GetAnnouncementInfoCompletedEventEvent;
public event AsyncCompletedEventHandler GetAnnouncementInfoCompletedEvent
{
add
{
GetAnnouncementInfoCompletedEventEvent = (AsyncCompletedEventHandler)Delegate.Combine(GetAnnouncementInfoCompletedEventEvent, value);
}
remove
{
GetAnnouncementInfoCompletedEventEvent = (AsyncCompletedEventHandler)Delegate.Remove(GetAnnouncementInfoCompletedEventEvent, value);
}
}
private DownloadProgressChangedEventHandler DownloadUpdateProgressChangedEventEvent;
private DownloadProgressChangedEventHandler DownloadUpdateProgressChangedEventEvent;
public event DownloadProgressChangedEventHandler DownloadUpdateProgressChangedEvent
{
add
@@ -459,6 +351,6 @@ namespace mRemoteNG.App.Update
DownloadUpdateCompletedEventEvent = (AsyncCompletedEventHandler)Delegate.Remove(DownloadUpdateCompletedEventEvent, value);
}
}
#endregion
#endregion
}
}

View File

@@ -1,21 +1,15 @@
using System;
using System.Collections.Generic;
using System.IO;
namespace mRemoteNG.App.Update
{
public class UpdateFile
{
#region Public Properties
private Dictionary<string, string> _items = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
// ReSharper disable MemberCanBePrivate.Local
public Dictionary<string, string> Items
{
// ReSharper restore MemberCanBePrivate.Local
get
{
return _items;
}
}
// ReSharper disable once MemberCanBePrivate.Global
public Dictionary<string, string> Items { get; } = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
#endregion
#region Public Methods
@@ -25,79 +19,72 @@ namespace mRemoteNG.App.Update
}
// ReSharper disable MemberCanBePrivate.Local
// ReSharper disable once MemberCanBePrivate.Global
public void FromString(string content)
{
// ReSharper restore MemberCanBePrivate.Local
if (string.IsNullOrEmpty(content))
{
}
else
{
char[] lineSeparators = new char[] { '\n', '\r' };
char[] keyValueSeparators = new char[] { ':', '=' };
char[] commentCharacters = new char[] { '#', ';', '\'' };
if (string.IsNullOrEmpty(content)) return;
string[] lines = content.Split(lineSeparators.ToString().ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (string line in lines)
char[] keyValueSeparators = { ':', '=' };
char[] commentCharacters = { '#', ';', '\'' };
using (var sr = new StringReader(content))
{
string line;
while ((line = sr.ReadLine()) != null)
{
string trimmedLine = line.Trim();
var trimmedLine = line.Trim();
if (trimmedLine.Length == 0)
{
continue;
}
if (!(trimmedLine.Substring(0, 1).IndexOfAny(commentCharacters.ToString().ToCharArray()) == -1))
if (trimmedLine.Substring(0, 1).IndexOfAny(commentCharacters) != -1)
{
continue;
}
string[] parts = trimmedLine.Split(keyValueSeparators.ToString().ToCharArray(), 2);
if (!(parts.Length == 2))
var parts = trimmedLine.Split(keyValueSeparators, 2);
if (parts.Length != 2)
{
continue;
}
string key = Convert.ToString(parts[0].Trim());
string value = Convert.ToString(parts[1].Trim());
var key = parts[0].Trim();
var value = parts[1].Trim();
_items.Add(key, value);
Items.Add(key, value);
}
}
}
// ReSharper disable MemberCanBePrivate.Local
public string GetString(string key)
private string GetString(string key)
{
// ReSharper restore MemberCanBePrivate.Local
if (!Items.ContainsKey(key))
{
return string.Empty;
}
return this._items[key];
return !Items.ContainsKey(key) ? string.Empty : this.Items[key];
}
public Version GetVersion(string key)
{
string value = GetString(key);
if (string.IsNullOrEmpty(value))
{
return null;
}
return new Version(value);
var value = GetString(key);
return string.IsNullOrEmpty(value) ? null : new Version(value);
}
public Uri GetUri(string key)
{
string value = GetString(key);
if (string.IsNullOrEmpty(value))
{
return null;
}
return new Uri(value);
var value = GetString(key);
return string.IsNullOrEmpty(value) ? null : new Uri(value);
}
public string GetThumbprint(string key)
{
return GetString(key).Replace(" ", "").ToUpperInvariant();
}
public string GetFileName()
{
var value = GetString("dURL");
var sv = value.Split('/');
return sv[sv.Length-1];
}
#endregion
}
}

View File

@@ -1,36 +1,36 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace mRemoteNG.App.Update
{
public class UpdateInfo
{
public bool IsValid { get; set; }
public Version Version { get; set; }
public Uri DownloadAddress { get; set; }
public bool IsValid { get; private set; }
public Version Version { get; private set; }
public Uri DownloadAddress { get; private set; }
public string UpdateFilePath { get; set; }
public Uri ChangeLogAddress { get; set; }
public Uri ImageAddress { get; set; }
public Uri ImageLinkAddress { get; set; }
public string CertificateThumbprint { get; set; }
public Uri ChangeLogAddress { get; private set; }
public Uri ImageAddress { get; private set; }
public Uri ImageLinkAddress { get; private set; }
public string CertificateThumbprint { get; private set; }
public string FileName { get; private set; }
public static UpdateInfo FromString(string input)
{
UpdateInfo newInfo = new UpdateInfo();
var newInfo = new UpdateInfo();
if (string.IsNullOrEmpty(input))
{
newInfo.IsValid = false;
}
else
{
UpdateFile updateFile = new UpdateFile(input);
var updateFile = new UpdateFile(input);
newInfo.Version = updateFile.GetVersion("Version");
newInfo.DownloadAddress = updateFile.GetUri("dURL");
newInfo.ChangeLogAddress = updateFile.GetUri("clURL");
newInfo.ImageAddress = updateFile.GetUri("imgURL");
newInfo.ImageLinkAddress = updateFile.GetUri("imgURLLink");
newInfo.CertificateThumbprint = updateFile.GetThumbprint("CertificateThumbprint");
newInfo.FileName = updateFile.GetFileName();
newInfo.IsValid = true;
}
return newInfo;

View File

@@ -1,67 +1,63 @@
using mRemoteNG.Forms;
using mRemoteNG.Messages;
using mRemoteNG.UI.Forms;
using mRemoteNG.UI.Forms.OptionsPages;
using mRemoteNG.UI.Forms;
using mRemoteNG.UI.Window;
using System;
using mRemoteNG.UI;
using WeifenLuo.WinFormsUI.Docking;
namespace mRemoteNG.App
{
public class Windows
public static class Windows
{
public static ConnectionTreeWindow treeForm;
public static DockContent treePanel = new DockContent();
public static ConfigWindow configForm;
public static DockContent configPanel = new DockContent();
public static ErrorAndInfoWindow errorsForm;
public static DockContent errorsPanel = new DockContent();
public static ScreenshotManagerWindow screenshotForm;
public static DockContent screenshotPanel = new DockContent();
public static ExportForm exportForm;
public static DockContent exportPanel = new DockContent();
public static AboutWindow aboutForm;
public static DockContent aboutPanel = new DockContent();
public static UpdateWindow updateForm;
public static DockContent updatePanel = new DockContent();
public static SSHTransferWindow sshtransferForm;
public static DockContent sshtransferPanel = new DockContent();
public static ActiveDirectoryImportWindow adimportForm;
public static DockContent adimportPanel = new DockContent();
public static HelpWindow helpForm;
public static DockContent helpPanel = new DockContent();
public static ExternalToolsWindow externalappsForm;
public static DockContent externalappsPanel = new DockContent();
public static PortScanWindow portscanForm;
public static DockContent portscanPanel = new DockContent();
public static UltraVNCWindow ultravncscForm;
public static DockContent ultravncscPanel = new DockContent();
public static ComponentsCheckWindow componentscheckForm;
public static DockContent componentscheckPanel = new DockContent();
public static AnnouncementWindow AnnouncementForm;
public static DockContent AnnouncementPanel = new DockContent();
private static AboutWindow _aboutForm;
private static DockContent _aboutPanel = new DockContent();
private static DockContent _sshtransferPanel = new DockContent();
private static ActiveDirectoryImportWindow _adimportForm;
private static DockContent _adimportPanel = new DockContent();
private static HelpWindow _helpForm;
private static DockContent _helpPanel = new DockContent();
private static ExternalToolsWindow _externalappsForm;
private static DockContent _externalappsPanel = new DockContent();
private static PortScanWindow _portscanForm;
private static DockContent _portscanPanel = new DockContent();
private static UltraVNCWindow _ultravncscForm;
private static DockContent _ultravncscPanel = new DockContent();
private static ComponentsCheckWindow _componentscheckForm;
private static DockContent _componentscheckPanel = new DockContent();
public static void Show(WindowType windowType, bool portScanImport = false)
public static ConnectionTreeWindow TreeForm { get; set; }
public static DockContent TreePanel { get; set; } = new DockContent();
public static ConfigWindow ConfigForm { get; set; }
public static DockContent ConfigPanel { get; set; } = new DockContent();
public static ErrorAndInfoWindow ErrorsForm { get; set; }
public static DockContent ErrorsPanel { get; set; } = new DockContent();
public static ScreenshotManagerWindow ScreenshotForm { get; set; }
public static DockContent ScreenshotPanel { get; set; } = new DockContent();
public static UpdateWindow UpdateForm { get; set; }
public static DockContent UpdatePanel { get; set; } = new DockContent();
public static SSHTransferWindow SshtransferForm { get; set; }
public static void Show(WindowType windowType)
{
try
{
if (windowType.Equals(WindowType.About))
{
if (aboutForm == null || aboutForm.IsDisposed)
if (_aboutForm == null || _aboutForm.IsDisposed)
{
aboutForm = new AboutWindow(aboutPanel);
aboutPanel = aboutForm;
_aboutForm = new AboutWindow(_aboutPanel);
_aboutPanel = _aboutForm;
}
aboutForm.Show(frmMain.Default.pnlDock);
_aboutForm.Show(frmMain.Default.pnlDock);
}
else if (windowType.Equals(WindowType.ActiveDirectoryImport))
{
if (adimportForm == null || adimportForm.IsDisposed)
if (_adimportForm == null || _adimportForm.IsDisposed)
{
adimportForm = new ActiveDirectoryImportWindow(adimportPanel);
adimportPanel = adimportForm;
_adimportForm = new ActiveDirectoryImportWindow(_adimportPanel);
_adimportPanel = _adimportForm;
}
adimportPanel.Show(frmMain.Default.pnlDock);
_adimportPanel.Show(frmMain.Default.pnlDock);
}
else if (windowType.Equals(WindowType.Options))
{
@@ -72,74 +68,65 @@ namespace mRemoteNG.App
}
else if (windowType.Equals(WindowType.SSHTransfer))
{
sshtransferForm = new SSHTransferWindow(sshtransferPanel);
sshtransferPanel = sshtransferForm;
sshtransferForm.Show(frmMain.Default.pnlDock);
SshtransferForm = new SSHTransferWindow(_sshtransferPanel);
_sshtransferPanel = SshtransferForm;
SshtransferForm.Show(frmMain.Default.pnlDock);
}
else if (windowType.Equals(WindowType.Update))
{
if (updateForm == null || updateForm.IsDisposed)
if (UpdateForm == null || UpdateForm.IsDisposed)
{
updateForm = new UpdateWindow(updatePanel);
updatePanel = updateForm;
UpdateForm = new UpdateWindow(UpdatePanel);
UpdatePanel = UpdateForm;
}
updateForm.Show(frmMain.Default.pnlDock);
UpdateForm.Show(frmMain.Default.pnlDock);
}
else if (windowType.Equals(WindowType.Help))
{
if (helpForm == null || helpForm.IsDisposed)
if (_helpForm == null || _helpForm.IsDisposed)
{
helpForm = new HelpWindow(helpPanel);
helpPanel = helpForm;
_helpForm = new HelpWindow(_helpPanel);
_helpPanel = _helpForm;
}
helpForm.Show(frmMain.Default.pnlDock);
_helpForm.Show(frmMain.Default.pnlDock);
}
else if (windowType.Equals(WindowType.ExternalApps))
{
if (externalappsForm == null || externalappsForm.IsDisposed)
if (_externalappsForm == null || _externalappsForm.IsDisposed)
{
externalappsForm = new ExternalToolsWindow(externalappsPanel);
externalappsPanel = externalappsForm;
_externalappsForm = new ExternalToolsWindow(_externalappsPanel);
_externalappsPanel = _externalappsForm;
}
externalappsForm.Show(frmMain.Default.pnlDock);
_externalappsForm.Show(frmMain.Default.pnlDock);
}
else if (windowType.Equals(WindowType.PortScan))
{
portscanForm = new PortScanWindow(portscanPanel, portScanImport);
portscanPanel = portscanForm;
portscanForm.Show(frmMain.Default.pnlDock);
_portscanForm = new PortScanWindow(_portscanPanel);
_portscanPanel = _portscanForm;
_portscanForm.Show(frmMain.Default.pnlDock);
}
else if (windowType.Equals(WindowType.UltraVNCSC))
{
if (ultravncscForm == null || ultravncscForm.IsDisposed)
if (_ultravncscForm == null || _ultravncscForm.IsDisposed)
{
ultravncscForm = new UltraVNCWindow(ultravncscPanel);
ultravncscPanel = ultravncscForm;
_ultravncscForm = new UltraVNCWindow(_ultravncscPanel);
_ultravncscPanel = _ultravncscForm;
}
ultravncscForm.Show(frmMain.Default.pnlDock);
_ultravncscForm.Show(frmMain.Default.pnlDock);
}
else if (windowType.Equals(WindowType.ComponentsCheck))
{
if (componentscheckForm == null || componentscheckForm.IsDisposed)
if (_componentscheckForm == null || _componentscheckForm.IsDisposed)
{
componentscheckForm = new ComponentsCheckWindow(componentscheckPanel);
componentscheckPanel = componentscheckForm;
_componentscheckForm = new ComponentsCheckWindow(_componentscheckPanel);
_componentscheckPanel = _componentscheckForm;
}
componentscheckForm.Show(frmMain.Default.pnlDock);
}
else if (windowType.Equals(WindowType.Announcement))
{
if (AnnouncementForm == null || AnnouncementForm.IsDisposed)
{
AnnouncementForm = new AnnouncementWindow(AnnouncementPanel);
AnnouncementPanel = AnnouncementForm;
}
AnnouncementForm.Show(frmMain.Default.pnlDock);
_componentscheckForm.Show(frmMain.Default.pnlDock);
}
}
catch (Exception ex)
{
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, "App.Runtime.Windows.Show() failed." + Environment.NewLine + ex.Message, true);
Runtime.MessageCollector.AddExceptionStackTrace("App.Runtime.Windows.Show() failed.", ex);
}
}
}

View File

@@ -4,7 +4,7 @@ namespace mRemoteNG.Config
{
Unspecified = 0,
Never = 1,
@Exit = 2,
Exit = 2,
Multiple = 3,
All = 4
}

View File

@@ -1,6 +1,10 @@
using System.Windows.Forms;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using System.Security;
using mRemoteNG.Config.DatabaseConnectors;
using mRemoteNG.Config.DataProviders;
using mRemoteNG.Config.Putty;
using mRemoteNG.Config.Serializers;
using mRemoteNG.Tools;
using mRemoteNG.Tree;
using mRemoteNG.UI.Forms;
@@ -9,57 +13,47 @@ namespace mRemoteNG.Config.Connections
public class ConnectionsLoader
{
public bool UseDatabase { get; set; }
public string DatabaseHost { get; set; }
public string DatabaseName { get; set; }
public string DatabaseUsername { get; set; }
public string DatabasePassword { get; set; }
public bool DatabaseUpdate { get; set; }
public string PreviousSelected { get; set; }
public string ConnectionFileName { get; set; }
public TreeNode RootTreeNode { get; set; }
public ConnectionList ConnectionList { get; set; }
public ContainerList ContainerList { get; set; }
public ConnectionList PreviousConnectionList { get; set; }
public ContainerList PreviousContainerList { get; set; }
public void LoadConnections(bool import)
public ConnectionTreeModel LoadConnections(bool import)
{
IDeserializer deserializer;
if (UseDatabase)
{
var sqlConnectionsLoader = new SqlConnectionsLoader()
{
ConnectionList = ConnectionList,
ContainerList = ContainerList,
PreviousConnectionList = PreviousConnectionList,
PreviousContainerList = PreviousContainerList,
PreviousSelected = PreviousSelected,
RootTreeNode = RootTreeNode,
DatabaseName = DatabaseName,
DatabaseHost = DatabaseHost,
DatabasePassword = DatabasePassword,
DatabaseUpdate = DatabaseUpdate,
DatabaseUsername = DatabaseUsername
};
sqlConnectionsLoader.LoadFromSql();
var connector = new SqlDatabaseConnector();
var dataProvider = new SqlDataProvider(connector);
var dataTable = dataProvider.Load();
deserializer = new DataTableDeserializer(dataTable);
}
else
{
var xmlConnectionsLoader = new XmlConnectionsLoader()
{
ConnectionFileName = ConnectionFileName,
ConnectionList = ConnectionList,
ContainerList = ContainerList,
RootTreeNode = RootTreeNode,
};
xmlConnectionsLoader.LoadFromXml(import);
var dataProvider = new FileDataProvider(ConnectionFileName);
var xmlString = dataProvider.Load();
deserializer = new XmlConnectionsDeserializer(xmlString)
{
AuthenticationRequestor = PromptForPassword
};
}
frmMain.Default.AreWeUsingSqlServerForSavingConnections = UseDatabase;
frmMain.Default.ConnectionsFileName = ConnectionFileName;
if (!import)
Putty.Sessions.AddSessionsToTree();
var connectionTreeModel = deserializer.Deserialize();
if (connectionTreeModel != null)
frmMain.Default.ConnectionsFileName = ConnectionFileName;
else
connectionTreeModel = new ConnectionTreeModel();
if (import) return connectionTreeModel;
PuttySessionsManager.Instance.AddSessions();
connectionTreeModel.RootNodes.AddRange(PuttySessionsManager.Instance.RootPuttySessionsNodes);
return connectionTreeModel;
}
private SecureString PromptForPassword()
{
var password = MiscTools.PasswordDialog("", false);
return password;
}
}
}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More