diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index 110be66..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -vncproxy \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 3b3cb8d..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="CompilerConfiguration"> - <resourceExtensions /> - <wildcardResourcePatterns> - <entry name="!?*.java" /> - <entry name="!?*.form" /> - <entry name="!?*.class" /> - <entry name="!?*.groovy" /> - <entry name="!?*.scala" /> - <entry name="!?*.flex" /> - <entry name="!?*.kt" /> - <entry name="!?*.clj" /> - <entry name="!?*.aj" /> - </wildcardResourcePatterns> - <annotationProcessing> - <profile default="true" name="Default" enabled="false"> - <processorPath useClasspath="true" /> - </profile> - </annotationProcessing> - </component> -</project> \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index c7d1c5a..0000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ -<component name="CopyrightManager"> - <settings default="" /> -</component> \ No newline at end of file diff --git a/.idea/libraries/GOPATH__vncproxy_.xml b/.idea/libraries/GOPATH__vncproxy_.xml index a3abc64..de67345 100644 --- a/.idea/libraries/GOPATH__vncproxy_.xml +++ b/.idea/libraries/GOPATH__vncproxy_.xml @@ -6,11 +6,14 @@ <root url="file://$PROJECT_DIR$/../vncproxy1" /> <root url="file://$PROJECT_DIR$/../GoProjExample" /> <root url="file://$PROJECT_DIR$/../srf.opb" /> + <root url="file://$PROJECT_DIR$/../vshpere-cli" /> <root url="file://$PROJECT_DIR$/../sourcegraph.com" /> <root url="file://$USER_HOME$/srf/experience.center.opb/src/github.com" /> <root url="file://$PROJECT_DIR$/../github.com" /> + <root url="file://$PROJECT_DIR$/../experience.center.opb" /> <root url="file://$USER_HOME$/srf/experience.center.opb/src/gopkg.in" /> <root url="file://$PROJECT_DIR$/../golang.org" /> + <root url="file://$PROJECT_DIR$/../srf-test-exporter" /> <root url="file://$USER_HOME$/srf/experience.center.opb/src/golang.org" /> <root url="file://$USER_HOME$/srf/experience.center.opb/src/srf" /> <root url="file://$USER_HOME$/srf/experience.center.opb/src/version" /> @@ -24,11 +27,14 @@ <root url="file://$PROJECT_DIR$/../vncproxy1" /> <root url="file://$PROJECT_DIR$/../GoProjExample" /> <root url="file://$PROJECT_DIR$/../srf.opb" /> + <root url="file://$PROJECT_DIR$/../vshpere-cli" /> <root url="file://$PROJECT_DIR$/../sourcegraph.com" /> <root url="file://$USER_HOME$/srf/experience.center.opb/src/github.com" /> <root url="file://$PROJECT_DIR$/../github.com" /> + <root url="file://$PROJECT_DIR$/../experience.center.opb" /> <root url="file://$USER_HOME$/srf/experience.center.opb/src/gopkg.in" /> <root url="file://$PROJECT_DIR$/../golang.org" /> + <root url="file://$PROJECT_DIR$/../srf-test-exporter" /> <root url="file://$USER_HOME$/srf/experience.center.opb/src/golang.org" /> <root url="file://$USER_HOME$/srf/experience.center.opb/src/srf" /> <root url="file://$USER_HOME$/srf/experience.center.opb/src/version" /> diff --git a/.idea/misc.xml b/.idea/misc.xml index be9be36..ce2a63a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,30 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="GOROOT" path="/usr/local/Cellar/go/1.8.3/libexec" /> +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="GOROOT" path="/usr/local/Cellar/go/1.8.3/libexec" /> + <component name="MavenImportPreferences"> + <option name="generalSettings"> + <MavenGeneralSettings> + <option name="mavenHome" value="Bundled (Maven 3)" /> + </MavenGeneralSettings> + </option> + </component> + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" default="true"> + <output url="file://$PROJECT_DIR$/out" /> + </component> + <component name="masterDetails"> + <states> + <state key="ProjectJDKs.UI"> + <settings> + <last-edited>1.8</last-edited> + <splitter-proportions> + <option name="proportions"> + <list> + <option value="0.2" /> + </list> + </option> + </splitter-proportions> + </settings> + </state> + </states> + </component> </project> \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 06e0ada..86ed047 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -1,8 +1,8 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ProjectModuleManager"> - <modules> - <module fileurl="file://$PROJECT_DIR$/.idea/vncproxy.iml" filepath="$PROJECT_DIR$/.idea/vncproxy.iml" /> - </modules> - </component> +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/vncproxy.iml" filepath="$PROJECT_DIR$/vncproxy.iml" /> + </modules> + </component> </project> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 9661ac7..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="VcsDirectoryMappings"> - <mapping directory="$PROJECT_DIR$" vcs="Git" /> - </component> +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="" vcs="Git" /> + </component> </project> \ No newline at end of file diff --git a/.idea/vncproxy.iml b/.idea/vncproxy.iml deleted file mode 100644 index fccf925..0000000 --- a/.idea/vncproxy.iml +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<module type="WEB_MODULE" version="4"> - <component name="NewModuleRootManager" inherit-compiler-output="true"> - <exclude-output /> - <content url="file://$MODULE_DIR$" /> - <orderEntry type="sourceFolder" forTests="false" /> - <orderEntry type="library" name="GOPATH <vncproxy>" level="project" /> - </component> -</module> - diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 0137706..4d2d2ba 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,1648 +1,1344 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ChangeListManager"> - <list default="true" id="aeba8696-a0e4-4bdc-984c-b9ca26151c10" name="Default" comment=""> - <change type="DELETED" beforePath="$PROJECT_DIR$/vnc/recorder.go" afterPath="" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.gitignore" afterPath="$PROJECT_DIR$/.gitignore" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/compiler.xml" afterPath="$PROJECT_DIR$/.idea/compiler.xml" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/copyright/profiles_settings.xml" afterPath="$PROJECT_DIR$/.idea/copyright/profiles_settings.xml" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/libraries/GOPATH__vncproxy_.xml" afterPath="$PROJECT_DIR$/.idea/libraries/GOPATH__vncproxy_.xml" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="$PROJECT_DIR$/.idea/misc.xml" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/modules.xml" afterPath="$PROJECT_DIR$/.idea/modules.xml" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/vcs.xml" afterPath="$PROJECT_DIR$/.idea/vcs.xml" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/vncproxy.iml" afterPath="$PROJECT_DIR$/.idea/vncproxy.iml" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.vscode/launch.json" afterPath="$PROJECT_DIR$/.vscode/launch.json" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.vscode/tasks.json" afterPath="$PROJECT_DIR$/.vscode/tasks.json" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/LICENSE" afterPath="$PROJECT_DIR$/LICENSE" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/README.md" afterPath="$PROJECT_DIR$/README.md" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/Logger.go" afterPath="$PROJECT_DIR$/common/Logger.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/encoding.go" afterPath="$PROJECT_DIR$/common/encoding.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/readers.go" afterPath="$PROJECT_DIR$/common/readers.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/rectangle.go" afterPath="$PROJECT_DIR$/common/rectangle.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-copy-rect.go" afterPath="$PROJECT_DIR$/encodings/enc-copy-rect.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-corre.go" afterPath="$PROJECT_DIR$/encodings/enc-corre.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-hextile.go" afterPath="$PROJECT_DIR$/encodings/enc-hextile.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-raw.go" afterPath="$PROJECT_DIR$/encodings/enc-raw.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-rre.go" afterPath="$PROJECT_DIR$/encodings/enc-rre.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-tight.go" afterPath="$PROJECT_DIR$/encodings/enc-tight.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-zlib.go" afterPath="$PROJECT_DIR$/encodings/enc-zlib.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-zrle.go" afterPath="$PROJECT_DIR$/encodings/enc-zrle.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/main.go" afterPath="$PROJECT_DIR$/main.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/README.md" afterPath="$PROJECT_DIR$/vnc/README.md" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/client-conn.go" afterPath="$PROJECT_DIR$/vnc/client-conn.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/client_auth.go" afterPath="$PROJECT_DIR$/vnc/client_auth.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/client_auth_test.go" afterPath="$PROJECT_DIR$/vnc/client_auth_test.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/client_test.go" afterPath="$PROJECT_DIR$/vnc/client_test.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/color.go" afterPath="$PROJECT_DIR$/vnc/color.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/pixel_format.go" afterPath="$PROJECT_DIR$/vnc/pixel_format.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/pointer.go" afterPath="$PROJECT_DIR$/vnc/pointer.go" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/server_messages.go" afterPath="$PROJECT_DIR$/vnc/server_messages.go" /> - </list> - <ignored path="vncproxy.iws" /> - <ignored path=".idea/workspace.xml" /> - <ignored path=".idea/dataSources.local.xml" /> - <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> - <option name="TRACKING_ENABLED" value="true" /> - <option name="SHOW_DIALOG" value="false" /> - <option name="HIGHLIGHT_CONFLICTS" value="true" /> - <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> - <option name="LAST_RESOLUTION" value="IGNORE" /> - </component> - <component name="CompilerWorkspaceConfiguration"> - <option name="MAKE_PROJECT_ON_SAVE" value="true" /> - </component> - <component name="CreatePatchCommitExecutor"> - <option name="PATCH_PATH" value="" /> - </component> - <component name="DatabaseView"> - <option name="SHOW_INTERMEDIATE" value="true" /> - <option name="GROUP_SCHEMA" value="true" /> - <option name="GROUP_CONTENTS" value="false" /> - <option name="SORT_POSITIONED" value="false" /> - <option name="SHOW_TABLE_DETAILS" value="true" /> - <option name="SHOW_EMPTY_GROUPS" value="false" /> - <option name="AUTO_SCROLL_FROM_SOURCE" value="false" /> - </component> - <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" /> - <component name="FavoritesManager"> - <favorites_list name="vncproxy" /> - </component> - <component name="FileEditorManager"> - <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> - <file leaf-file-name="client-conn.go" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/vnc/client-conn.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="254"> - <caret line="482" column="0" lean-forward="false" selection-start-line="482" selection-start-column="0" selection-end-line="482" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="asm_amd64.s" pinned="false" current-in-tab="false"> - <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/runtime/asm_amd64.s"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="129"> - <caret line="2196" column="0" lean-forward="false" selection-start-line="2196" selection-start-column="0" selection-end-line="2196" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="binary.go" pinned="false" current-in-tab="false"> - <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/encoding/binary/binary.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="191"> - <caret line="171" column="9" lean-forward="false" selection-start-line="167" selection-start-column="22" selection-end-line="171" selection-end-column="9" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="server_messages.go" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/vnc/server_messages.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="63"> - <caret line="32" column="0" lean-forward="false" selection-start-line="32" selection-start-column="0" selection-end-line="32" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="main.go" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/main.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="56"> - <caret line="23" column="42" lean-forward="false" selection-start-line="23" selection-start-column="42" selection-end-line="23" selection-end-column="42" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="readers.go" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/common/readers.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="134"> - <caret line="137" column="0" lean-forward="false" selection-start-line="137" selection-start-column="0" selection-end-line="137" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="io.go" pinned="false" current-in-tab="false"> - <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/io/io.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="134"> - <caret line="306" column="0" lean-forward="false" selection-start-line="306" selection-start-column="0" selection-end-line="306" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="recorder.go" pinned="false" current-in-tab="true"> - <entry file="file://$PROJECT_DIR$/listeners/recorder.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="220"> - <caret line="138" column="0" lean-forward="false" selection-start-line="138" selection-start-column="0" selection-end-line="138" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="enc-tight.go" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/encodings/enc-tight.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="207"> - <caret line="177" column="0" lean-forward="false" selection-start-line="177" selection-start-column="0" selection-end-line="177" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="file_unix.go" pinned="false" current-in-tab="false"> - <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/os/file_unix.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="151"> - <caret line="233" column="55" lean-forward="false" selection-start-line="233" selection-start-column="55" selection-end-line="233" selection-end-column="55" /> - <folding /> - </state> - </provider> - </entry> - </file> - </leaf> - </component> - <component name="FindInProjectRecents"> - <findStrings> - <find>Read</find> - <find>.Read</find> - <find>.read</find> - <find>server</find> - <find>uint8</find> - <find>TightMinToCompress</find> - <find>mainloop</find> - <find>writeStartSession</find> - <find>padd</find> - <find>paddib</find> - <find>paddi</find> - <find>paddin</find> - <find>paddings</find> - <find>padding</find> - <find>paddingS</find> - <find>paddingSi</find> - <find>paddingSiz</find> - <find>read</find> - <find>paddingSize</find> - </findStrings> - </component> - <component name="Git.Settings"> - <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> - </component> - <component name="GradleLocalSettings"> - <option name="externalProjectsViewState"> - <projects_view /> - </option> - </component> - <component name="IdeDocumentHistory"> - <option name="CHANGED_PATHS"> - <list> - <option value="$PROJECT_DIR$/vnc/enc-tight.go" /> - <option value="$PROJECT_DIR$/vnc/encoding/enc-raw.go" /> - <option value="$PROJECT_DIR$/vnc/enc-raw.go" /> - <option value="$PROJECT_DIR$/vnc/common/client.go" /> - <option value="$PROJECT_DIR$/vnc/encoding/client.go" /> - <option value="$PROJECT_DIR$/main.go" /> - <option value="$PROJECT_DIR$/vnc/client.go" /> - <option value="$PROJECT_DIR$/vnc/enc-rre.go" /> - <option value="$PROJECT_DIR$/encodings/enc-raw.go" /> - <option value="$PROJECT_DIR$/vnc/client-conn.go" /> - <option value="$PROJECT_DIR$/vnc/server_messages.go" /> - <option value="$PROJECT_DIR$/common/readers.go" /> - <option value="$PROJECT_DIR$/listeners/recorder.go" /> - </list> - </option> - </component> - <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" /> - <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" /> - <component name="JsGulpfileManager"> - <detection-done>true</detection-done> - <sorting>DEFINITION_ORDER</sorting> - </component> - <component name="ProjectFrameBounds"> - <option name="y" value="23" /> - <option name="width" value="1280" /> - <option name="height" value="773" /> - </component> - <component name="ProjectLevelVcsManager" settingsEditedManually="true" /> - <component name="ProjectReloadState"> - <option name="STATE" value="1" /> - </component> - <component name="ProjectView"> - <navigator currentView="ProjectPane" proportions="" version="1"> - <flattenPackages /> - <showMembers /> - <showModules /> - <showLibraryContents /> - <hideEmptyPackages /> - <abbreviatePackageNames /> - <autoscrollToSource ProjectPane="true" /> - <autoscrollFromSource ProjectPane="true" /> - <sortByType /> - <manualOrder /> - <foldersAlwaysOnTop value="true" /> - </navigator> - <panes> - <pane id="Scope"> - <subPane subId="Problems"> - <PATH> - <PATH_ELEMENT USER_OBJECT="Root"> - <option name="myItemId" value="" /> - <option name="myItemType" value="" /> - </PATH_ELEMENT> - <PATH_ELEMENT USER_OBJECT="vncproxy"> - <option name="myItemId" value="" /> - <option name="myItemType" value="" /> - </PATH_ELEMENT> - <PATH_ELEMENT USER_OBJECT="vnc"> - <option name="myItemId" value="" /> - <option name="myItemType" value="" /> - </PATH_ELEMENT> - </PATH> - </subPane> - <subPane subId="Project Files"> - <PATH> - <PATH_ELEMENT USER_OBJECT="Root"> - <option name="myItemId" value="" /> - <option name="myItemType" value="" /> - </PATH_ELEMENT> - <PATH_ELEMENT USER_OBJECT="vncproxy"> - <option name="myItemId" value="" /> - <option name="myItemType" value="" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT USER_OBJECT="Root"> - <option name="myItemId" value="" /> - <option name="myItemType" value="" /> - </PATH_ELEMENT> - <PATH_ELEMENT USER_OBJECT="vncproxy"> - <option name="myItemId" value="" /> - <option name="myItemType" value="" /> - </PATH_ELEMENT> - <PATH_ELEMENT USER_OBJECT="vnc"> - <option name="myItemId" value="" /> - <option name="myItemType" value="" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT USER_OBJECT="Root"> - <option name="myItemId" value="" /> - <option name="myItemType" value="" /> - </PATH_ELEMENT> - <PATH_ELEMENT USER_OBJECT="vncproxy"> - <option name="myItemId" value="" /> - <option name="myItemType" value="" /> - </PATH_ELEMENT> - <PATH_ELEMENT USER_OBJECT="vnc"> - <option name="myItemId" value="" /> - <option name="myItemType" value="" /> - </PATH_ELEMENT> - <PATH_ELEMENT USER_OBJECT="common"> - <option name="myItemId" value="" /> - <option name="myItemType" value="" /> - </PATH_ELEMENT> - </PATH> - </subPane> - </pane> - <pane id="PackagesPane" /> - <pane id="ProjectPane"> - <subPane> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="External Libraries" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="External Libraries" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="Go SDK 1.8.3" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="src" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="External Libraries" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="Go SDK 1.8.3" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="src" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="runtime" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="External Libraries" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="Go SDK 1.8.3" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="src" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="os" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="External Libraries" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="Go SDK 1.8.3" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="src" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="io" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="External Libraries" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="Go SDK 1.8.3" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="src" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="encoding" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="External Libraries" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="Go SDK 1.8.3" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="src" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="encoding" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="binary" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="External Libraries" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="Go SDK 1.8.3" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="src" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="bytes" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="vnc" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="listeners" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="encodings" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="vncproxy" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="common" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> - </PATH_ELEMENT> - </PATH> - </subPane> - </pane> - <pane id="Scratches" /> - </panes> - </component> - <component name="PropertiesComponent"> - <property name="aspect.path.notification.shown" value="true" /> - <property name="last_opened_file_path" value="$PROJECT_DIR$" /> - <property name="WebServerToolWindowFactoryState" value="false" /> - <property name="settings.editor.selected.configurable" value="reference.settingsdialog.IDE.editor.colors.General" /> - <property name="go.libraries.notification.had.been.shown" value="true" /> - <property name="recentsLimit" value="5" /> - </component> - <component name="RecentsManager"> - <key name="MoveFile.RECENT_KEYS"> - <recent name="$PROJECT_DIR$/encodings" /> - <recent name="$PROJECT_DIR$" /> - <recent name="$PROJECT_DIR$/common" /> - <recent name="C:\Users\betzalel\Dropbox\go\src\vncproxy\vnc" /> - <recent name="C:\Users\betzalel\Dropbox\go\src\vncproxy\vnc\encoding" /> - </key> - </component> - <component name="RunDashboard"> - <option name="ruleStates"> - <list> - <RuleState> - <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> - </RuleState> - <RuleState> - <option name="name" value="StatusDashboardGroupingRule" /> - </RuleState> - </list> - </option> - </component> - <component name="RunManager" selected="Go Application.Build main.go and run"> - <configuration default="false" name="Build main.go and run" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true"> - <module name="vncproxy" /> - <working_directory value="$PROJECT_DIR$/" /> - <go_parameters value="-i" /> - <filePath value="$PROJECT_DIR$/main.go" /> - <kind value="PACKAGE" /> - <package value="vncproxy" /> - <method /> - </configuration> - <configuration default="false" name="Build main.go and run (1)" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true"> - <module name="vncproxy" /> - <working_directory value="$PROJECT_DIR$/" /> - <go_parameters value="-i -ldflags="-linkmode internal"" /> - <filePath value="$PROJECT_DIR$/main.go" /> - <kind value="FILE" /> - <package value="vncproxy" /> - <method /> - </configuration> - <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin"> - <module name="" /> - <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" /> - <option name="PROGRAM_PARAMETERS" /> - <predefined_log_file id="idea.log" enabled="true" /> - <method /> - </configuration> - <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android App"> - <module name="" /> - <option name="DEPLOY" value="true" /> - <option name="ARTIFACT_NAME" value="" /> - <option name="PM_INSTALL_OPTIONS" value="" /> - <option name="ACTIVITY_EXTRA_FLAGS" value="" /> - <option name="MODE" value="default_activity" /> - <option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" /> - <option name="PREFERRED_AVD" value="" /> - <option name="CLEAR_LOGCAT" value="false" /> - <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" /> - <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" /> - <option name="FORCE_STOP_RUNNING_APP" value="true" /> - <option name="DEBUGGER_TYPE" value="Java" /> - <option name="USE_LAST_SELECTED_DEVICE" value="false" /> - <option name="PREFERRED_AVD" value="" /> - <Java /> - <Profilers> - <option name="ENABLE_ADVANCED_PROFILING" value="true" /> - <option name="GAPID_ENABLED" value="false" /> - <option name="GAPID_DISABLE_PCS" value="false" /> - <option name="SUPPORT_LIB_ENABLED" value="true" /> - <option name="INSTRUMENTATION_ENABLED" value="true" /> - </Profilers> - <option name="DEEP_LINK" value="" /> - <option name="ACTIVITY_CLASS" value="" /> - <method /> - </configuration> - <configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests"> - <module name="" /> - <option name="TESTING_TYPE" value="0" /> - <option name="INSTRUMENTATION_RUNNER_CLASS" value="" /> - <option name="METHOD_NAME" value="" /> - <option name="CLASS_NAME" value="" /> - <option name="PACKAGE_NAME" value="" /> - <option name="EXTRA_OPTIONS" value="" /> - <option name="TARGET_SELECTION_MODE" value="EMULATOR" /> - <option name="PREFERRED_AVD" value="" /> - <option name="CLEAR_LOGCAT" value="false" /> - <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" /> - <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" /> - <option name="FORCE_STOP_RUNNING_APP" value="true" /> - <option name="DEBUGGER_TYPE" value="Java" /> - <option name="USE_LAST_SELECTED_DEVICE" value="false" /> - <option name="PREFERRED_AVD" value="" /> - <Java /> - <Profilers> - <option name="ENABLE_ADVANCED_PROFILING" value="true" /> - <option name="GAPID_ENABLED" value="false" /> - <option name="GAPID_DISABLE_PCS" value="false" /> - <option name="SUPPORT_LIB_ENABLED" value="true" /> - <option name="INSTRUMENTATION_ENABLED" value="true" /> - </Profilers> - <method /> - </configuration> - <configuration default="true" type="Applet" factoryName="Applet"> - <option name="WIDTH" value="400" /> - <option name="HEIGHT" value="300" /> - <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" /> - <module /> - <method /> - </configuration> - <configuration default="true" type="Application" factoryName="Application"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <option name="MAIN_CLASS_NAME" /> - <option name="VM_PARAMETERS" /> - <option name="PROGRAM_PARAMETERS" /> - <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> - <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> - <option name="ALTERNATIVE_JRE_PATH" /> - <option name="ENABLE_SWING_INSPECTOR" value="false" /> - <option name="ENV_VARIABLES" /> - <option name="PASS_PARENT_ENVS" value="true" /> - <module name="" /> - <envs /> - <method /> - </configuration> - <configuration default="true" type="ArquillianJUnit" factoryName="" nameIsGenerated="true"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <module name="" /> - <option name="arquillianRunConfiguration"> - <value> - <option name="containerStateName" value="" /> - </value> - </option> - <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> - <option name="ALTERNATIVE_JRE_PATH" /> - <option name="PACKAGE_NAME" /> - <option name="MAIN_CLASS_NAME" /> - <option name="METHOD_NAME" /> - <option name="TEST_OBJECT" value="class" /> - <option name="VM_PARAMETERS" /> - <option name="PARAMETERS" /> - <option name="WORKING_DIRECTORY" /> - <option name="ENV_VARIABLES" /> - <option name="PASS_PARENT_ENVS" value="true" /> - <option name="TEST_SEARCH_SCOPE"> - <value defaultName="singleModule" /> - </option> - <envs /> - <patterns /> - <method /> - </configuration> - <configuration default="true" type="ArquillianTestNG" factoryName=""> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <module name="" /> - <option name="arquillianRunConfiguration"> - <value> - <option name="containerStateName" value="" /> - </value> - </option> - <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> - <option name="ALTERNATIVE_JRE_PATH" /> - <option name="SUITE_NAME" /> - <option name="PACKAGE_NAME" /> - <option name="MAIN_CLASS_NAME" /> - <option name="METHOD_NAME" /> - <option name="GROUP_NAME" /> - <option name="TEST_OBJECT" value="CLASS" /> - <option name="VM_PARAMETERS" /> - <option name="PARAMETERS" /> - <option name="WORKING_DIRECTORY" /> - <option name="OUTPUT_DIRECTORY" /> - <option name="ANNOTATION_TYPE" /> - <option name="ENV_VARIABLES" /> - <option name="PASS_PARENT_ENVS" value="true" /> - <option name="TEST_SEARCH_SCOPE"> - <value defaultName="singleModule" /> - </option> - <option name="USE_DEFAULT_REPORTERS" value="false" /> - <option name="PROPERTIES_FILE" /> - <envs /> - <properties /> - <listeners /> - <method /> - </configuration> - <configuration default="true" type="Cold Fusion runner description" factoryName="Cold Fusion" custom_browser="" web_path=""> - <method /> - </configuration> - <configuration default="true" type="CucumberJavaRunConfigurationType" factoryName="Cucumber java"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <option name="myFilePath" /> - <option name="GLUE" /> - <option name="myNameFilter" /> - <option name="myGeneratedName" /> - <option name="MAIN_CLASS_NAME" /> - <option name="VM_PARAMETERS" /> - <option name="PROGRAM_PARAMETERS" /> - <option name="WORKING_DIRECTORY" /> - <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> - <option name="ALTERNATIVE_JRE_PATH" /> - <option name="ENABLE_SWING_INSPECTOR" value="false" /> - <option name="ENV_VARIABLES" /> - <option name="PASS_PARENT_ENVS" value="true" /> - <module name="" /> - <envs /> - <method /> - </configuration> - <configuration default="true" type="FlashRunConfigurationType" factoryName="Flash App"> - <option name="BCName" value="" /> - <option name="IOSSimulatorSdkPath" value="" /> - <option name="adlOptions" value="" /> - <option name="airProgramParameters" value="" /> - <option name="appDescriptorForEmulator" value="Android" /> - <option name="debugTransport" value="USB" /> - <option name="debuggerSdkRaw" value="BC SDK" /> - <option name="emulator" value="NexusOne" /> - <option name="emulatorAdlOptions" value="" /> - <option name="fastPackaging" value="true" /> - <option name="fullScreenHeight" value="0" /> - <option name="fullScreenWidth" value="0" /> - <option name="launchUrl" value="false" /> - <option name="launcherParameters"> - <LauncherParameters> - <option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" /> - <option name="launcherType" value="OSDefault" /> - <option name="newPlayerInstance" value="false" /> - <option name="playerPath" value="/Applications/Flash Player Debugger.app" /> - </LauncherParameters> - </option> - <option name="mobileRunTarget" value="Emulator" /> - <option name="moduleName" value="" /> - <option name="overriddenMainClass" value="" /> - <option name="overriddenOutputFileName" value="" /> - <option name="overrideMainClass" value="false" /> - <option name="runTrusted" value="true" /> - <option name="screenDpi" value="0" /> - <option name="screenHeight" value="0" /> - <option name="screenWidth" value="0" /> - <option name="url" value="http://" /> - <option name="usbDebugPort" value="7936" /> - <method /> - </configuration> - <configuration default="true" type="FlexUnitRunConfigurationType" factoryName="FlexUnit" appDescriptorForEmulator="Android" class_name="" emulatorAdlOptions="" method_name="" package_name="" scope="Class"> - <option name="BCName" value="" /> - <option name="launcherParameters"> - <LauncherParameters> - <option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" /> - <option name="launcherType" value="OSDefault" /> - <option name="newPlayerInstance" value="false" /> - <option name="playerPath" value="/Applications/Flash Player Debugger.app" /> - </LauncherParameters> - </option> - <option name="moduleName" value="" /> - <option name="trusted" value="true" /> - <method /> - </configuration> - <configuration default="true" type="GoApplicationRunConfiguration" factoryName="Go Application"> - <module name="vncproxy" /> - <working_directory value="$PROJECT_DIR$/" /> - <go_parameters value="-i" /> - <filePath value="$PROJECT_DIR$/" /> - <kind value="FILE" /> - <package value="vncproxy" /> - <method /> - </configuration> - <configuration default="true" type="GoRunFileConfiguration" factoryName="Go Single File"> - <module name="vncproxy" /> - <working_directory value="$PROJECT_DIR$" /> - <filePath value="$PROJECT_DIR$" /> - <method /> - </configuration> - <configuration default="true" type="GoTestRunConfiguration" factoryName="Go Test"> - <module name="vncproxy" /> - <working_directory value="$PROJECT_DIR$/" /> - <go_parameters value="-i" /> - <framework value="gotest" /> - <kind value="DIRECTORY" /> - <package value="vncproxy" /> - <method /> - </configuration> - <configuration default="true" type="GradleRunConfiguration" factoryName="Gradle"> - <ExternalSystemSettings> - <option name="executionName" /> - <option name="externalProjectPath" /> - <option name="externalSystemIdString" value="GRADLE" /> - <option name="scriptParameters" /> - <option name="taskDescriptions"> - <list /> - </option> - <option name="taskNames"> - <list /> - </option> - <option name="vmOptions" /> - </ExternalSystemSettings> - <method /> - </configuration> - <configuration default="true" type="GrailsRunConfigurationType" factoryName="Grails"> - <setting name="vmparams" value="" /> - <setting name="cmdLine" value="run-app" /> - <setting name="passParentEnv" value="true" /> - <setting name="launchBrowser" value="false" /> - <setting name="launchBrowserUrl" value="" /> - <setting name="depsClasspath" value="false" /> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <method /> - </configuration> - <configuration default="true" type="JUnit" factoryName="JUnit"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <module name="" /> - <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> - <option name="ALTERNATIVE_JRE_PATH" /> - <option name="PACKAGE_NAME" /> - <option name="MAIN_CLASS_NAME" /> - <option name="METHOD_NAME" /> - <option name="TEST_OBJECT" value="class" /> - <option name="VM_PARAMETERS" value="-ea" /> - <option name="PARAMETERS" /> - <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" /> - <option name="ENV_VARIABLES" /> - <option name="PASS_PARENT_ENVS" value="true" /> - <option name="TEST_SEARCH_SCOPE"> - <value defaultName="singleModule" /> - </option> - <envs /> - <patterns /> - <method /> - </configuration> - <configuration default="true" type="JarApplication" factoryName="JAR Application"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <envs /> - <method /> - </configuration> - <configuration default="true" type="Java Scratch" factoryName="Java Scratch"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <option name="SCRATCH_FILE_ID" value="0" /> - <option name="MAIN_CLASS_NAME" /> - <option name="VM_PARAMETERS" /> - <option name="PROGRAM_PARAMETERS" /> - <option name="WORKING_DIRECTORY" /> - <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> - <option name="ALTERNATIVE_JRE_PATH" /> - <option name="ENABLE_SWING_INSPECTOR" value="false" /> - <option name="ENV_VARIABLES" /> - <option name="PASS_PARENT_ENVS" value="true" /> - <module name="" /> - <envs /> - <method /> - </configuration> - <configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest"> - <node-interpreter value="project" /> - <working-dir value="" /> - <envs /> - <scope-kind value="ALL" /> - <method /> - </configuration> - <configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor"> - <config-file value="" /> - <node-interpreter value="project" /> - <envs /> - <method /> - </configuration> - <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug"> - <method /> - </configuration> - <configuration default="true" type="JetRunConfigurationType" factoryName="Kotlin"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <option name="MAIN_CLASS_NAME" /> - <option name="VM_PARAMETERS" /> - <option name="PROGRAM_PARAMETERS" /> - <option name="WORKING_DIRECTORY" /> - <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> - <option name="ALTERNATIVE_JRE_PATH" /> - <option name="PASS_PARENT_ENVS" value="true" /> - <module name="vncproxy" /> - <envs /> - <method /> - </configuration> - <configuration default="true" type="KotlinStandaloneScriptRunConfigurationType" factoryName="Kotlin script"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <option name="filePath" /> - <option name="vmParameters" /> - <option name="alternativeJrePath" /> - <option name="programParameters" /> - <option name="passParentEnvs" value="true" /> - <option name="workingDirectory" /> - <option name="isAlternativeJrePathEnabled" value="false" /> - <envs /> - <method /> - </configuration> - <configuration default="true" type="Remote" factoryName="Remote"> - <option name="USE_SOCKET_TRANSPORT" value="true" /> - <option name="SERVER_MODE" value="false" /> - <option name="SHMEM_ADDRESS" value="javadebug" /> - <option name="HOST" value="localhost" /> - <option name="PORT" value="5005" /> - <method /> - </configuration> - <configuration default="true" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <module name="" /> - <envs /> - <method /> - </configuration> - <configuration default="true" type="TestNG" factoryName="TestNG"> - <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> - <module name="" /> - <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> - <option name="ALTERNATIVE_JRE_PATH" /> - <option name="SUITE_NAME" /> - <option name="PACKAGE_NAME" /> - <option name="MAIN_CLASS_NAME" /> - <option name="METHOD_NAME" /> - <option name="GROUP_NAME" /> - <option name="TEST_OBJECT" value="CLASS" /> - <option name="VM_PARAMETERS" value="-ea" /> - <option name="PARAMETERS" /> - <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> - <option name="OUTPUT_DIRECTORY" /> - <option name="ANNOTATION_TYPE" /> - <option name="ENV_VARIABLES" /> - <option name="PASS_PARENT_ENVS" value="true" /> - <option name="TEST_SEARCH_SCOPE"> - <value defaultName="singleModule" /> - </option> - <option name="USE_DEFAULT_REPORTERS" value="false" /> - <option name="PROPERTIES_FILE" /> - <envs /> - <properties /> - <listeners /> - <method /> - </configuration> - <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js"> - <node-interpreter>project</node-interpreter> - <node-options /> - <gulpfile /> - <tasks /> - <arguments /> - <envs /> - <method /> - </configuration> - <configuration default="true" type="js.build_tools.npm" factoryName="npm"> - <command value="run" /> - <scripts /> - <node-interpreter value="project" /> - <envs /> - <method /> - </configuration> - <configuration default="true" type="osgi.bnd.run" factoryName="Run Launcher"> - <method /> - </configuration> - <configuration default="true" type="osgi.bnd.run" factoryName="Test Launcher (JUnit)"> - <method /> - </configuration> - <configuration default="false" name="runVnc" type="GoRunFileConfiguration" factoryName="Go Single File"> - <module name="vncproxy" /> - <working_directory value="$PROJECT_DIR$/" /> - <filePath value="$PROJECT_DIR$/main.go" /> - <method /> - </configuration> - <configuration default="false" name="Unnamed" type="GoRunFileConfiguration" factoryName="Go Single File"> - <module name="vncproxy" /> - <working_directory value="$PROJECT_DIR$" /> - <filePath value="$PROJECT_DIR$/main.go" /> - <method /> - </configuration> - <list size="4"> - <item index="0" class="java.lang.String" itemvalue="Go Single File.runVnc" /> - <item index="1" class="java.lang.String" itemvalue="Go Single File.Unnamed" /> - <item index="2" class="java.lang.String" itemvalue="Go Application.Build main.go and run" /> - <item index="3" class="java.lang.String" itemvalue="Go Application.Build main.go and run (1)" /> - </list> - <recent_temporary> - <list size="2"> - <item index="0" class="java.lang.String" itemvalue="Go Application.Build main.go and run" /> - <item index="1" class="java.lang.String" itemvalue="Go Application.Build main.go and run (1)" /> - </list> - </recent_temporary> - <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android Application"> - <module name="" /> - <option name="ACTIVITY_CLASS" value="" /> - <option name="MODE" value="default_activity" /> - <option name="DEPLOY" value="true" /> - <option name="ARTIFACT_NAME" value="" /> - <option name="TARGET_SELECTION_MODE" value="EMULATOR" /> - <option name="USE_LAST_SELECTED_DEVICE" value="false" /> - <option name="PREFERRED_AVD" value="" /> - <option name="USE_COMMAND_LINE" value="true" /> - <option name="COMMAND_LINE" value="" /> - <option name="WIPE_USER_DATA" value="false" /> - <option name="DISABLE_BOOT_ANIMATION" value="false" /> - <option name="NETWORK_SPEED" value="full" /> - <option name="NETWORK_LATENCY" value="none" /> - <option name="CLEAR_LOGCAT" value="false" /> - <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" /> - <option name="FILTER_LOGCAT_AUTOMATICALLY" value="true" /> - <method /> - </configuration> - </component> - <component name="ShelveChangesManager" show_recycled="false"> - <option name="remove_strategy" value="false" /> - </component> - <component name="SvnConfiguration"> - <configuration /> - </component> - <component name="TaskManager"> - <task active="true" id="Default" summary="Default task"> - <changelist id="aeba8696-a0e4-4bdc-984c-b9ca26151c10" name="Default" comment="" /> - <created>1497275544790</created> - <option name="number" value="Default" /> - <option name="presentableId" value="Default" /> - <updated>1497275544790</updated> - <workItem from="1497275546094" duration="650000" /> - <workItem from="1497276271928" duration="154000" /> - <workItem from="1497276427351" duration="817000" /> - <workItem from="1497277513428" duration="371000" /> - <workItem from="1497278098752" duration="3181000" /> - <workItem from="1497313424857" duration="102000" /> - <workItem from="1497313550726" duration="2070000" /> - <workItem from="1497315693804" duration="252000" /> - <workItem from="1497315971989" duration="1909000" /> - <workItem from="1497322223215" duration="351000" /> - <workItem from="1497605012099" duration="9448000" /> - </task> - <servers /> - </component> - <component name="TimeTrackingManager"> - <option name="totallyTimeSpent" value="20500000" /> - </component> - <component name="TodoView" selected-index="2"> - <todo-panel id="selected-file"> - <is-autoscroll-to-source value="true" /> - </todo-panel> - <todo-panel id="all"> - <are-packages-shown value="true" /> - <is-autoscroll-to-source value="true" /> - </todo-panel> - </component> - <component name="ToolWindowManager"> - <frame x="0" y="23" width="1280" height="773" extended-state="1" /> - <editor active="true" /> - <layout> - <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Nl-Palette" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> - <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.37151247" sideWeight="0.37883684" order="7" side_tool="true" content_ui="tabs" /> - <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Properties" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> - <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> - <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> - <window_info id="Debug" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.37151247" sideWeight="0.6211632" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32892805" sideWeight="0.48869145" order="6" side_tool="false" content_ui="tabs" /> - <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Palette	" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> - <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> - <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> - <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.23054332" sideWeight="0.66220737" order="2" side_tool="false" content_ui="tabs" /> - <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32892805" sideWeight="0.49353796" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32892805" sideWeight="0.48707592" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.1898223" sideWeight="0.4947994" order="0" side_tool="false" content_ui="combo" /> - <window_info id="Problems" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32892805" sideWeight="0.48707592" order="8" side_tool="false" content_ui="tabs" /> - <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> - <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.14658849" sideWeight="0.50520056" order="2" side_tool="true" content_ui="tabs" /> - <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> - <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> - <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> - <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> - <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> - </layout> - </component> - <component name="TypeScriptGeneratedFilesManager"> - <option name="processedProjectFiles" value="true" /> - </component> - <component name="Vcs.Log.UiProperties"> - <option name="RECENTLY_FILTERED_USER_GROUPS"> - <collection /> - </option> - <option name="RECENTLY_FILTERED_BRANCH_GROUPS"> - <collection /> - </option> - </component> - <component name="VcsContentAnnotationSettings"> - <option name="myLimit" value="2678400000" /> - </component> - <component name="XDebuggerManager"> - <breakpoint-manager> - <breakpoints> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/vnc/server_messages.go</url> - <line>32</line> - <properties /> - <option name="timeStamp" value="15" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/vnc/client-conn.go</url> - <line>482</line> - <properties /> - <option name="timeStamp" value="17" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/listeners/recorder.go</url> - <line>115</line> - <properties /> - <option name="timeStamp" value="19" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/listeners/recorder.go</url> - <line>103</line> - <properties /> - <option name="timeStamp" value="20" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/vnc/server_messages.go</url> - <line>115</line> - <properties /> - <option name="timeStamp" value="26" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/encodings/enc-tight.go</url> - <line>113</line> - <properties /> - <option name="timeStamp" value="32" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/encodings/enc-tight.go</url> - <line>160</line> - <properties /> - <option name="timeStamp" value="34" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/encodings/enc-tight.go</url> - <line>168</line> - <properties /> - <option name="timeStamp" value="35" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/encodings/enc-tight.go</url> - <line>177</line> - <properties /> - <option name="timeStamp" value="36" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/encodings/enc-tight.go</url> - <line>180</line> - <properties /> - <option name="timeStamp" value="38" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/common/readers.go</url> - <line>138</line> - <properties /> - <option name="timeStamp" value="39" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/common/readers.go</url> - <line>147</line> - <properties /> - <option name="timeStamp" value="40" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/common/readers.go</url> - <line>137</line> - <properties /> - <option name="timeStamp" value="41" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/listeners/recorder.go</url> - <line>28</line> - <properties /> - <option name="timeStamp" value="42" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/listeners/recorder.go</url> - <line>77</line> - <properties /> - <option name="timeStamp" value="44" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/listeners/recorder.go</url> - <line>108</line> - <properties /> - <option name="timeStamp" value="45" /> - </line-breakpoint> - <line-breakpoint type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/listeners/recorder.go</url> - <line>119</line> - <properties /> - <option name="timeStamp" value="46" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/listeners/recorder.go</url> - <line>142</line> - <properties /> - <option name="timeStamp" value="48" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="DlvLineBreakpoint"> - <url>file://$PROJECT_DIR$/listeners/recorder.go</url> - <line>138</line> - <properties /> - <option name="timeStamp" value="49" /> - </line-breakpoint> - </breakpoints> - <breakpoints-dialog> - <breakpoints-dialog /> - </breakpoints-dialog> - <option name="time" value="50" /> - </breakpoint-manager> - <watches-manager> - <configuration name="GoApplicationRunConfiguration"> - <watch expression="r.buffer.Len()" /> - <watch expression="paddedSize" /> - </configuration> - </watches-manager> - </component> - <component name="antWorkspaceConfiguration"> - <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" /> - <option name="FILTER_TARGETS" value="false" /> - </component> - <component name="editorHistoryManager"> - <entry file="file://$PROJECT_DIR$/vnc/client-conn.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="476"> - <caret line="28" column="48" lean-forward="false" selection-start-line="28" selection-start-column="48" selection-end-line="28" selection-end-column="48" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/main.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="187"> - <caret line="17" column="5" lean-forward="false" selection-start-line="17" selection-start-column="5" selection-end-line="17" selection-end-column="5" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/enc-tight.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="935"> - <caret line="59" column="23" lean-forward="false" selection-start-line="59" selection-start-column="23" selection-end-line="59" selection-end-column="23" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/client.go" /> - <entry file="file://$PROJECT_DIR$/vnc/client-conn.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="476"> - <caret line="28" column="48" lean-forward="false" selection-start-line="28" selection-start-column="48" selection-end-line="28" selection-end-column="48" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/main.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="289"> - <caret line="17" column="5" lean-forward="true" selection-start-line="17" selection-start-column="5" selection-end-line="17" selection-end-column="5" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/enc-tight.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="1003"> - <caret line="59" column="23" lean-forward="false" selection-start-line="59" selection-start-column="23" selection-end-line="59" selection-end-column="23" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/client.go" /> - <entry file="file://$PROJECT_DIR$/vnc/client-conn.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="315"> - <caret line="28" column="48" lean-forward="false" selection-start-line="28" selection-start-column="48" selection-end-line="28" selection-end-column="48" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/enc-tight.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="825"> - <caret line="59" column="23" lean-forward="false" selection-start-line="59" selection-start-column="23" selection-end-line="59" selection-end-column="23" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/main.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="360"> - <caret line="24" column="60" lean-forward="false" selection-start-line="24" selection-start-column="60" selection-end-line="24" selection-end-column="60" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/client.go" /> - <entry file="file://$PROJECT_DIR$/vnc/client-conn.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/client.go" /> - <entry file="file://$PROJECT_DIR$/vnc/client-conn.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="476"> - <caret line="28" column="48" lean-forward="false" selection-start-line="28" selection-start-column="48" selection-end-line="28" selection-end-column="48" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/enc-tight.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="1003"> - <caret line="59" column="23" lean-forward="false" selection-start-line="59" selection-start-column="23" selection-end-line="59" selection-end-column="23" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/main.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="289"> - <caret line="17" column="5" lean-forward="true" selection-start-line="17" selection-start-column="5" selection-end-line="17" selection-end-column="5" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/client.go" /> - <entry file="file://$PROJECT_DIR$/vnc/client.go" /> - <entry file="file://$PROJECT_DIR$/vnc/client-conn.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="315"> - <caret line="28" column="48" lean-forward="false" selection-start-line="28" selection-start-column="48" selection-end-line="28" selection-end-column="48" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/enc-tight.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="825"> - <caret line="59" column="23" lean-forward="false" selection-start-line="59" selection-start-column="23" selection-end-line="59" selection-end-column="23" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/main.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="360"> - <caret line="24" column="60" lean-forward="false" selection-start-line="24" selection-start-column="60" selection-end-line="24" selection-end-column="60" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/client.go" /> - <entry file="file://$PROJECT_DIR$/vnc/client-conn.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/client.go" /> - <entry file="file:///usr/local/Cellar/go/1.8/libexec/src/os/file_unix.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="1785"> - <caret line="122" column="0" lean-forward="false" selection-start-line="122" selection-start-column="0" selection-end-line="122" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/README.md"> - <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> - <state split_layout="SPLIT"> - <first_editor relative-caret-position="105"> - <caret line="7" column="0" lean-forward="true" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" /> - </first_editor> - <second_editor /> - </state> - </provider> - </entry> - <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/bytes/buffer.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="150"> - <caret line="14" column="64" lean-forward="false" selection-start-line="14" selection-start-column="64" selection-end-line="14" selection-end-column="64" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/client.go" /> - <entry file="file://$PROJECT_DIR$/vnc/enc-rre.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="465"> - <caret line="31" column="0" lean-forward="false" selection-start-line="31" selection-start-column="0" selection-end-line="31" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/Logger.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/enc-hextile.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="675"> - <caret line="45" column="41" lean-forward="false" selection-start-line="45" selection-start-column="41" selection-end-line="45" selection-end-column="41" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/encodings/enc-raw.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="255"> - <caret line="19" column="24" lean-forward="false" selection-start-line="19" selection-start-column="24" selection-end-line="19" selection-end-column="24" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/client_test.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/color.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/enc-tight.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="60"> - <caret line="8" column="0" lean-forward="false" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="31" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/client_auth.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/client_auth_test.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/listeners/multiListener.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="90"> - <caret line="6" column="1" lean-forward="true" selection-start-line="6" selection-start-column="1" selection-end-line="6" selection-end-column="1" /> - <folding> - <element signature="e#19#43#0" expanded="false" /> - </folding> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/listeners/pass-to.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="120"> - <caret line="9" column="44" lean-forward="false" selection-start-line="9" selection-start-column="44" selection-end-line="9" selection-end-column="44" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/common/Logger.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/os/file_unix.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="151"> - <caret line="233" column="55" lean-forward="false" selection-start-line="233" selection-start-column="55" selection-end-line="233" selection-end-column="55" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/runtime/asm_amd64.s"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="129"> - <caret line="2196" column="0" lean-forward="false" selection-start-line="2196" selection-start-column="0" selection-end-line="2196" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/encoding/binary/binary.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="191"> - <caret line="171" column="9" lean-forward="false" selection-start-line="167" selection-start-column="22" selection-end-line="171" selection-end-column="9" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/io/io.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="134"> - <caret line="306" column="0" lean-forward="false" selection-start-line="306" selection-start-column="0" selection-end-line="306" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/main.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="56"> - <caret line="23" column="42" lean-forward="false" selection-start-line="23" selection-start-column="42" selection-end-line="23" selection-end-column="42" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/client-conn.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="254"> - <caret line="482" column="0" lean-forward="false" selection-start-line="482" selection-start-column="0" selection-end-line="482" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/vnc/server_messages.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="63"> - <caret line="32" column="0" lean-forward="false" selection-start-line="32" selection-start-column="0" selection-end-line="32" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/encodings/enc-tight.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="207"> - <caret line="177" column="0" lean-forward="false" selection-start-line="177" selection-start-column="0" selection-end-line="177" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/common/readers.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="134"> - <caret line="137" column="0" lean-forward="false" selection-start-line="137" selection-start-column="0" selection-end-line="137" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/listeners/recorder.go"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="220"> - <caret line="138" column="0" lean-forward="false" selection-start-line="138" selection-start-column="0" selection-end-line="138" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - </component> - <component name="masterDetails"> - <states> - <state key="ProjectJDKs.UI"> - <settings> - <last-edited>Go 1.6.2</last-edited> - <splitter-proportions> - <option name="proportions"> - <list> - <option value="0.2" /> - </list> - </option> - </splitter-proportions> - </settings> - </state> - </states> - </component> +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ChangeListManager"> + <list default="true" id="a5d84862-9821-4d30-9a77-6235b55d6727" name="Default" comment=""> + <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/.name" afterPath="" /> + <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/compiler.xml" afterPath="" /> + <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/copyright/profiles_settings.xml" afterPath="" /> + <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/vncproxy.iml" afterPath="" /> + <change type="DELETED" beforePath="$PROJECT_DIR$/vnc/pixel_format.go" afterPath="" /> + <change type="DELETED" beforePath="$PROJECT_DIR$/vnc/server_messages.go" afterPath="" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/libraries/GOPATH__vncproxy_.xml" afterPath="$PROJECT_DIR$/.idea/libraries/GOPATH__vncproxy_.xml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="$PROJECT_DIR$/.idea/misc.xml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/modules.xml" afterPath="$PROJECT_DIR$/.idea/modules.xml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/vcs.xml" afterPath="$PROJECT_DIR$/.idea/vcs.xml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.vscode/launch.json" afterPath="$PROJECT_DIR$/.vscode/launch.json" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/encoding.go" afterPath="$PROJECT_DIR$/common/encoding.go" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/readers.go" afterPath="$PROJECT_DIR$/common/readers.go" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/rectangle.go" afterPath="$PROJECT_DIR$/common/rectangle.go" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-rre.go" afterPath="$PROJECT_DIR$/encodings/enc-rre.go" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-tight.go" afterPath="$PROJECT_DIR$/encodings/enc-tight.go" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/listeners/pass-to.go" afterPath="$PROJECT_DIR$/listeners/pass-to.go" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/listeners/recorder.go" afterPath="$PROJECT_DIR$/listeners/recorder.go" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/main.go" afterPath="$PROJECT_DIR$/main.go" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/client-conn.go" afterPath="$PROJECT_DIR$/vnc/client-conn.go" /> + </list> + <ignored path="$PROJECT_DIR$/out/" /> + <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> + <option name="TRACKING_ENABLED" value="true" /> + <option name="SHOW_DIALOG" value="false" /> + <option name="HIGHLIGHT_CONFLICTS" value="true" /> + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> + <option name="LAST_RESOLUTION" value="IGNORE" /> + </component> + <component name="CoverageDataManager"> + <SUITE FILE_PATH="coverage/vncproxy$test_server_.coverage" NAME="test server Coverage Results" MODIFIED="1497968383165" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="GoCoverage" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" /> + </component> + <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" /> + <component name="FileEditorManager"> + <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> + <file leaf-file-name="main.go" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/main.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="240"> + <caret line="23" column="26" lean-forward="false" selection-start-line="23" selection-start-column="26" selection-end-line="23" selection-end-column="26" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="server.go" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/server/server.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="2040"> + <caret line="144" column="0" lean-forward="true" selection-start-line="144" selection-start-column="0" selection-end-line="144" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="server-message.go" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/common/server-message.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="300"> + <caret line="20" column="21" lean-forward="false" selection-start-line="20" selection-start-column="4" selection-end-line="20" selection-end-column="21" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="client-message.go" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/common/client-message.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="20"> + <caret line="28" column="1" lean-forward="true" selection-start-line="28" selection-start-column="1" selection-end-line="28" selection-end-column="1" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="enc-copy-rect.go" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/encodings/enc-copy-rect.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="0"> + <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="enc-raw.go" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/encodings/enc-raw.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="0"> + <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="server_test.go" pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/server/server_test.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="255"> + <caret line="24" column="37" lean-forward="false" selection-start-line="24" selection-start-column="37" selection-end-line="24" selection-end-column="37" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="client_test.go" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/vnc/client_test.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="195"> + <caret line="29" column="1" lean-forward="true" selection-start-line="29" selection-start-column="1" selection-end-line="29" selection-end-column="1" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="server-conn.go" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/server/server-conn.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="195"> + <caret line="18" column="38" lean-forward="true" selection-start-line="18" selection-start-column="38" selection-end-line="18" selection-end-column="38" /> + <folding /> + </state> + </provider> + </entry> + </file> + </leaf> + </component> + <component name="FindInProjectRecents"> + <findStrings> + <find>PixelFormat</find> + <find>setpixrl</find> + <find>writePixelFormat</find> + <find>nil,</find> + <find>binary.Write</find> + <find>WaitGroup</find> + <find>SetPixelFormat</find> + <find>authtext</find> + <find>ServerConfig</find> + <find>serverinit</find> + <find>uint16</find> + <find>writeto</find> + <find>ServerServerInitHandler</find> + <find>r</find> + <find>rfhc</find> + <find>rfh</find> + <find>rfher</find> + <find>rfhera</find> + <find>rfherad</find> + <find>rferad</find> + <find>rfberad</find> + <find>rfbrad</find> + <find>rfbread</find> + <find>rfbreadh</find> + <find>rfbreadhel</find> + <find>rfbreadhelper</find> + <find>rfbreadhelper{</find> + <find>mainLoop</find> + <find>NewServerConn</find> + <find>Serve</find> + </findStrings> + </component> + <component name="Git.Settings"> + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> + </component> + <component name="GradleLocalSettings"> + <option name="externalProjectsViewState"> + <projects_view /> + </option> + </component> + <component name="IdeDocumentHistory"> + <option name="CHANGED_PATHS"> + <list> + <option value="$PROJECT_DIR$/main.go" /> + <option value="$PROJECT_DIR$/server/client-messages.go" /> + <option value="$PROJECT_DIR$/vnc/pixel-format.go" /> + <option value="$PROJECT_DIR$/common/encoding.go" /> + <option value="$PROJECT_DIR$/server/security.go" /> + <option value="$PROJECT_DIR$/server/server-conn.go" /> + <option value="$PROJECT_DIR$/server/handlers.go" /> + <option value="$PROJECT_DIR$/server/server_test.go" /> + <option value="$PROJECT_DIR$/server/server.go" /> + </list> + </option> + </component> + <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" /> + <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" /> + <component name="JsGulpfileManager"> + <detection-done>true</detection-done> + <sorting>DEFINITION_ORDER</sorting> + </component> + <component name="ProjectFrameBounds"> + <option name="width" value="1280" /> + <option name="height" value="800" /> + </component> + <component name="ProjectView"> + <navigator currentView="ProjectPane" proportions="" version="1"> + <flattenPackages /> + <showMembers /> + <showModules /> + <showLibraryContents /> + <hideEmptyPackages /> + <abbreviatePackageNames /> + <autoscrollToSource /> + <autoscrollFromSource ProjectPane="true" /> + <sortByType /> + <manualOrder /> + <foldersAlwaysOnTop value="true" /> + </navigator> + <panes> + <pane id="ProjectPane"> + <subPane> + <PATH> + <PATH_ELEMENT> + <option name="myItemId" value="vncproxy" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="vncproxy" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + </PATH> + <PATH> + <PATH_ELEMENT> + <option name="myItemId" value="vncproxy" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="vncproxy" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="vnc" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + </PATH> + <PATH> + <PATH_ELEMENT> + <option name="myItemId" value="vncproxy" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="vncproxy" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="server" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + </PATH> + <PATH> + <PATH_ELEMENT> + <option name="myItemId" value="vncproxy" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="vncproxy" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="encodings" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + </PATH> + <PATH> + <PATH_ELEMENT> + <option name="myItemId" value="vncproxy" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="vncproxy" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + <PATH_ELEMENT> + <option name="myItemId" value="common" /> + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> + </PATH_ELEMENT> + </PATH> + </subPane> + </pane> + <pane id="Scope" /> + <pane id="Scratches" /> + <pane id="PackagesPane" /> + </panes> + </component> + <component name="PropertiesComponent"> + <property name="WebServerToolWindowFactoryState" value="false" /> + <property name="aspect.path.notification.shown" value="true" /> + <property name="last_opened_file_path" value="$PROJECT_DIR$/vnc" /> + <property name="FullScreen" value="true" /> + </component> + <component name="RunDashboard"> + <option name="ruleStates"> + <list> + <RuleState> + <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> + </RuleState> + <RuleState> + <option name="name" value="StatusDashboardGroupingRule" /> + </RuleState> + </list> + </option> + </component> + <component name="RunManager" selected="Go Test.test server "> + <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin"> + <module name="" /> + <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" /> + <option name="PROGRAM_PARAMETERS" /> + <predefined_log_file id="idea.log" enabled="true" /> + <method /> + </configuration> + <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android App"> + <module name="" /> + <option name="DEPLOY" value="true" /> + <option name="ARTIFACT_NAME" value="" /> + <option name="PM_INSTALL_OPTIONS" value="" /> + <option name="ACTIVITY_EXTRA_FLAGS" value="" /> + <option name="MODE" value="default_activity" /> + <option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" /> + <option name="PREFERRED_AVD" value="" /> + <option name="CLEAR_LOGCAT" value="false" /> + <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" /> + <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" /> + <option name="FORCE_STOP_RUNNING_APP" value="true" /> + <option name="DEBUGGER_TYPE" value="Java" /> + <option name="USE_LAST_SELECTED_DEVICE" value="false" /> + <option name="PREFERRED_AVD" value="" /> + <Java /> + <Profilers> + <option name="ENABLE_ADVANCED_PROFILING" value="true" /> + <option name="GAPID_ENABLED" value="false" /> + <option name="GAPID_DISABLE_PCS" value="false" /> + <option name="SUPPORT_LIB_ENABLED" value="true" /> + <option name="INSTRUMENTATION_ENABLED" value="true" /> + </Profilers> + <option name="DEEP_LINK" value="" /> + <option name="ACTIVITY_CLASS" value="" /> + <method /> + </configuration> + <configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests"> + <module name="" /> + <option name="TESTING_TYPE" value="0" /> + <option name="INSTRUMENTATION_RUNNER_CLASS" value="" /> + <option name="METHOD_NAME" value="" /> + <option name="CLASS_NAME" value="" /> + <option name="PACKAGE_NAME" value="" /> + <option name="EXTRA_OPTIONS" value="" /> + <option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" /> + <option name="PREFERRED_AVD" value="" /> + <option name="CLEAR_LOGCAT" value="false" /> + <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" /> + <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" /> + <option name="FORCE_STOP_RUNNING_APP" value="true" /> + <option name="DEBUGGER_TYPE" value="Java" /> + <option name="USE_LAST_SELECTED_DEVICE" value="false" /> + <option name="PREFERRED_AVD" value="" /> + <Java /> + <Profilers> + <option name="ENABLE_ADVANCED_PROFILING" value="true" /> + <option name="GAPID_ENABLED" value="false" /> + <option name="GAPID_DISABLE_PCS" value="false" /> + <option name="SUPPORT_LIB_ENABLED" value="true" /> + <option name="INSTRUMENTATION_ENABLED" value="true" /> + </Profilers> + <method /> + </configuration> + <configuration default="true" type="Applet" factoryName="Applet"> + <option name="HTML_USED" value="false" /> + <option name="WIDTH" value="400" /> + <option name="HEIGHT" value="300" /> + <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" /> + <module /> + <method /> + </configuration> + <configuration default="true" type="Application" factoryName="Application"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <option name="MAIN_CLASS_NAME" /> + <option name="VM_PARAMETERS" /> + <option name="PROGRAM_PARAMETERS" /> + <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="ENABLE_SWING_INSPECTOR" value="false" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <module name="" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="ArquillianJUnit" factoryName="" nameIsGenerated="true"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <option name="arquillianRunConfiguration"> + <value> + <option name="containerStateName" value="" /> + </value> + </option> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="PACKAGE_NAME" /> + <option name="MAIN_CLASS_NAME" /> + <option name="METHOD_NAME" /> + <option name="TEST_OBJECT" value="class" /> + <option name="VM_PARAMETERS" /> + <option name="PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="singleModule" /> + </option> + <envs /> + <patterns /> + <method /> + </configuration> + <configuration default="true" type="ArquillianTestNG" factoryName=""> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <option name="arquillianRunConfiguration"> + <value> + <option name="containerStateName" value="" /> + </value> + </option> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="SUITE_NAME" /> + <option name="PACKAGE_NAME" /> + <option name="MAIN_CLASS_NAME" /> + <option name="METHOD_NAME" /> + <option name="GROUP_NAME" /> + <option name="TEST_OBJECT" value="CLASS" /> + <option name="VM_PARAMETERS" /> + <option name="PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="OUTPUT_DIRECTORY" /> + <option name="ANNOTATION_TYPE" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="singleModule" /> + </option> + <option name="USE_DEFAULT_REPORTERS" value="false" /> + <option name="PROPERTIES_FILE" /> + <envs /> + <properties /> + <listeners /> + <method /> + </configuration> + <configuration default="true" type="Cold Fusion runner description" factoryName="Cold Fusion" custom_browser="" web_path=""> + <method /> + </configuration> + <configuration default="true" type="CucumberJavaRunConfigurationType" factoryName="Cucumber java"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <option name="myFilePath" /> + <option name="GLUE" /> + <option name="myNameFilter" /> + <option name="myGeneratedName" /> + <option name="MAIN_CLASS_NAME" /> + <option name="VM_PARAMETERS" /> + <option name="PROGRAM_PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="ENABLE_SWING_INSPECTOR" value="false" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <module name="" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="FlashRunConfigurationType" factoryName="Flash App"> + <option name="BCName" value="" /> + <option name="IOSSimulatorSdkPath" value="" /> + <option name="adlOptions" value="" /> + <option name="airProgramParameters" value="" /> + <option name="appDescriptorForEmulator" value="Android" /> + <option name="debugTransport" value="USB" /> + <option name="debuggerSdkRaw" value="BC SDK" /> + <option name="emulator" value="NexusOne" /> + <option name="emulatorAdlOptions" value="" /> + <option name="fastPackaging" value="true" /> + <option name="fullScreenHeight" value="0" /> + <option name="fullScreenWidth" value="0" /> + <option name="launchUrl" value="false" /> + <option name="launcherParameters"> + <LauncherParameters> + <option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" /> + <option name="launcherType" value="OSDefault" /> + <option name="newPlayerInstance" value="false" /> + <option name="playerPath" value="FlashPlayerDebugger.exe" /> + </LauncherParameters> + </option> + <option name="mobileRunTarget" value="Emulator" /> + <option name="moduleName" value="" /> + <option name="overriddenMainClass" value="" /> + <option name="overriddenOutputFileName" value="" /> + <option name="overrideMainClass" value="false" /> + <option name="runTrusted" value="true" /> + <option name="screenDpi" value="0" /> + <option name="screenHeight" value="0" /> + <option name="screenWidth" value="0" /> + <option name="url" value="http://" /> + <option name="usbDebugPort" value="7936" /> + <method /> + </configuration> + <configuration default="true" type="FlexUnitRunConfigurationType" factoryName="FlexUnit" appDescriptorForEmulator="Android" class_name="" emulatorAdlOptions="" method_name="" package_name="" scope="Class"> + <option name="BCName" value="" /> + <option name="launcherParameters"> + <LauncherParameters> + <option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" /> + <option name="launcherType" value="OSDefault" /> + <option name="newPlayerInstance" value="false" /> + <option name="playerPath" value="FlashPlayerDebugger.exe" /> + </LauncherParameters> + </option> + <option name="moduleName" value="" /> + <option name="trusted" value="true" /> + <method /> + </configuration> + <configuration default="true" type="GoAppEngineRunConfiguration" factoryName="Go App Engine"> + <module name="vncproxy" /> + <working_directory value="$PROJECT_DIR$" /> + <method /> + </configuration> + <configuration default="true" type="GoApplicationRunConfiguration" factoryName="Go Application"> + <module name="vncproxy" /> + <working_directory value="$PROJECT_DIR$" /> + <go_parameters value="-i" /> + <filePath value="C:\Users\betzalel\Dropbox\go\src\vncproxy" /> + <kind value="FILE" /> + <package value="vncproxy" /> + <method /> + </configuration> + <configuration default="true" type="GoRemoteDebugConfigurationType" factoryName="Go Remote"> + <method /> + </configuration> + <configuration default="true" type="GoRunFileConfiguration" factoryName="Go Single File"> + <module name="vncproxy" /> + <working_directory value="$PROJECT_DIR$" /> + <filePath value="$PROJECT_DIR$" /> + <method /> + </configuration> + <configuration default="true" type="GoTestRunConfiguration" factoryName="Go Test"> + <module name="vncproxy" /> + <working_directory value="$PROJECT_DIR$" /> + <go_parameters value="-i" /> + <framework value="gotest" /> + <kind value="DIRECTORY" /> + <package value="vncproxy" /> + <method /> + </configuration> + <configuration default="true" type="GradleRunConfiguration" factoryName="Gradle"> + <ExternalSystemSettings> + <option name="executionName" /> + <option name="externalProjectPath" /> + <option name="externalSystemIdString" value="GRADLE" /> + <option name="scriptParameters" /> + <option name="taskDescriptions"> + <list /> + </option> + <option name="taskNames"> + <list /> + </option> + <option name="vmOptions" /> + </ExternalSystemSettings> + <method /> + </configuration> + <configuration default="true" type="GrailsRunConfigurationType" factoryName="Grails"> + <setting name="vmparams" value="" /> + <setting name="cmdLine" value="run-app" /> + <setting name="passParentEnv" value="true" /> + <setting name="launchBrowser" value="true" /> + <setting name="launchBrowserUrl" value="" /> + <setting name="depsClasspath" value="false" /> + <method /> + </configuration> + <configuration default="true" type="JUnit" factoryName="JUnit"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="PACKAGE_NAME" /> + <option name="MAIN_CLASS_NAME" /> + <option name="METHOD_NAME" /> + <option name="TEST_OBJECT" value="class" /> + <option name="VM_PARAMETERS" value="-ea" /> + <option name="PARAMETERS" /> + <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="singleModule" /> + </option> + <envs /> + <patterns /> + <method /> + </configuration> + <configuration default="true" type="JarApplication" factoryName="JAR Application"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="Java Scratch" factoryName="Java Scratch"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <option name="SCRATCH_FILE_ID" value="0" /> + <option name="MAIN_CLASS_NAME" /> + <option name="VM_PARAMETERS" /> + <option name="PROGRAM_PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="ENABLE_SWING_INSPECTOR" value="false" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <module name="" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest"> + <node-interpreter value="project" /> + <working-dir value="" /> + <envs /> + <scope-kind value="ALL" /> + <method /> + </configuration> + <configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor"> + <config-file value="" /> + <node-interpreter value="project" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug"> + <method /> + </configuration> + <configuration default="true" type="JetRunConfigurationType" factoryName="Kotlin"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <option name="MAIN_CLASS_NAME" /> + <option name="VM_PARAMETERS" /> + <option name="PROGRAM_PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <module name="vncproxy" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="KotlinStandaloneScriptRunConfigurationType" factoryName="Kotlin script"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <option name="filePath" /> + <option name="vmParameters" /> + <option name="alternativeJrePath" /> + <option name="programParameters" /> + <option name="passParentEnvs" value="true" /> + <option name="workingDirectory" /> + <option name="isAlternativeJrePathEnabled" value="false" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="Remote" factoryName="Remote"> + <option name="USE_SOCKET_TRANSPORT" value="true" /> + <option name="SERVER_MODE" value="false" /> + <option name="SHMEM_ADDRESS" value="javadebug" /> + <option name="HOST" value="localhost" /> + <option name="PORT" value="5005" /> + <method /> + </configuration> + <configuration default="true" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="TestNG" factoryName="TestNG"> + <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> + <module name="" /> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> + <option name="SUITE_NAME" /> + <option name="PACKAGE_NAME" /> + <option name="MAIN_CLASS_NAME" /> + <option name="METHOD_NAME" /> + <option name="GROUP_NAME" /> + <option name="TEST_OBJECT" value="CLASS" /> + <option name="VM_PARAMETERS" value="-ea" /> + <option name="PARAMETERS" /> + <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" /> + <option name="OUTPUT_DIRECTORY" /> + <option name="ANNOTATION_TYPE" /> + <option name="ENV_VARIABLES" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="singleModule" /> + </option> + <option name="USE_DEFAULT_REPORTERS" value="false" /> + <option name="PROPERTIES_FILE" /> + <envs /> + <properties /> + <listeners /> + <method /> + </configuration> + <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js"> + <node-interpreter>project</node-interpreter> + <node-options /> + <gulpfile /> + <tasks /> + <arguments /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="js.build_tools.npm" factoryName="npm"> + <command value="run" /> + <scripts /> + <node-interpreter value="project" /> + <envs /> + <method /> + </configuration> + <configuration default="true" type="osgi.bnd.run" factoryName="Run Launcher"> + <method /> + </configuration> + <configuration default="true" type="osgi.bnd.run" factoryName="Test Launcher (JUnit)"> + <method /> + </configuration> + <configuration default="false" name="Unnamed" type="GoApplicationRunConfiguration" factoryName="Go Application"> + <module name="vncproxy" /> + <working_directory value="C:\Users\betzalel\Dropbox\go\src\vncproxy" /> + <go_parameters value="-i" /> + <filePath value="C:\Users\betzalel\Dropbox\go\src\vncproxy\main.go" /> + <kind value="FILE" /> + <method /> + </configuration> + <configuration default="false" name="Server" type="GoApplicationRunConfiguration" factoryName="Go Application"> + <module name="vncproxy" /> + <working_directory value="$PROJECT_DIR$" /> + <go_parameters value="-i" /> + <filePath value="C:\Users\betzalel\Dropbox\go\src\vncproxy\server\main.go" /> + <kind value="FILE" /> + <package value="vncproxy" /> + <method /> + </configuration> + <configuration default="false" name="test server " type="GoTestRunConfiguration" factoryName="Go Test"> + <module name="vncproxy" /> + <working_directory value="$PROJECT_DIR$" /> + <go_parameters value="-i" /> + <framework value="gotest" /> + <kind value="FILE" /> + <package value="vncproxy" /> + <directory value="$PROJECT_DIR$/server/server_test.go" /> + <filePath value="$PROJECT_DIR$/server/server_test.go" /> + <method /> + </configuration> + <list size="3"> + <item index="0" class="java.lang.String" itemvalue="Go Application.Unnamed" /> + <item index="1" class="java.lang.String" itemvalue="Go Application.Server" /> + <item index="2" class="java.lang.String" itemvalue="Go Test.test server " /> + </list> + </component> + <component name="ShelveChangesManager" show_recycled="false"> + <option name="remove_strategy" value="false" /> + </component> + <component name="SvnConfiguration"> + <configuration /> + </component> + <component name="TaskManager"> + <task active="true" id="Default" summary="Default task"> + <changelist id="a5d84862-9821-4d30-9a77-6235b55d6727" name="Default" comment="" /> + <created>1497962309959</created> + <option name="number" value="Default" /> + <option name="presentableId" value="Default" /> + <updated>1497962309959</updated> + <workItem from="1497962311486" duration="10262000" /> + <workItem from="1497992075962" duration="2116000" /> + </task> + <servers /> + </component> + <component name="TestHistory"> + <history-entry file="test_server_ - 2017.06.20 at 17h 34m 07s.xml"> + <configuration name="test server " configurationId="GoTestRunConfiguration" /> + </history-entry> + <history-entry file="test_server_ - 2017.06.20 at 17h 34m 57s.xml"> + <configuration name="test server " configurationId="GoTestRunConfiguration" /> + </history-entry> + <history-entry file="test_server_ - 2017.06.21 at 00h 07m 31s.xml"> + <configuration name="test server " configurationId="GoTestRunConfiguration" /> + </history-entry> + <history-entry file="test_server_ - 2017.06.21 at 00h 07m 36s.xml"> + <configuration name="test server " configurationId="GoTestRunConfiguration" /> + </history-entry> + <history-entry file="test_server_ - 2017.06.21 at 00h 08m 55s.xml"> + <configuration name="test server " configurationId="GoTestRunConfiguration" /> + </history-entry> + <history-entry file="test_server_ - 2017.06.21 at 00h 11m 19s.xml"> + <configuration name="test server " configurationId="GoTestRunConfiguration" /> + </history-entry> + <history-entry file="test_server_ - 2017.06.21 at 00h 17m 38s.xml"> + <configuration name="test server " configurationId="GoTestRunConfiguration" /> + </history-entry> + <history-entry file="test_server_ - 2017.06.21 at 00h 21m 39s.xml"> + <configuration name="test server " configurationId="GoTestRunConfiguration" /> + </history-entry> + <history-entry file="test_server_ - 2017.06.21 at 00h 21m 43s.xml"> + <configuration name="test server " configurationId="GoTestRunConfiguration" /> + </history-entry> + <history-entry file="test_server_ - 2017.06.21 at 00h 24m 16s.xml"> + <configuration name="test server " configurationId="GoTestRunConfiguration" /> + </history-entry> + </component> + <component name="TimeTrackingManager"> + <option name="totallyTimeSpent" value="12378000" /> + </component> + <component name="ToolWindowManager"> + <frame x="0" y="0" width="1280" height="800" extended-state="6" /> + <layout> + <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> + <window_info id="Nl-Palette" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="Palette	" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" /> + <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.30136988" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> + <window_info id="Properties" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> + <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.27948305" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> + <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32981783" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> + <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33972603" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> + <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" /> + <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> + <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> + <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> + <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> + <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> + <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> + <window_info id="Coverage" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" /> + </layout> + </component> + <component name="TypeScriptGeneratedFilesManager"> + <option name="processedProjectFiles" value="true" /> + </component> + <component name="VcsContentAnnotationSettings"> + <option name="myLimit" value="2678400000" /> + </component> + <component name="XDebuggerManager"> + <breakpoint-manager> + <breakpoints> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/main.go</url> + <line>12</line> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/main.go</url> + <line>15</line> + <option name="timeStamp" value="1" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/main.go</url> + <line>19</line> + <option name="timeStamp" value="2" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server_test.go</url> + <line>39</line> + <option name="timeStamp" value="5" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server_test.go</url> + <line>41</line> + <option name="timeStamp" value="6" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>156</line> + <option name="timeStamp" value="8" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>166</line> + <option name="timeStamp" value="9" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>169</line> + <option name="timeStamp" value="10" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>175</line> + <option name="timeStamp" value="13" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>180</line> + <option name="timeStamp" value="15" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>140</line> + <option name="timeStamp" value="16" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>141</line> + <option name="timeStamp" value="17" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>139</line> + <option name="timeStamp" value="18" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/security.go</url> + <line>199</line> + <option name="timeStamp" value="26" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/common/encoding.go</url> + <line>164</line> + <option name="timeStamp" value="31" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>124</line> + <option name="timeStamp" value="32" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>163</line> + <option name="timeStamp" value="36" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/security.go</url> + <line>213</line> + <option name="timeStamp" value="37" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/security.go</url> + <line>216</line> + <option name="timeStamp" value="38" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/security.go</url> + <line>218</line> + <option name="timeStamp" value="41" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/security.go</url> + <line>217</line> + <option name="timeStamp" value="42" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/security.go</url> + <line>210</line> + <option name="timeStamp" value="43" /> + </line-breakpoint> + <line-breakpoint type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>136</line> + <option name="timeStamp" value="44" /> + </line-breakpoint> + <line-breakpoint enabled="true" type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>134</line> + <option name="timeStamp" value="45" /> + </line-breakpoint> + <line-breakpoint enabled="true" type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>151</line> + <option name="timeStamp" value="46" /> + </line-breakpoint> + <line-breakpoint enabled="true" type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>170</line> + <option name="timeStamp" value="47" /> + </line-breakpoint> + <line-breakpoint enabled="true" type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>173</line> + <option name="timeStamp" value="48" /> + </line-breakpoint> + <line-breakpoint enabled="true" type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>147</line> + <option name="timeStamp" value="50" /> + </line-breakpoint> + <line-breakpoint enabled="true" type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>171</line> + <option name="timeStamp" value="51" /> + </line-breakpoint> + <line-breakpoint enabled="true" type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>128</line> + <properties /> + <option name="timeStamp" value="52" /> + </line-breakpoint> + <line-breakpoint enabled="true" type="DlvLineBreakpoint"> + <url>file://$PROJECT_DIR$/server/server.go</url> + <line>178</line> + <properties /> + <option name="timeStamp" value="54" /> + </line-breakpoint> + </breakpoints> + <breakpoints-dialog> + <breakpoints-dialog /> + </breakpoints-dialog> + <option name="time" value="55" /> + </breakpoint-manager> + <watches-manager /> + </component> + <component name="antWorkspaceConfiguration"> + <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" /> + <option name="FILTER_TARGETS" value="false" /> + </component> + <component name="editorHistoryManager"> + <entry file="file://$PROJECT_DIR$/server/handlers.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="0"> + <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/main.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="240"> + <caret line="24" column="26" lean-forward="true" selection-start-line="24" selection-start-column="26" selection-end-line="24" selection-end-column="26" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/server/server.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="1725"> + <caret line="123" column="38" lean-forward="false" selection-start-line="123" selection-start-column="38" selection-end-line="123" selection-end-column="38" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/common/readers.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="1380"> + <caret line="96" column="1" lean-forward="true" selection-start-line="96" selection-start-column="1" selection-end-line="96" selection-end-column="1" /> + <folding> + <marker date="1497991618000" expanded="true" signature="1507:1513" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="1507:1597" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="1554:1574" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="1660:1854" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="1739:1834" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="1907:2069" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="1992:2012" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2123:2286" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2209:2229" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2340:2503" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2426:2446" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2558:2970" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2672:2862" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2774:2859" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="3040:3350" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="3081:3121" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="3221:3243" ph="{...}" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/common/client-message.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="60"> + <caret line="7" column="5" lean-forward="false" selection-start-line="7" selection-start-column="5" selection-end-line="7" selection-end-column="5" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/vnc/client_test.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="360"> + <caret line="28" column="29" lean-forward="true" selection-start-line="28" selection-start-column="29" selection-end-line="28" selection-end-column="29" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/encodings/enc-tight.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="0"> + <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding> + <marker date="1497903119000" expanded="false" signature="26:47" ph="..." /> + <marker date="1497903119000" expanded="true" signature="462:463" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="500:513" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="1306:1511" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="1406:1435" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="1441:1482" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="1646:3175" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="1886:1968" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="2509:3173" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="2527:2719" ph="..." /> + <marker date="1497903119000" expanded="true" signature="2736:3000" ph="..." /> + <marker date="1497903119000" expanded="true" signature="2760:2846" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="2897:2921" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="3010:3170" ph="..." /> + <marker date="1497903119000" expanded="true" signature="3038:3100" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="3299:10234" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="3544:3759" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="3618:3712" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="4027:5051" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="4054:4632" ph="..." /> + <marker date="1497903119000" expanded="true" signature="4358:4426" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="4432:4483" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="4539:4632" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="4659:4841" ph="..." /> + <marker date="1497903119000" expanded="true" signature="4864:4977" ph="..." /> + <marker date="1497903119000" expanded="true" signature="4987:5048" ph="..." /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/server/server_test.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="300"> + <caret line="27" column="35" lean-forward="true" selection-start-line="27" selection-start-column="35" selection-end-line="27" selection-end-column="35" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/vncproxy.iml"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="0"> + <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/vnc/client_auth_test.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="0"> + <caret line="0" column="11" lean-forward="false" selection-start-line="0" selection-start-column="8" selection-end-line="0" selection-end-column="11" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/vnc/client_auth.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="408"> + <caret line="29" column="0" lean-forward="true" selection-start-line="29" selection-start-column="0" selection-end-line="29" selection-end-column="0" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/vnc/pixel-format.go" /> + <entry file="file://C:/Go/src/runtime/panic.go" /> + <entry file="file://$PROJECT_DIR$/server/security.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="240"> + <caret line="217" column="21" lean-forward="false" selection-start-line="217" selection-start-column="17" selection-end-line="217" selection-end-column="21" /> + <folding> + <element signature="e#16#100#0" expanded="true" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/server/client-messages.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="119"> + <caret line="34" column="0" lean-forward="true" selection-start-line="34" selection-start-column="0" selection-end-line="34" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/encodings/enc-tight.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="0"> + <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding> + <marker date="1497903119000" expanded="false" signature="26:47" ph="..." /> + <marker date="1497903119000" expanded="true" signature="462:463" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="500:513" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="1306:1511" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="1406:1435" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="1441:1482" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="1646:3175" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="1886:1968" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="2509:3173" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="2527:2719" ph="..." /> + <marker date="1497903119000" expanded="true" signature="2736:3000" ph="..." /> + <marker date="1497903119000" expanded="true" signature="2760:2846" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="2897:2921" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="3010:3170" ph="..." /> + <marker date="1497903119000" expanded="true" signature="3038:3100" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="3299:10234" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="3544:3759" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="3618:3712" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="4027:5051" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="4054:4632" ph="..." /> + <marker date="1497903119000" expanded="true" signature="4358:4426" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="4432:4483" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="4539:4632" ph="{...}" /> + <marker date="1497903119000" expanded="true" signature="4659:4841" ph="..." /> + <marker date="1497903119000" expanded="true" signature="4864:4977" ph="..." /> + <marker date="1497903119000" expanded="true" signature="4987:5048" ph="..." /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/common/encoding.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="170"> + <caret line="10" column="5" lean-forward="false" selection-start-line="10" selection-start-column="5" selection-end-line="10" selection-end-column="5" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/common/readers.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="1380"> + <caret line="96" column="1" lean-forward="false" selection-start-line="96" selection-start-column="1" selection-end-line="96" selection-end-column="1" /> + <folding> + <marker date="1497991618000" expanded="true" signature="1507:1513" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="1507:1597" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="1554:1574" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="1660:1854" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="1739:1834" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="1907:2069" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="1992:2012" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2123:2286" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2209:2229" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2340:2503" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2426:2446" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2558:2970" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2672:2862" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="2774:2859" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="3040:3350" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="3081:3121" ph="{...}" /> + <marker date="1497991618000" expanded="true" signature="3221:3243" ph="{...}" /> + </folding> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/server/handlers.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="143"> + <caret line="253" column="54" lean-forward="true" selection-start-line="253" selection-start-column="54" selection-end-line="253" selection-end-column="54" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/vnc/client-conn.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="240"> + <caret line="450" column="22" lean-forward="false" selection-start-line="450" selection-start-column="22" selection-end-line="450" selection-end-column="22" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/encodings/enc-copy-rect.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="0"> + <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/server/demo.go1"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="190"> + <caret line="53" column="16" lean-forward="false" selection-start-line="53" selection-start-column="16" selection-end-line="53" selection-end-column="16" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/main.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="240"> + <caret line="23" column="26" lean-forward="false" selection-start-line="23" selection-start-column="26" selection-end-line="23" selection-end-column="26" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/vnc/client_test.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="195"> + <caret line="29" column="1" lean-forward="true" selection-start-line="29" selection-start-column="1" selection-end-line="29" selection-end-column="1" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/common/server-message.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="300"> + <caret line="20" column="21" lean-forward="false" selection-start-line="20" selection-start-column="4" selection-end-line="20" selection-end-column="21" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/encodings/enc-raw.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="0"> + <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/common/client-message.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="20"> + <caret line="28" column="1" lean-forward="true" selection-start-line="28" selection-start-column="1" selection-end-line="28" selection-end-column="1" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/server/server-conn.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="195"> + <caret line="18" column="38" lean-forward="true" selection-start-line="18" selection-start-column="38" selection-end-line="18" selection-end-column="38" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/server/server.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="2040"> + <caret line="144" column="0" lean-forward="true" selection-start-line="144" selection-start-column="0" selection-end-line="144" selection-end-column="0" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/server/server_test.go"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="255"> + <caret line="24" column="37" lean-forward="false" selection-start-line="24" selection-start-column="37" selection-end-line="24" selection-end-column="37" /> + <folding /> + </state> + </provider> + </entry> + </component> </project> \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index a0c94e2..c89bbc7 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,7 +8,7 @@ "mode": "test", "remotePath": "", "port": 2345, - "program": "${workspaceRoot}/reader", + "program": "${workspaceRoot}/server", "args": [ "-test.v" ], @@ -23,29 +23,6 @@ } }, "showLog": true - }, - { - "name": "Launch Grouper Tests", - "type": "go", - "request": "launch", - "mode": "test", - "remotePath": "", - "port": 2345, - "program": "${workspaceRoot}/consumer", - "args": [ - "-test.v" - ], - "osx": { - "env": { - //"GOPATH": "${env.HOME}/Dropbox/go" - } - }, - "windows": { - "env": { - //"GOPATH": "${env.USERPROFILE}\\Dropbox\\go" - } - }, - "showLog": true }, { "name": "Launch", diff --git a/common/client-message.go b/common/client-message.go new file mode 100644 index 0000000..89a7b99 --- /dev/null +++ b/common/client-message.go @@ -0,0 +1,58 @@ +package common + +import ( + "io" + "net" +) + +type ClientMessageType uint8 + +//go:generate stringer -type=ClientMessageType + +// Client-to-Server message types. +const ( + SetPixelFormatMsgType ClientMessageType = iota + _ + SetEncodingsMsgType + FramebufferUpdateRequestMsgType + KeyEventMsgType + PointerEventMsgType + ClientCutTextMsgType +) + +// Color represents a single color in a color map. +type Color struct { + pf *PixelFormat + cm *ColorMap + cmIndex uint32 // Only valid if pf.TrueColor is false. + R, G, B uint16 +} + +type ColorMap [256]Color + +type Conn interface { + io.ReadWriteCloser + Conn() net.Conn + Protocol() string + PixelFormat() *PixelFormat + SetPixelFormat(*PixelFormat) error + ColorMap() *ColorMap + SetColorMap(*ColorMap) + Encodings() []Encoding + SetEncodings([]EncodingType) error + Width() uint16 + Height() uint16 + SetWidth(uint16) + SetHeight(uint16) + DesktopName() string + SetDesktopName(string) + Flush() error + SetProtoVersion(string) +} + +// ClientMessage is the interface +type ClientMessage interface { + Type() ClientMessageType + Read(Conn) (ClientMessage, error) + Write(Conn) error +} diff --git a/common/encoding.go b/common/encoding.go index a3d9203..e4d69fa 100644 --- a/common/encoding.go +++ b/common/encoding.go @@ -1,5 +1,11 @@ package common +import ( + "encoding/binary" + "bytes" + "io" +) + // An Encoding implements a method for encoding pixel data that is // sent by the server to the client. type Encoding interface { @@ -22,3 +28,168 @@ const ( EncodingTight = 7 EncodingZRLE = 16 ) + +// EncodingType represents a known VNC encoding type. +type EncodingType int32 + +//go:generate stringer -type=EncodingType + +const ( + EncRaw EncodingType = 0 + EncCopyRect EncodingType = 1 + EncRRE EncodingType = 2 + EncCoRRE EncodingType = 4 + EncHextile EncodingType = 5 + EncZlib EncodingType = 6 + EncTight EncodingType = 7 + EncZlibHex EncodingType = 8 + EncUltra1 EncodingType = 9 + EncUltra2 EncodingType = 10 + EncJPEG EncodingType = 21 + EncJRLE EncodingType = 22 + EncTRLE EncodingType = 15 + EncZRLE EncodingType = 16 + EncJPEGQualityLevelPseudo10 EncodingType = -23 + EncJPEGQualityLevelPseudo9 EncodingType = -24 + EncJPEGQualityLevelPseudo8 EncodingType = -25 + EncJPEGQualityLevelPseudo7 EncodingType = -26 + EncJPEGQualityLevelPseudo6 EncodingType = -27 + EncJPEGQualityLevelPseudo5 EncodingType = -28 + EncJPEGQualityLevelPseudo4 EncodingType = -29 + EncJPEGQualityLevelPseudo3 EncodingType = -30 + EncJPEGQualityLevelPseudo2 EncodingType = -31 + EncJPEGQualityLevelPseudo1 EncodingType = -32 + EncColorPseudo EncodingType = -239 + EncDesktopSizePseudo EncodingType = -223 + EncLastRectPseudo EncodingType = -224 + EncCompressionLevel10 EncodingType = -247 + EncCompressionLevel9 EncodingType = -248 + EncCompressionLevel8 EncodingType = -249 + EncCompressionLevel7 EncodingType = -250 + EncCompressionLevel6 EncodingType = -251 + EncCompressionLevel5 EncodingType = -252 + EncCompressionLevel4 EncodingType = -253 + EncCompressionLevel3 EncodingType = -254 + EncCompressionLevel2 EncodingType = -255 + EncCompressionLevel1 EncodingType = -256 + EncQEMUPointerMotionChangePseudo EncodingType = -257 + EncQEMUExtendedKeyEventPseudo EncodingType = -258 + EncTightPng EncodingType = -260 + EncExtendedDesktopSizePseudo EncodingType = -308 + EncXvpPseudo EncodingType = -309 + EncFencePseudo EncodingType = -312 + EncContinuousUpdatesPseudo EncodingType = -313 + EncClientRedirect EncodingType = -311 +) + +// PixelFormat describes the way a pixel is formatted for a VNC connection. +// +// See RFC 6143 Section 7.4 for information on each of the fields. +type PixelFormat struct { + BPP uint8 + Depth uint8 + BigEndian bool + TrueColor bool + RedMax uint16 + GreenMax uint16 + BlueMax uint16 + RedShift uint8 + GreenShift uint8 + BlueShift uint8 +} + +func (format *PixelFormat) WriteTo(w io.Writer) ( error) { + var buf bytes.Buffer + + // Byte 1 + if err := binary.Write(&buf, binary.BigEndian, format.BPP); err != nil { + return err + } + + // Byte 2 + if err := binary.Write(&buf, binary.BigEndian, format.Depth); err != nil { + return err + } + + var boolByte byte + if format.BigEndian { + boolByte = 1 + } else { + boolByte = 0 + } + + // Byte 3 (BigEndian) + if err := binary.Write(&buf, binary.BigEndian, boolByte); err != nil { + return err + } + + if format.TrueColor { + boolByte = 1 + } else { + boolByte = 0 + } + + // Byte 4 (TrueColor) + if err := binary.Write(&buf, binary.BigEndian, boolByte); err != nil { + return err + } + + // If we have true color enabled then we have to fill in the rest of the + // structure with the color values. + if format.TrueColor { + if err := binary.Write(&buf, binary.BigEndian, format.RedMax); err != nil { + return err + } + + if err := binary.Write(&buf, binary.BigEndian, format.GreenMax); err != nil { + return err + } + + if err := binary.Write(&buf, binary.BigEndian, format.BlueMax); err != nil { + return err + } + + if err := binary.Write(&buf, binary.BigEndian, format.RedShift); err != nil { + return err + } + + if err := binary.Write(&buf, binary.BigEndian, format.GreenShift); err != nil { + return err + } + + if err := binary.Write(&buf, binary.BigEndian, format.BlueShift); err != nil { + return err + } + } + + w.Write(buf.Bytes()[0:16]) + return nil +} + +func NewPixelFormat(bpp uint8) *PixelFormat { + bigEndian := false + // rgbMax := uint16(math.Exp2(float64(bpp))) - 1 + rMax := uint16(255) + gMax := uint16(255) + bMax := uint16(255) + var ( + tc = true + rs, gs, bs uint8 + depth uint8 + ) + switch bpp { + case 8: + tc = false + depth = 8 + rs, gs, bs = 0, 0, 0 + case 16: + depth = 16 + rs, gs, bs = 0, 4, 8 + case 32: + depth = 24 + // rs, gs, bs = 0, 8, 16 + rs, gs, bs = 16, 8, 0 + } + + return &PixelFormat{bpp, depth, bigEndian, tc, rMax, gMax, bMax, rs, gs, bs} +} diff --git a/common/readers.go b/common/readers.go index 19397ce..fc1d4b6 100644 --- a/common/readers.go +++ b/common/readers.go @@ -43,8 +43,8 @@ func (r *RfbReadHelper) SendRectSeparator(upcomingRectType int) error { } -func (r *RfbReadHelper) SendMessageSeparator(upcomingMessageType int) error { - seg := &RfbSegment{SegmentType: SegmentMessageSeparator, UpcomingObjectType: upcomingMessageType} +func (r *RfbReadHelper) SendMessageSeparator(upcomingMessageType ServerMessageType) error { + seg := &RfbSegment{SegmentType: SegmentMessageSeparator, UpcomingObjectType: int(upcomingMessageType)} if r.Listener == nil { return nil } @@ -67,7 +67,7 @@ func (r *RfbReadHelper) Read(p []byte) (n int, err error) { //write the bytes to the Listener for further processing seg := &RfbSegment{Bytes: p, SegmentType: SegmentBytes} if r.Listener == nil { - return 0,nil + return 0, nil } r.Listener.Consume(seg) if err != nil { diff --git a/common/rectangle.go b/common/rectangle.go index 5261903..3aa9623 100644 --- a/common/rectangle.go +++ b/common/rectangle.go @@ -20,15 +20,15 @@ func (r *Rectangle) String() string { // PixelFormat describes the way a pixel is formatted for a VNC connection. // // See RFC 6143 Section 7.4 for information on each of the fields. -type PixelFormat struct { - BPP uint8 - Depth uint8 - BigEndian bool - TrueColor bool - RedMax uint16 - GreenMax uint16 - BlueMax uint16 - RedShift uint8 - GreenShift uint8 - BlueShift uint8 -} +// type PixelFormat struct { +// BPP uint8 +// Depth uint8 +// BigEndian bool +// TrueColor bool +// RedMax uint16 +// GreenMax uint16 +// BlueMax uint16 +// RedShift uint8 +// GreenShift uint8 +// BlueShift uint8 +// } diff --git a/common/server-message.go b/common/server-message.go new file mode 100644 index 0000000..d82d298 --- /dev/null +++ b/common/server-message.go @@ -0,0 +1,25 @@ +package common + +type IClientConn interface { + CurrentPixelFormat() *PixelFormat + CurrentColorMap() *ColorMap + Encodings() []Encoding +} + +type ServerMessage interface { + // The type of the message that is sent down on the wire. + Type() uint8 + String() string + // Read reads the contents of the message from the reader. At the point + // this is called, the message type has already been read from the reader. + // This should return a new ServerMessage that is the appropriate type. + Read(IClientConn, *RfbReadHelper) (ServerMessage, error) +} +type ServerMessageType int8 + +const ( + FramebufferUpdate ServerMessageType = iota + SetColourMapEntries + Bell + ServerCutText +) diff --git a/encodings/enc-rre.go b/encodings/enc-rre.go index 0f56984..c1feeba 100644 --- a/encodings/enc-rre.go +++ b/encodings/enc-rre.go @@ -17,8 +17,8 @@ func (z *RREEncoding) Read(pixelFmt *common.PixelFormat, rect *common.Rectangle, //read whole rect background color r.ReadBytes(bytesPerPixel) - //read all individual rects (color=BPP + x=16b + y=16b + w=16b + h=16b) - _, err := r.ReadBytes(int(numOfSubrectangles) * (bytesPerPixel + 8)) + //read all individual rects (color=bytesPerPixel + x=16b + y=16b + w=16b + h=16b) + _, err := r.ReadBytes(int(numOfSubrectangles) * (bytesPerPixel + 8)) // x+y+w+h=8 bytes if err != nil { return nil, err diff --git a/encodings/enc-tight.go b/encodings/enc-tight.go index f0d5e4e..fcf586b 100644 --- a/encodings/enc-tight.go +++ b/encodings/enc-tight.go @@ -3,7 +3,6 @@ package encodings import ( "errors" "fmt" - "io" "vncproxy/common" ) @@ -20,13 +19,13 @@ const ( ) type TightEncoding struct { - output io.Writer + //output io.Writer logger common.Logger } -func (t *TightEncoding) SetOutput(output io.Writer) { - t.output = output -} +// func (t *TightEncoding) SetOutput(output io.Writer) { +// t.output = output +// } func (*TightEncoding) Type() int32 { return 7 @@ -100,6 +99,8 @@ func (t *TightEncoding) Read(pixelFmt *common.PixelFormat, rect *common.Rectangl fmt.Printf("reading fill size=%d\n", bytesPixel) //read color r.ReadBytes(int(bytesPixel)) + //byt, _ := r.ReadBytes(3) + //fmt.Printf(">>>>>>>>>TightFillBytes=%v", byt) return t, nil case TightJpeg: if pixelFmt.BPP == 8 { diff --git a/listeners/pass-to.go b/listeners/pass-to.go index 20b4ef4..5e6b7ce 100644 --- a/listeners/pass-to.go +++ b/listeners/pass-to.go @@ -1,12 +1,25 @@ package listeners -import "vncproxy/common" -import "io" +import ( + "errors" + "io" + "vncproxy/common" +) type PassListener struct { io.Writer } -func (*PassListener) Consume(seg *common.RfbSegment) error { +func (p *PassListener) Consume(seg *common.RfbSegment) error { + switch seg.SegmentType { + case common.SegmentMessageSeparator: + case common.SegmentRectSeparator: + case common.SegmentBytes: + _, err := p.Writer.Write(seg.Bytes) + return err + + default: + return errors.New("undefined RfbSegment type") + } return nil } diff --git a/listeners/recorder.go b/listeners/recorder.go index 5c5e4e6..9d3fbd0 100644 --- a/listeners/recorder.go +++ b/listeners/recorder.go @@ -43,12 +43,6 @@ func NewRecorder(saveFilePath string, desktopName string, fbWidth uint16, fbHeig return &rec } -const ( - FramebufferUpdate = 0 - SetColourMapEntries = 1 - Bell = 2 - ServerCutText = 3 -) const versionMsg_3_3 = "RFB 003.003\n" const versionMsg_3_7 = "RFB 003.007\n" const versionMsg_3_8 = "RFB 003.008\n" @@ -96,12 +90,12 @@ func (r *Recorder) writeStartSession(desktopName string, framebufferWidth uint16 func (r *Recorder) Consume(data *common.RfbSegment) error { switch data.SegmentType { case common.SegmentMessageSeparator: - switch data.UpcomingObjectType { - case FramebufferUpdate: + switch common.ServerMessageType(data.UpcomingObjectType) { + case common.FramebufferUpdate: r.writeToDisk() - case SetColourMapEntries: - case Bell: - case ServerCutText: + case common.SetColourMapEntries: + case common.Bell: + case common.ServerCutText: default: return errors.New("unknown message type:" + string(data.UpcomingObjectType)) } diff --git a/main.go b/main.go index 705e6c2..ab98b4c 100644 --- a/main.go +++ b/main.go @@ -3,7 +3,6 @@ package main import ( "fmt" "net" - "os" "time" "vncproxy/common" "vncproxy/encodings" @@ -21,8 +20,14 @@ func main() { var noauth vnc.ClientAuthNone authArr := []vnc.ClientAuth{&vnc.PasswordAuth{Password: "Ch_#!T@8"}, &noauth} - vncSrvMessagesChan := make(chan vnc.ServerMessage) - clientConn, err := vnc.Client(nc, &vnc.ClientConfig{Auth: authArr, ServerMessageCh: vncSrvMessagesChan, Exclusive: true}) + vncSrvMessagesChan := make(chan common.ServerMessage) + clientConn, err := vnc.Client(nc, + &vnc.ClientConfig{ + Auth: authArr, + ServerMessageCh: vncSrvMessagesChan, + Exclusive: true, + }) + if err != nil { fmt.Printf("error creating client: %s", err) } @@ -38,10 +43,10 @@ func main() { cpyRect := encodings.CopyRectEncoding{} //coRRE := encodings.CoRREEncoding{} //hextile := encodings.HextileEncoding{} - file, _ := os.OpenFile("stam.bin", os.O_CREATE|os.O_RDWR, 0755) - defer file.Close() + // file, _ := os.OpenFile("stam.bin", os.O_CREATE|os.O_RDWR, 0755) + // defer file.Close() - tight.SetOutput(file) + //tight.SetOutput(file) clientConn.SetEncodings([]common.Encoding{&cpyRect, &tight}) go func() { @@ -50,7 +55,7 @@ func main() { if err != nil { fmt.Printf("error requesting fb update: %s\n", err) } - time.Sleep(2 * time.Second) + time.Sleep(500 * time.Millisecond) } }() diff --git a/server/client-messages.go b/server/client-messages.go new file mode 100644 index 0000000..c30a414 --- /dev/null +++ b/server/client-messages.go @@ -0,0 +1,247 @@ +package server + +import ( + "encoding/binary" + "vncproxy/common" +) + +// SetPixelFormat holds the wire format message. +type SetPixelFormat struct { + _ [3]byte // padding + PF common.PixelFormat // pixel-format + _ [3]byte // padding after pixel format +} + +// Key represents a VNC key press. +type Key uint32 + +//go:generate stringer -type=Key + +// Keys is a slice of Key values. +type Keys []Key + +func (*SetPixelFormat) Type() common.ClientMessageType { + return common.SetPixelFormatMsgType +} + +func (msg *SetPixelFormat) Write(c common.Conn) error { + if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil { + return err + } + + if err := binary.Write(c, binary.BigEndian, msg); err != nil { + return err + } + + pf := c.PixelFormat() + // Invalidate the color map. + if pf.TrueColor { + c.SetColorMap(&common.ColorMap{}) + } + + return c.Flush() +} + +func (*SetPixelFormat) Read(c common.Conn) (common.ClientMessage, error) { + msg := SetPixelFormat{} + if err := binary.Read(c, binary.BigEndian, &msg); err != nil { + return nil, err + } + return &msg, nil +} + +// SetEncodings holds the wire format message, sans encoding-type field. +type SetEncodings struct { + _ [1]byte // padding + EncNum uint16 // number-of-encodings + Encodings []common.EncodingType +} + +func (*SetEncodings) Type() common.ClientMessageType { + return common.SetEncodingsMsgType +} + +func (*SetEncodings) Read(c common.Conn) (common.ClientMessage, error) { + msg := SetEncodings{} + var pad [1]byte + if err := binary.Read(c, binary.BigEndian, &pad); err != nil { + return nil, err + } + + if err := binary.Read(c, binary.BigEndian, &msg.EncNum); err != nil { + return nil, err + } + var enc common.EncodingType + for i := uint16(0); i < msg.EncNum; i++ { + if err := binary.Read(c, binary.BigEndian, &enc); err != nil { + return nil, err + } + msg.Encodings = append(msg.Encodings, enc) + } + c.SetEncodings(msg.Encodings) + return &msg, nil +} + +func (msg *SetEncodings) Write(c common.Conn) error { + if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil { + return err + } + + var pad [1]byte + if err := binary.Write(c, binary.BigEndian, pad); err != nil { + return err + } + + if uint16(len(msg.Encodings)) > msg.EncNum { + msg.EncNum = uint16(len(msg.Encodings)) + } + if err := binary.Write(c, binary.BigEndian, msg.EncNum); err != nil { + return err + } + for _, enc := range msg.Encodings { + if err := binary.Write(c, binary.BigEndian, enc); err != nil { + return err + } + } + return c.Flush() +} + +// FramebufferUpdateRequest holds the wire format message. +type FramebufferUpdateRequest struct { + Inc uint8 // incremental + X, Y uint16 // x-, y-position + Width, Height uint16 // width, height +} + +func (*FramebufferUpdateRequest) Type() common.ClientMessageType { + return common.FramebufferUpdateRequestMsgType +} + +func (*FramebufferUpdateRequest) Read(c common.Conn) (common.ClientMessage, error) { + msg := FramebufferUpdateRequest{} + if err := binary.Read(c, binary.BigEndian, &msg); err != nil { + return nil, err + } + return &msg, nil +} + +func (msg *FramebufferUpdateRequest) Write(c common.Conn) error { + if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil { + return err + } + if err := binary.Write(c, binary.BigEndian, msg); err != nil { + return err + } + return c.Flush() +} + +// KeyEvent holds the wire format message. +type KeyEvent struct { + Down uint8 // down-flag + _ [2]byte // padding + Key Key // key +} + +func (*KeyEvent) Type() common.ClientMessageType { + return common.KeyEventMsgType +} + +func (*KeyEvent) Read(c common.Conn) (common.ClientMessage, error) { + msg := KeyEvent{} + if err := binary.Read(c, binary.BigEndian, &msg); err != nil { + return nil, err + } + return &msg, nil +} + +func (msg *KeyEvent) Write(c common.Conn) error { + if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil { + return err + } + if err := binary.Write(c, binary.BigEndian, msg); err != nil { + return err + } + return c.Flush() +} + +// PointerEventMessage holds the wire format message. +type PointerEvent struct { + Mask uint8 // button-mask + X, Y uint16 // x-, y-position +} + +func (*PointerEvent) Type() common.ClientMessageType { + return common.PointerEventMsgType +} + +func (*PointerEvent) Read(c common.Conn) (common.ClientMessage, error) { + msg := PointerEvent{} + if err := binary.Read(c, binary.BigEndian, &msg); err != nil { + return nil, err + } + return &msg, nil +} + +func (msg *PointerEvent) Write(c common.Conn) error { + if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil { + return err + } + if err := binary.Write(c, binary.BigEndian, msg); err != nil { + return err + } + return c.Flush() +} + +// ClientCutText holds the wire format message, sans the text field. +type ClientCutText struct { + _ [3]byte // padding + Length uint32 // length + Text []byte +} + +func (*ClientCutText) Type() common.ClientMessageType { + return common.ClientCutTextMsgType +} + +func (*ClientCutText) Read(c common.Conn) (common.ClientMessage, error) { + msg := ClientCutText{} + var pad [3]byte + if err := binary.Read(c, binary.BigEndian, &pad); err != nil { + return nil, err + } + + if err := binary.Read(c, binary.BigEndian, &msg.Length); err != nil { + return nil, err + } + + msg.Text = make([]byte, msg.Length) + if err := binary.Read(c, binary.BigEndian, &msg.Text); err != nil { + return nil, err + } + return &msg, nil +} + +func (msg *ClientCutText) Write(c common.Conn) error { + if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil { + return err + } + + var pad [3]byte + if err := binary.Write(c, binary.BigEndian, &pad); err != nil { + return err + } + + if uint32(len(msg.Text)) > msg.Length { + msg.Length = uint32(len(msg.Text)) + } + + if err := binary.Write(c, binary.BigEndian, msg.Length); err != nil { + return err + } + + if err := binary.Write(c, binary.BigEndian, msg.Text); err != nil { + return err + } + + return c.Flush() +} diff --git a/server/debug.test b/server/debug.test new file mode 100644 index 0000000..1404cd8 Binary files /dev/null and b/server/debug.test differ diff --git a/server/handlers.go b/server/handlers.go new file mode 100644 index 0000000..cf70fb6 --- /dev/null +++ b/server/handlers.go @@ -0,0 +1,492 @@ +package server + +import ( + "encoding/binary" + "fmt" + + "io" +) + +// // ClientMessage is the interface +// type ClientMessage interface { +// Type() ClientMessageType +// Read(Conn) (ClientMessage, error) +// Write(Conn) error +// } + +// // ServerMessage is the interface +// type ServerMessage interface { +// Type() ServerMessageType +// Read(Conn) (ServerMessage, error) +// Write(Conn) error +// } + +const ProtoVersionLength = 12 + +const ( + ProtoVersionUnknown = "" + ProtoVersion33 = "RFB 003.003\n" + ProtoVersion38 = "RFB 003.008\n" +) + +func ParseProtoVersion(pv []byte) (uint, uint, error) { + var major, minor uint + + if len(pv) < ProtoVersionLength { + return 0, 0, fmt.Errorf("ProtocolVersion message too short (%v < %v)", len(pv), ProtoVersionLength) + } + + l, err := fmt.Sscanf(string(pv), "RFB %d.%d\n", &major, &minor) + if l != 2 { + return 0, 0, fmt.Errorf("error parsing ProtocolVersion.") + } + if err != nil { + return 0, 0, err + } + + return major, minor, nil +} + +// func ClientVersionHandler(cfg *ClientConfig, c ServerConn) error { +// var version [ProtoVersionLength]byte + +// if err := binary.Read(c, binary.BigEndian, &version); err != nil { +// return err +// } + +// major, minor, err := ParseProtoVersion(version[:]) +// if err != nil { +// return err +// } + +// pv := ProtoVersionUnknown +// if major == 3 { +// if minor >= 8 { +// pv = ProtoVersion38 +// } else if minor >= 3 { +// pv = ProtoVersion38 +// } +// } +// if pv == ProtoVersionUnknown { +// return fmt.Errorf("ProtocolVersion handshake failed; unsupported version '%v'", string(version[:])) +// } +// c.SetProtoVersion(string(version[:])) + +// if err := binary.Write(c, binary.BigEndian, []byte(pv)); err != nil { +// return err +// } +// return c.Flush() +// } + +func ServerVersionHandler(cfg *ServerConfig, c *ServerConn) error { + var version [ProtoVersionLength]byte + if err := binary.Write(c, binary.BigEndian, []byte(ProtoVersion38)); err != nil { + return err + } + if err := c.Flush(); err != nil { + return err + } + if err := binary.Read(c, binary.BigEndian, &version); err != nil { + return err + } + + major, minor, err := ParseProtoVersion(version[:]) + if err != nil { + return err + } + + pv := ProtoVersionUnknown + if major == 3 { + if minor >= 8 { + pv = ProtoVersion38 + } else if minor >= 3 { + pv = ProtoVersion33 + } + } + if pv == ProtoVersionUnknown { + return fmt.Errorf("ProtocolVersion handshake failed; unsupported version '%v'", string(version[:])) + } + + c.SetProtoVersion(pv) + return nil +} + +// func ClientSecurityHandler(cfg *ClientConfig, c Conn) error { +// var numSecurityTypes uint8 +// if err := binary.Read(c, binary.BigEndian, &numSecurityTypes); err != nil { +// return err +// } +// secTypes := make([]SecurityType, numSecurityTypes) +// if err := binary.Read(c, binary.BigEndian, &secTypes); err != nil { +// return err +// } + +// var secType SecurityHandler +// for _, st := range cfg.SecurityHandlers { +// for _, sc := range secTypes { +// if st.Type() == sc { +// secType = st +// } +// } +// } + +// if err := binary.Write(c, binary.BigEndian, cfg.SecurityHandlers[0].Type()); err != nil { +// return err +// } + +// if err := c.Flush(); err != nil { +// return err +// } + +// err := secType.Auth(c) +// if err != nil { +// return err +// } + +// var authCode uint32 +// if err := binary.Read(c, binary.BigEndian, &authCode); err != nil { +// return err +// } + +// if authCode == 1 { +// var reasonLength uint32 +// if err := binary.Read(c, binary.BigEndian, &reasonLength); err != nil { +// return err +// } +// reasonText := make([]byte, reasonLength) +// if err := binary.Read(c, binary.BigEndian, &reasonText); err != nil { +// return err +// } +// return fmt.Errorf("%s", reasonText) +// } + +// return nil +// } + +func ServerSecurityHandler(cfg *ServerConfig, c *ServerConn) error { + if err := binary.Write(c, binary.BigEndian, uint8(len(cfg.SecurityHandlers))); err != nil { + return err + } + + for _, sectype := range cfg.SecurityHandlers { + if err := binary.Write(c, binary.BigEndian, sectype.Type()); err != nil { + return err + } + } + + if err := c.Flush(); err != nil { + return err + } + + var secType SecurityType + if err := binary.Read(c, binary.BigEndian, &secType); err != nil { + return err + } + + secTypes := make(map[SecurityType]SecurityHandler) + for _, sType := range cfg.SecurityHandlers { + secTypes[sType.Type()] = sType + } + + sType, ok := secTypes[secType] + if !ok { + return fmt.Errorf("server type %d not implemented") + } + + var authCode uint32 + authErr := sType.Auth(c) + if authErr != nil { + authCode = uint32(1) + } + + if err := binary.Write(c, binary.BigEndian, authCode); err != nil { + return err + } + if err := c.Flush(); err != nil { + return err + } + + if authErr != nil { + if err := binary.Write(c, binary.BigEndian, len(authErr.Error())); err != nil { + return err + } + if err := binary.Write(c, binary.BigEndian, []byte(authErr.Error())); err != nil { + return err + } + if err := c.Flush(); err != nil { + return err + } + return authErr + } + + return nil +} + +// func ClientServerInitHandler(cfg *ClientConfig, c *ServerConn) error { +// srvInit := &ServerInit{} + +// if err := binary.Read(c, binary.BigEndian, &srvInit.FBWidth); err != nil { +// return err +// } +// if err := binary.Read(c, binary.BigEndian, &srvInit.FBHeight); err != nil { +// return err +// } +// if err := binary.Read(c, binary.BigEndian, &srvInit.PixelFormat); err != nil { +// return err +// } +// if err := binary.Read(c, binary.BigEndian, &srvInit.NameLength); err != nil { +// return err +// } + +// nameText := make([]byte, srvInit.NameLength) +// if err := binary.Read(c, binary.BigEndian, nameText); err != nil { +// return err +// } + +// srvInit.NameText = nameText +// c.SetDesktopName(string(srvInit.NameText)) +// c.SetWidth(srvInit.FBWidth) +// c.SetHeight(srvInit.FBHeight) +// c.SetPixelFormat(&srvInit.PixelFormat) +// return nil +// } + +func ServerServerInitHandler(cfg *ServerConfig, c *ServerConn) error { + srvInit := &ServerInit{ + FBWidth: c.Width(), + FBHeight: c.Height(), + PixelFormat: *c.PixelFormat(), + NameLength: uint32(len(cfg.DesktopName)), + NameText: []byte(cfg.DesktopName), + } + + if err := binary.Write(c, binary.BigEndian, srvInit.FBWidth); err != nil { + return err + } + if err := binary.Write(c, binary.BigEndian, srvInit.FBHeight); err != nil { + return err + } + + if err := srvInit.PixelFormat.WriteTo(c); err != nil { + return err + } + if err := binary.Write(c, binary.BigEndian, srvInit.NameLength); err != nil { + return err + } + + if err := binary.Write(c, binary.BigEndian, srvInit.NameText); err != nil { + return err + } + // + //serverCaps:=[]TightCapability{ + // TightCapability{uint32(1), [4]byte(StandardVendor), [8]byte("12345678")}, + //} + //clientCaps:=[]TightCapability{ + // TightCapability{uint32(1), [4]byte(StandardVendor), [8]byte("12345678")}, + //} + //encodingCaps:=[]TightCapability{ + // TightCapability{uint32(1), [4]byte(StandardVendor), [8]byte("12345678")}, + //} + // + //tightInit:=TightServerInit{ + // serverCaps,clientCaps,encodingCaps, + //} + //tightInit.WriteTo(c) + + return c.Flush() +} + +const ( + StandardVendor = "STDV" + TridiaVncVendor = "TRDV" + TightVncVendor = "TGHT" +) + +/* + void initCapabilities() { + tunnelCaps = new CapsContainer(); + authCaps = new CapsContainer(); + serverMsgCaps = new CapsContainer(); + clientMsgCaps = new CapsContainer(); + encodingCaps = new CapsContainer(); + + // Supported authentication methods + authCaps.add(AuthNone, StandardVendor, SigAuthNone, + "No authentication"); + authCaps.add(AuthVNC, StandardVendor, SigAuthVNC, + "Standard VNC password authentication"); + + // Supported non-standard server-to-client messages + // [NONE] + + // Supported non-standard client-to-server messages + // [NONE] + + // Supported encoding types + encodingCaps.add(EncodingCopyRect, StandardVendor, + SigEncodingCopyRect, "Standard CopyRect encoding"); + encodingCaps.add(EncodingRRE, StandardVendor, + SigEncodingRRE, "Standard RRE encoding"); + encodingCaps.add(EncodingCoRRE, StandardVendor, + SigEncodingCoRRE, "Standard CoRRE encoding"); + encodingCaps.add(EncodingHextile, StandardVendor, + SigEncodingHextile, "Standard Hextile encoding"); + encodingCaps.add(EncodingZRLE, StandardVendor, + SigEncodingZRLE, "Standard ZRLE encoding"); + encodingCaps.add(EncodingZlib, TridiaVncVendor, + SigEncodingZlib, "Zlib encoding"); + encodingCaps.add(EncodingTight, TightVncVendor, + SigEncodingTight, "Tight encoding"); + + // Supported pseudo-encoding types + encodingCaps.add(EncodingCompressLevel0, TightVncVendor, + SigEncodingCompressLevel0, "Compression level"); + encodingCaps.add(EncodingQualityLevel0, TightVncVendor, + SigEncodingQualityLevel0, "JPEG quality level"); + encodingCaps.add(EncodingXCursor, TightVncVendor, + SigEncodingXCursor, "X-style cursor shape update"); + encodingCaps.add(EncodingRichCursor, TightVncVendor, + SigEncodingRichCursor, "Rich-color cursor shape update"); + encodingCaps.add(EncodingPointerPos, TightVncVendor, + SigEncodingPointerPos, "Pointer position update"); + encodingCaps.add(EncodingLastRect, TightVncVendor, + SigEncodingLastRect, "LastRect protocol extension"); + encodingCaps.add(EncodingNewFBSize, TightVncVendor, + SigEncodingNewFBSize, "Framebuffer size change"); + } +*/ +type TightServerInit struct { + ServerMessageCaps []TightCapability + ClientMessageCaps []TightCapability + EncodingCaps []TightCapability +} + +func (t *TightServerInit) ReadFrom(r io.Reader) error { + var numSrvCaps uint16 + var numCliCaps uint16 + var numEncCaps uint16 + var padding uint16 + + if err := binary.Read(r, binary.BigEndian, &numSrvCaps); err != nil { + return err + } + + if err := binary.Read(r, binary.BigEndian, &numCliCaps); err != nil { + return err + } + + if err := binary.Read(r, binary.BigEndian, &numEncCaps); err != nil { + return err + } + + if err := binary.Read(r, binary.BigEndian, &padding); err != nil { + return err + } + + for i := 0; i < int(numSrvCaps); i++ { + cap := TightCapability{} + cap.ReadFrom(r) + t.ServerMessageCaps = append(t.ServerMessageCaps, cap) + } + + for i := 0; i < int(numCliCaps); i++ { + cap := TightCapability{} + cap.ReadFrom(r) + t.ClientMessageCaps = append(t.ClientMessageCaps, cap) + } + + for i := 0; i < int(numEncCaps); i++ { + cap := TightCapability{} + cap.ReadFrom(r) + t.EncodingCaps = append(t.EncodingCaps, cap) + } + return nil +} + +func (t *TightServerInit) WriteTo(w io.Writer) error { + if err := binary.Write(w, binary.BigEndian, uint16(len(t.ServerMessageCaps))); err != nil { + return err + } + if err := binary.Write(w, binary.BigEndian, uint16(len(t.ClientMessageCaps))); err != nil { + return err + } + if err := binary.Write(w, binary.BigEndian, uint16(len(t.EncodingCaps))); err != nil { + return err + } + + if err := binary.Write(w, binary.BigEndian, uint16(0)); err != nil { + return err + } + + for _, s := range t.ServerMessageCaps { + s.WriteTo(w) + } + for _, s := range t.ClientMessageCaps { + s.WriteTo(w) + } + for _, s := range t.EncodingCaps { + s.WriteTo(w) + } + return nil +} + +type TightCapability struct { + code uint32 + vendor [4]byte + name [8]byte +} + +func (t *TightCapability) WriteTo(w io.Writer) error { + if err := binary.Write(w, binary.BigEndian, t.code); err != nil { + return err + } + if err := binary.Write(w, binary.BigEndian, t.vendor); err != nil { + return err + } + if err := binary.Write(w, binary.BigEndian, t.name); err != nil { + return err + } + return nil +} + +func (t *TightCapability) ReadFrom(r io.Reader) error { + + if err := binary.Read(r, binary.BigEndian, &t.code); err != nil { + return err + } + + if err := binary.Read(r, binary.BigEndian, &t.vendor); err != nil { + return err + } + + if err := binary.Read(r, binary.BigEndian, &t.name); err != nil { + return err + } + return nil +} + +// func ClientClientInitHandler(cfg *ClientConfig, c *ServerConn) error { +// var shared uint8 +// if cfg.Exclusive { +// shared = 0 +// } else { +// shared = 1 +// } +// if err := binary.Write(c, binary.BigEndian, shared); err != nil { +// return err +// } +// return c.Flush() +// } + +func ServerClientInitHandler(cfg *ServerConfig, c *ServerConn) error { + var shared uint8 + if err := binary.Read(c, binary.BigEndian, &shared); err != nil { + return err + } + /* TODO + if shared != 1 { + c.SetShared(false) + } + */ + return nil +} diff --git a/server/security.go b/server/security.go new file mode 100644 index 0000000..6248115 --- /dev/null +++ b/server/security.go @@ -0,0 +1,333 @@ +package server + +import ( + "bytes" + "crypto/des" + "crypto/rand" + "errors" + "log" + "vncproxy/common" +) + +type SecurityType uint8 + +const ( + SecTypeUnknown = SecurityType(0) + SecTypeNone = SecurityType(1) + SecTypeVNC = SecurityType(2) + SecTypeVeNCrypt = SecurityType(19) +) + +type SecuritySubType uint32 + +const ( + SecSubTypeUnknown = SecuritySubType(0) +) + +const ( + SecSubTypeVeNCrypt01Unknown = SecuritySubType(0) + SecSubTypeVeNCrypt01Plain = SecuritySubType(19) + SecSubTypeVeNCrypt01TLSNone = SecuritySubType(20) + SecSubTypeVeNCrypt01TLSVNC = SecuritySubType(21) + SecSubTypeVeNCrypt01TLSPlain = SecuritySubType(22) + SecSubTypeVeNCrypt01X509None = SecuritySubType(23) + SecSubTypeVeNCrypt01X509VNC = SecuritySubType(24) + SecSubTypeVeNCrypt01X509Plain = SecuritySubType(25) +) + +const ( + SecSubTypeVeNCrypt02Unknown = SecuritySubType(0) + SecSubTypeVeNCrypt02Plain = SecuritySubType(256) + SecSubTypeVeNCrypt02TLSNone = SecuritySubType(257) + SecSubTypeVeNCrypt02TLSVNC = SecuritySubType(258) + SecSubTypeVeNCrypt02TLSPlain = SecuritySubType(259) + SecSubTypeVeNCrypt02X509None = SecuritySubType(260) + SecSubTypeVeNCrypt02X509VNC = SecuritySubType(261) + SecSubTypeVeNCrypt02X509Plain = SecuritySubType(262) +) + +type SecurityHandler interface { + Type() SecurityType + SubType() SecuritySubType + Auth(common.Conn) error +} + +// type ClientAuthNone struct{} + +// func (*ClientAuthNone) Type() SecurityType { +// return SecTypeNone +// } + +// func (*ClientAuthNone) SubType() SecuritySubType { +// return SecSubTypeUnknown +// } + +// func (*ClientAuthNone) Auth(conn common.Conn) error { +// return nil +// } + +// ServerAuthNone is the "none" authentication. See 7.2.1. +type ServerAuthNone struct{} + +func (*ServerAuthNone) Type() SecurityType { + return SecTypeNone +} + +func (*ServerAuthNone) Auth(c common.Conn) error { + return nil +} + +func (*ServerAuthNone) SubType() SecuritySubType { + return SecSubTypeUnknown +} + +// func (*ClientAuthVeNCrypt02Plain) Type() SecurityType { +// return SecTypeVeNCrypt +// } + +// func (*ClientAuthVeNCrypt02Plain) SubType() SecuritySubType { +// return SecSubTypeVeNCrypt02Plain +// } + +// // ClientAuthVeNCryptPlain see https://www.berrange.com/~dan/vencrypt.txt +// type ClientAuthVeNCrypt02Plain struct { +// Username []byte +// Password []byte +// } + +// func (auth *ClientAuthVeNCrypt02Plain) Auth(c common.Conn) error { +// if err := binary.Write(c, binary.BigEndian, []uint8{0, 2}); err != nil { +// return err +// } +// if err := c.Flush(); err != nil { +// return err +// } +// var ( +// major, minor uint8 +// ) + +// if err := binary.Read(c, binary.BigEndian, &major); err != nil { +// return err +// } +// if err := binary.Read(c, binary.BigEndian, &minor); err != nil { +// return err +// } +// res := uint8(1) +// if major == 0 && minor == 2 { +// res = uint8(0) +// } +// if err := binary.Write(c, binary.BigEndian, res); err != nil { +// return err +// } +// c.Flush() +// if err := binary.Write(c, binary.BigEndian, uint8(1)); err != nil { +// return err +// } +// if err := binary.Write(c, binary.BigEndian, auth.SubType()); err != nil { +// return err +// } +// if err := c.Flush(); err != nil { +// return err +// } +// var secType SecuritySubType +// if err := binary.Read(c, binary.BigEndian, &secType); err != nil { +// return err +// } +// if secType != auth.SubType() { +// binary.Write(c, binary.BigEndian, uint8(1)) +// c.Flush() +// return fmt.Errorf("invalid sectype") +// } +// if len(auth.Password) == 0 || len(auth.Username) == 0 { +// return fmt.Errorf("Security Handshake failed; no username and/or password provided for VeNCryptAuth.") +// } +// /* +// if err := binary.Write(c, binary.BigEndian, uint32(len(auth.Username))); err != nil { +// return err +// } + +// if err := binary.Write(c, binary.BigEndian, uint32(len(auth.Password))); err != nil { +// return err +// } + +// if err := binary.Write(c, binary.BigEndian, auth.Username); err != nil { +// return err +// } + +// if err := binary.Write(c, binary.BigEndian, auth.Password); err != nil { +// return err +// } +// */ +// var ( +// uLength, pLength uint32 +// ) +// if err := binary.Read(c, binary.BigEndian, &uLength); err != nil { +// return err +// } +// if err := binary.Read(c, binary.BigEndian, &pLength); err != nil { +// return err +// } + +// username := make([]byte, uLength) +// password := make([]byte, pLength) +// if err := binary.Read(c, binary.BigEndian, &username); err != nil { +// return err +// } + +// if err := binary.Read(c, binary.BigEndian, &password); err != nil { +// return err +// } +// if !bytes.Equal(auth.Username, username) || !bytes.Equal(auth.Password, password) { +// return fmt.Errorf("invalid username/password") +// } +// return nil +// } + +// ServerAuthVNC is the standard password authentication. See 7.2.2. +type ServerAuthVNC struct{} + +func (*ServerAuthVNC) Type() SecurityType { + return SecTypeVNC +} + +func (*ServerAuthVNC) SubType() SecuritySubType { + return SecSubTypeUnknown +} + +const AUTH_FAIL = "Authentication Failure" + +func (auth *ServerAuthVNC) Auth(c common.Conn) error { + buf := make([]byte, 8+len([]byte(AUTH_FAIL))) + rand.Read(buf[:16]) // Random 16 bytes in buf + sndsz, err := c.Write(buf[:16]) + if err != nil { + log.Printf("Error sending challenge to client: %s\n", err.Error()) + return errors.New("Error sending challenge to client:" + err.Error()) + } + if sndsz != 16 { + log.Printf("The full 16 byte challenge was not sent!\n") + return errors.New("The full 16 byte challenge was not sent") + } + c.Flush() + buf2 := make([]byte, 16) + _, err = c.Read(buf2) + if err != nil { + log.Printf("The authentication result was not read: %s\n", err.Error()) + return errors.New("The authentication result was not read" + err.Error()) + } + AuthText := "1234" + bk, err := des.NewCipher([]byte(fixDesKey(AuthText))) + if err != nil { + log.Printf("Error generating authentication cipher: %s\n", err.Error()) + return errors.New("Error generating authentication cipher") + } + buf3 := make([]byte, 16) + bk.Encrypt(buf3, buf) //Encrypt first 8 bytes + bk.Encrypt(buf3[8:], buf[8:]) // Encrypt second 8 bytes + if bytes.Compare(buf2, buf3) != 0 { // If the result does not decrypt correctly to what we sent then a problem + SetUint32(buf, 0, 1) + SetUint32(buf, 4, uint32(len([]byte(AUTH_FAIL)))) + copy(buf[8:], []byte(AUTH_FAIL)) + c.Write(buf) + c.Flush() + return errors.New("Authentication failed") + } + return nil +} + +// SetUint32 set 4 bytes at pos in buf to the val (in big endian format) +// A test is done to ensure there are 4 bytes available at pos in the buffer +func SetUint32(buf []byte, pos int, val uint32) { + if pos+4 > len(buf) { + return + } + for i := 0; i < 4; i++ { + buf[3-i+pos] = byte(val) + val >>= 8 + } +} + +// fixDesKeyByte is used to mirror a byte's bits +// This is not clearly indicated by the document, but is in actual fact used +func fixDesKeyByte(val byte) byte { + var newval byte = 0 + for i := 0; i < 8; i++ { + newval <<= 1 + newval += (val & 1) + val >>= 1 + } + return newval +} + +// fixDesKey will make sure that exactly 8 bytes is used either by truncating or padding with nulls +// The bytes are then bit mirrored and returned +func fixDesKey(key string) []byte { + tmp := []byte(key) + buf := make([]byte, 8) + if len(tmp) <= 8 { + copy(buf, tmp) + } else { + copy(buf, tmp[:8]) + } + for i := 0; i < 8; i++ { + buf[i] = fixDesKeyByte(buf[i]) + } + return buf +} + +// // ClientAuthVNC is the standard password authentication. See 7.2.2. +// type ClientAuthVNC struct { +// Challenge [16]byte +// Password []byte +// } + +// func (*ClientAuthVNC) Type() SecurityType { +// return SecTypeVNC +// } +// func (*ClientAuthVNC) SubType() SecuritySubType { +// return SecSubTypeUnknown +// } + +// func (auth *ClientAuthVNC) Auth(c common.Conn) error { +// if len(auth.Password) == 0 { +// return fmt.Errorf("Security Handshake failed; no password provided for VNCAuth.") +// } + +// if err := binary.Read(c, binary.BigEndian, auth.Challenge); err != nil { +// return err +// } + +// auth.encode() + +// // Send the encrypted challenge back to server +// if err := binary.Write(c, binary.BigEndian, auth.Challenge); err != nil { +// return err +// } + +// return c.Flush() +// } + +// func (auth *ClientAuthVNC) encode() error { +// // Copy password string to 8 byte 0-padded slice +// key := make([]byte, 8) +// copy(key, auth.Password) + +// // Each byte of the password needs to be reversed. This is a +// // non RFC-documented behaviour of VNC clients and servers +// for i := range key { +// key[i] = (key[i]&0x55)<<1 | (key[i]&0xAA)>>1 // Swap adjacent bits +// key[i] = (key[i]&0x33)<<2 | (key[i]&0xCC)>>2 // Swap adjacent pairs +// key[i] = (key[i]&0x0F)<<4 | (key[i]&0xF0)>>4 // Swap the 2 halves +// } + +// // Encrypt challenge with key. +// cipher, err := des.NewCipher(key) +// if err != nil { +// return err +// } +// for i := 0; i < len(auth.Challenge); i += cipher.BlockSize() { +// cipher.Encrypt(auth.Challenge[i:i+cipher.BlockSize()], auth.Challenge[i:i+cipher.BlockSize()]) +// } + +// return nil +// } diff --git a/server/server-conn.go b/server/server-conn.go new file mode 100644 index 0000000..6a3fda1 --- /dev/null +++ b/server/server-conn.go @@ -0,0 +1,137 @@ +package server + +import ( + "bufio" + "net" + "sync" + "vncproxy/common" +) + +type ServerConn struct { + c net.Conn + cfg *ServerConfig + br *bufio.Reader + bw *bufio.Writer + protocol string + m sync.Mutex + // If the pixel format uses a color map, then this is the color + // map that is used. This should not be modified directly, since + // the data comes from the server. + // Definition in ยง5 - Representation of Pixel Data. + colorMap *common.ColorMap + + // Name associated with the desktop, sent from the server. + desktopName string + + // Encodings supported by the client. This should not be modified + // directly. Instead, SetEncodings() should be used. + encodings []common.Encoding + + // Height of the frame buffer in pixels, sent to the client. + fbHeight uint16 + + // Width of the frame buffer in pixels, sent to the client. + fbWidth uint16 + + // The pixel format associated with the connection. This shouldn't + // be modified. If you wish to set a new pixel format, use the + // SetPixelFormat method. + pixelFormat *common.PixelFormat + + quit chan struct{} +} + +func (c *ServerConn) UnreadByte() error { + return c.br.UnreadByte() +} + +func (c *ServerConn) Conn() net.Conn { + return c.c +} + +func (c *ServerConn) SetEncodings(encs []common.EncodingType) error { + encodings := make(map[int32]common.Encoding) + for _, enc := range c.cfg.Encodings { + encodings[enc.Type()] = enc + } + for _, encType := range encs { + if enc, ok := encodings[int32(encType)]; ok { + c.encodings = append(c.encodings, enc) + } + } + return nil +} + +func (c *ServerConn) SetProtoVersion(pv string) { + c.protocol = pv +} + +func (c *ServerConn) Flush() error { + // c.m.Lock() + // defer c.m.Unlock() + return c.bw.Flush() +} + +func (c *ServerConn) Close() error { + return c.c.Close() +} + +/* +func (c *ServerConn) Input() chan *ServerMessage { + return c.cfg.ServerMessageCh +} + +func (c *ServerConn) Output() chan *ClientMessage { + return c.cfg.ClientMessageCh +} +*/ +func (c *ServerConn) Read(buf []byte) (int, error) { + return c.br.Read(buf) +} + +func (c *ServerConn) Write(buf []byte) (int, error) { + // c.m.Lock() + // defer c.m.Unlock() + return c.bw.Write(buf) +} + +func (c *ServerConn) ColorMap() *common.ColorMap { + return c.colorMap +} + +func (c *ServerConn) SetColorMap(cm *common.ColorMap) { + c.colorMap = cm +} +func (c *ServerConn) DesktopName() string { + return c.desktopName +} +func (c *ServerConn) PixelFormat() *common.PixelFormat { + return c.pixelFormat +} +func (c *ServerConn) SetDesktopName(name string) { + c.desktopName = name +} +func (c *ServerConn) SetPixelFormat(pf *common.PixelFormat) error { + c.pixelFormat = pf + return nil +} +func (c *ServerConn) Encodings() []common.Encoding { + return c.encodings +} +func (c *ServerConn) Width() uint16 { + return c.fbWidth +} +func (c *ServerConn) Height() uint16 { + return c.fbHeight +} +func (c *ServerConn) Protocol() string { + return c.protocol +} + +// TODO send desktopsize pseudo encoding +func (c *ServerConn) SetWidth(w uint16) { + c.fbWidth = w +} +func (c *ServerConn) SetHeight(h uint16) { + c.fbHeight = h +} diff --git a/server/server.go b/server/server.go new file mode 100644 index 0000000..d7794b3 --- /dev/null +++ b/server/server.go @@ -0,0 +1,366 @@ +package server + +import ( + "bufio" + "context" + "encoding/binary" + "fmt" + "net" + "sync" + "vncproxy/common" +) + +var DefaultClientMessages = []common.ClientMessage{ + &SetPixelFormat{}, + &SetEncodings{}, + &FramebufferUpdateRequest{}, + &KeyEvent{}, + &PointerEvent{}, + &ClientCutText{}, +} + +type ServerInit struct { + FBWidth, FBHeight uint16 + PixelFormat common.PixelFormat + NameLength uint32 + NameText []byte +} + +//var _ Conn = (*ServerConn)(nil) + +// ServerMessage represents a Client-to-Server RFB message type. +// type ServerMessageType uint8 + +// //go:generate stringer -type=ServerMessageType + +// // Client-to-Server message types. +// const ( +// FramebufferUpdateMsgType ServerMessageType = iota +// SetColorMapEntriesMsgType +// BellMsgType +// ServerCutTextMsgType +// ) + +// FramebufferUpdate holds a FramebufferUpdate wire format message. +type FramebufferUpdate struct { + _ [1]byte // pad + NumRect uint16 // number-of-rectangles + Rects []*common.Rectangle // rectangles +} + +// func (*FramebufferUpdate) Type() ServerMessageType { +// return FramebufferUpdateMsgType +// } + +type ServerHandler func(*ServerConfig, *ServerConn) error + +type ServerConfig struct { + //VersionHandler ServerHandler + //SecurityHandler ServerHandler + SecurityHandlers []SecurityHandler + //ClientInitHandler ServerHandler + //ServerInitHandler ServerHandler + Encodings []common.Encoding + PixelFormat *common.PixelFormat + ColorMap *common.ColorMap + ClientMessageCh chan common.ClientMessage + ServerMessageCh chan common.ServerMessage + ClientMessages []common.ClientMessage + DesktopName []byte + Height uint16 + Width uint16 +} + +func NewServerConn(c net.Conn, cfg *ServerConfig) (*ServerConn, error) { + if cfg.ClientMessageCh == nil { + return nil, fmt.Errorf("ClientMessageCh nil") + } + + if len(cfg.ClientMessages) == 0 { + return nil, fmt.Errorf("ClientMessage 0") + } + + return &ServerConn{ + c: c, + br: bufio.NewReader(c), + bw: bufio.NewWriter(c), + cfg: cfg, + quit: make(chan struct{}), + encodings: cfg.Encodings, + pixelFormat: cfg.PixelFormat, + fbWidth: cfg.Width, + fbHeight: cfg.Height, + }, nil +} + +func Serve(ctx context.Context, ln net.Listener, cfg *ServerConfig) error { + for { + + c, err := ln.Accept() + if err != nil { + continue + } + + conn, err := NewServerConn(c, cfg) + if err != nil { + continue + } + + if err := ServerVersionHandler(cfg, conn); err != nil { + conn.Close() + continue + } + + if err := ServerSecurityHandler(cfg, conn); err != nil { + conn.Close() + continue + } + + if err := ServerClientInitHandler(cfg, conn); err != nil { + conn.Close() + continue + } + + if err := ServerServerInitHandler(cfg, conn); err != nil { + conn.Close() + continue + } + + go conn.Handle() + } +} + +func (c *ServerConn) Handle() error { + //var err error + var wg sync.WaitGroup + + defer c.Close() + + //create a map of all message types + clientMessages := make(map[common.ClientMessageType]common.ClientMessage) + for _, m := range c.cfg.ClientMessages { + clientMessages[m.Type()] = m + } + wg.Add(2) + + // server + go func() error { + defer wg.Done() + for { + select { + case msg := <-c.cfg.ServerMessageCh: + fmt.Printf("%v", msg) + // if err = msg.Write(c); err != nil { + // return err + // } + case <-c.quit: + return nil + } + } + }() + + // client + go func() error { + defer wg.Done() + for { + select { + case <-c.quit: + return nil + default: + var messageType common.ClientMessageType + if err := binary.Read(c, binary.BigEndian, &messageType); err != nil { + return err + } + msg, ok := clientMessages[messageType] + if !ok { + return fmt.Errorf("unsupported message-type: %v", messageType) + + } + parsedMsg, err := msg.Read(c) + if err != nil { + fmt.Printf("srv err %s\n", err.Error()) + return err + } + fmt.Printf("message:%s, %v\n",parsedMsg.Type(), parsedMsg) + //c.cfg.ClientMessageCh <- parsedMsg + } + } + }() + + wg.Wait() + return nil +} + +// type ServerCutText struct { +// _ [1]byte +// Length uint32 +// Text []byte +// } + +// func (*ServerCutText) Type() ServerMessageType { +// return ServerCutTextMsgType +// } + +// func (*ServerCutText) Read(c common.Conn) (common.ServerMessage, error) { +// msg := ServerCutText{} + +// var pad [1]byte +// if err := binary.Read(c, binary.BigEndian, &pad); err != nil { +// return nil, err +// } + +// if err := binary.Read(c, binary.BigEndian, &msg.Length); err != nil { +// return nil, err +// } + +// msg.Text = make([]byte, msg.Length) +// if err := binary.Read(c, binary.BigEndian, &msg.Text); err != nil { +// return nil, err +// } +// return &msg, nil +// } + +// func (msg *ServerCutText) Write(c common.Conn) error { +// if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil { +// return err +// } +// var pad [1]byte +// if err := binary.Write(c, binary.BigEndian, pad); err != nil { +// return err +// } + +// if msg.Length < uint32(len(msg.Text)) { +// msg.Length = uint32(len(msg.Text)) +// } +// if err := binary.Write(c, binary.BigEndian, msg.Length); err != nil { +// return err +// } + +// if err := binary.Write(c, binary.BigEndian, msg.Text); err != nil { +// return err +// } +// return nil +// } + +// type Bell struct{} + +// func (*Bell) Type() ServerMessageType { +// return BellMsgType +// } + +// func (*Bell) Read(c common.Conn) (common.ServerMessage, error) { +// return &Bell{}, nil +// } + +// func (msg *Bell) Write(c common.Conn) error { +// return binary.Write(c, binary.BigEndian, msg.Type()) +// } + +// type SetColorMapEntries struct { +// _ [1]byte +// FirstColor uint16 +// ColorsNum uint16 +// Colors []common.Color +// } + +// func (*SetColorMapEntries) Type() ServerMessageType { +// return SetColorMapEntriesMsgType +// } + +// func (*SetColorMapEntries) Read(c common.Conn) (common.ServerMessage, error) { +// msg := SetColorMapEntries{} +// var pad [1]byte +// if err := binary.Read(c, binary.BigEndian, &pad); err != nil { +// return nil, err +// } + +// if err := binary.Read(c, binary.BigEndian, &msg.FirstColor); err != nil { +// return nil, err +// } + +// if err := binary.Read(c, binary.BigEndian, &msg.ColorsNum); err != nil { +// return nil, err +// } + +// msg.Colors = make([]common.Color, msg.ColorsNum) +// colorMap := c.ColorMap() + +// for i := uint16(0); i < msg.ColorsNum; i++ { +// color := &msg.Colors[i] +// if err := binary.Read(c, binary.BigEndian, &color); err != nil { +// return nil, err +// } +// colorMap[msg.FirstColor+i] = *color +// } +// c.SetColorMap(colorMap) +// return &msg, nil +// } + +// func (msg *SetColorMapEntries) Write(c common.Conn) error { +// if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil { +// return err +// } +// var pad [1]byte +// if err := binary.Write(c, binary.BigEndian, &pad); err != nil { +// return err +// } + +// if err := binary.Write(c, binary.BigEndian, msg.FirstColor); err != nil { +// return err +// } + +// if msg.ColorsNum < uint16(len(msg.Colors)) { +// msg.ColorsNum = uint16(len(msg.Colors)) +// } +// if err := binary.Write(c, binary.BigEndian, msg.ColorsNum); err != nil { +// return err +// } + +// for i := 0; i < len(msg.Colors); i++ { +// color := msg.Colors[i] +// if err := binary.Write(c, binary.BigEndian, color); err != nil { +// return err +// } +// } + +// return nil +// } + +// func (*FramebufferUpdate) Read(cliInfo common.IClientConn, c *common.RfbReadHelper) (common.ServerMessage, error) { +// msg := FramebufferUpdate{} +// var pad [1]byte +// if err := binary.Read(c, binary.BigEndian, &pad); err != nil { +// return nil, err +// } + +// if err := binary.Read(c, binary.BigEndian, &msg.NumRect); err != nil { +// return nil, err +// } +// for i := uint16(0); i < msg.NumRect; i++ { +// rect := &common.Rectangle{} +// if err := rect.Read(c); err != nil { +// return nil, err +// } +// msg.Rects = append(msg.Rects, rect) +// } +// return &msg, nil +// } + +// func (msg *FramebufferUpdate) Write(c common.Conn) error { +// if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil { +// return err +// } +// var pad [1]byte +// if err := binary.Write(c, binary.BigEndian, pad); err != nil { +// return err +// } +// if err := binary.Write(c, binary.BigEndian, msg.NumRect); err != nil { +// return err +// } +// for _, rect := range msg.Rects { +// if err := rect.Write(c); err != nil { +// return err +// } +// } +// return c.Flush() +// } diff --git a/server/server_test.go b/server/server_test.go new file mode 100644 index 0000000..fb7adef --- /dev/null +++ b/server/server_test.go @@ -0,0 +1,44 @@ +package server + +import ( + "context" + "log" + "net" + "testing" + "vncproxy/common" + "vncproxy/encodings" +) + +func TestServer(t *testing.T) { + ln, err := net.Listen("tcp", ":5903") + if err != nil { + log.Fatalf("Error listen. %v", err) + } + + chServer := make(chan common.ClientMessage) + chClient := make(chan common.ServerMessage) + + cfg := &ServerConfig{ + //SecurityHandlers: []SecurityHandler{&ServerAuthNone{}, &ServerAuthVNC{}}, + SecurityHandlers: []SecurityHandler{&ServerAuthVNC{}}, + Encodings: []common.Encoding{&encodings.RawEncoding{}, &encodings.TightEncoding{}, &encodings.CopyRectEncoding{}}, + PixelFormat: common.NewPixelFormat(32), + ClientMessageCh: chServer, + ServerMessageCh: chClient, + ClientMessages: DefaultClientMessages, + DesktopName: []byte("workDesk"), + Height: uint16(768), + Width: uint16(1024), + + } + go Serve(context.Background(), ln, cfg) + + // Process messages coming in on the ClientMessage channel. + for { + msg := <-chClient + switch msg.Type() { + default: + log.Printf("Received message type:%v msg:%v\n", msg.Type(), msg) + } + } +} diff --git a/vnc/client-conn.go b/vnc/client-conn.go index 1a59085..8ed6f93 100644 --- a/vnc/client-conn.go +++ b/vnc/client-conn.go @@ -12,15 +12,6 @@ import ( ) // A ServerMessage implements a message sent from the server to the client. -type ServerMessage interface { - // The type of the message that is sent down on the wire. - Type() uint8 - String() string - // Read reads the contents of the message from the reader. At the point - // this is called, the message type has already been read from the reader. - // This should return a new ServerMessage that is the appropriate type. - Read(*ClientConn, *common.RfbReadHelper) (ServerMessage, error) -} // A ClientAuth implements a method of authenticating with a remote server. type ClientAuth interface { @@ -42,7 +33,7 @@ type ClientConn struct { // If the pixel format uses a color map, then this is the color // map that is used. This should not be modified directly, since // the data comes from the server. - ColorMap [256]Color + ColorMap common.ColorMap // Encodings supported by the client. This should not be modified // directly. Instead, SetEncodings should be used. @@ -80,12 +71,12 @@ type ClientConfig struct { // from the VNC server may block indefinitely. It is up to the user // of the library to ensure that this channel is properly read. // If this is not set, then all messages will be discarded. - ServerMessageCh chan<- ServerMessage + ServerMessageCh chan<- common.ServerMessage // A slice of supported messages that can be read from the server. // This only needs to contain NEW server messages, and doesn't // need to explicitly contain the RFC-required messages. - ServerMessages []ServerMessage + ServerMessages []common.ServerMessage } func Client(c net.Conn, cfg *ClientConfig) (*ClientConn, error) { @@ -108,6 +99,18 @@ func (c *ClientConn) Close() error { return c.conn.Close() } +func (c *ClientConn) Encodings() []common.Encoding { + return c.Encs +} + +func (c *ClientConn) CurrentPixelFormat() *common.PixelFormat { + return &c.PixelFormat +} + +func (c *ClientConn) CurrentColorMap() *common.ColorMap { + return &c.ColorMap +} + // CutText tells the server that the client has new text in its cut buffer. // The text string MUST only contain Latin-1 characters. This encoding // is compatible with Go's native string format, but can only use up to @@ -295,7 +298,7 @@ func (c *ClientConn) SetPixelFormat(format *common.PixelFormat) error { } // Reset the color map as according to RFC. - var newColorMap [256]Color + var newColorMap common.ColorMap c.ColorMap = newColorMap return nil @@ -447,9 +450,9 @@ func (c *ClientConn) mainLoop() { reader := &common.RfbReadHelper{Reader: c.conn, Listener: rec} // Build the map of available server messages - typeMap := make(map[uint8]ServerMessage) + typeMap := make(map[uint8]common.ServerMessage) - defaultMessages := []ServerMessage{ + defaultMessages := []common.ServerMessage{ new(FramebufferUpdateMessage), new(SetColorMapEntriesMessage), new(BellMessage), @@ -477,7 +480,7 @@ func (c *ClientConn) mainLoop() { // Unsupported message type! Bad! break } - reader.SendMessageSeparator(int(messageType)) + reader.SendMessageSeparator(common.ServerMessageType(messageType)) reader.PublishBytes([]byte{byte(messageType)}) parsedMsg, err := msg.Read(c, reader) diff --git a/vnc/pixel_format.go b/vnc/pixel-format.go similarity index 100% rename from vnc/pixel_format.go rename to vnc/pixel-format.go diff --git a/vnc/server_messages.go b/vnc/server-messages.go similarity index 86% rename from vnc/server_messages.go rename to vnc/server-messages.go index aaeb167..f5cddd6 100644 --- a/vnc/server_messages.go +++ b/vnc/server-messages.go @@ -27,7 +27,7 @@ func (*FramebufferUpdateMessage) Type() uint8 { return 0 } -func (fbm *FramebufferUpdateMessage) Read(c *ClientConn, r *common.RfbReadHelper) (ServerMessage, error) { +func (fbm *FramebufferUpdateMessage) Read(c common.IClientConn, r *common.RfbReadHelper) (common.ServerMessage, error) { // Read off the padding var padding [1]byte @@ -42,7 +42,7 @@ func (fbm *FramebufferUpdateMessage) Read(c *ClientConn, r *common.RfbReadHelper // Build the map of encodings supported encMap := make(map[int32]common.Encoding) - for _, enc := range c.Encs { + for _, enc := range c.Encodings() { encMap[enc.Type()] = enc } @@ -82,7 +82,7 @@ func (fbm *FramebufferUpdateMessage) Read(c *ClientConn, r *common.RfbReadHelper } var err error - rect.Enc, err = enc.Read(&c.PixelFormat, rect, r) + rect.Enc, err = enc.Read(c.CurrentPixelFormat(), rect, r) if err != nil { return nil, err } @@ -99,7 +99,7 @@ func (fbm *FramebufferUpdateMessage) Read(c *ClientConn, r *common.RfbReadHelper // See RFC 6143 Section 7.6.2 type SetColorMapEntriesMessage struct { FirstColor uint16 - Colors []Color + Colors []common.Color } func (m *SetColorMapEntriesMessage) String() string { @@ -110,7 +110,7 @@ func (*SetColorMapEntriesMessage) Type() uint8 { return 1 } -func (*SetColorMapEntriesMessage) Read(c *ClientConn, r *common.RfbReadHelper) (ServerMessage, error) { +func (*SetColorMapEntriesMessage) Read(c common.IClientConn, r *common.RfbReadHelper) (common.ServerMessage, error) { // Read off the padding var padding [1]byte if _, err := io.ReadFull(r, padding[:]); err != nil { @@ -127,7 +127,7 @@ func (*SetColorMapEntriesMessage) Read(c *ClientConn, r *common.RfbReadHelper) ( return nil, err } - result.Colors = make([]Color, numColors) + result.Colors = make([]common.Color, numColors) for i := uint16(0); i < numColors; i++ { color := &result.Colors[i] @@ -142,9 +142,9 @@ func (*SetColorMapEntriesMessage) Read(c *ClientConn, r *common.RfbReadHelper) ( return nil, err } } - + cmap := c.CurrentColorMap() // Update the connection's color map - c.ColorMap[result.FirstColor+i] = *color + cmap[result.FirstColor+i] = *color } return &result, nil @@ -163,7 +163,7 @@ func (*BellMessage) Type() uint8 { return 2 } -func (*BellMessage) Read(*ClientConn, *common.RfbReadHelper) (ServerMessage, error) { +func (*BellMessage) Read(common.IClientConn, *common.RfbReadHelper) (common.ServerMessage, error) { return new(BellMessage), nil } @@ -182,7 +182,7 @@ func (*ServerCutTextMessage) Type() uint8 { return 3 } -func (*ServerCutTextMessage) Read(conn *ClientConn, r *common.RfbReadHelper) (ServerMessage, error) { +func (*ServerCutTextMessage) Read(conn common.IClientConn, r *common.RfbReadHelper) (common.ServerMessage, error) { //reader := common.RfbReadHelper{Reader: r} // Read off the padding