fixed recorder (message init logic broke it)

added some handling for pixel format changes
This commit is contained in:
amit bezalel 2017-07-12 01:06:02 +03:00
parent 18bef62b79
commit fe51682a55
13 changed files with 401 additions and 351 deletions

View File

@ -2,29 +2,12 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="a5d84862-9821-4d30-9a77-6235b55d6727" name="Default" comment="">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/encodings/enc-pseudo.go" />
<change type="DELETED" beforePath="$PROJECT_DIR$/common/Logger.go" afterPath="" />
<change type="DELETED" beforePath="$PROJECT_DIR$/tee-listeners/multiListener.go" afterPath="" />
<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$/client/client-conn.go" afterPath="$PROJECT_DIR$/client/client-conn.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/client/pixel-format.go" afterPath="$PROJECT_DIR$/client/pixel-format.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/client/server-messages.go" afterPath="$PROJECT_DIR$/client/server-messages.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/client-message.go" afterPath="$PROJECT_DIR$/common/client-message.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/server-message.go" afterPath="$PROJECT_DIR$/common/server-message.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-hextile.go" afterPath="$PROJECT_DIR$/encodings/enc-hextile.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-tightpng.go" afterPath="$PROJECT_DIR$/encodings/enc-tightpng.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/main.go" afterPath="$PROJECT_DIR$/main.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-pseudo.go" afterPath="$PROJECT_DIR$/encodings/enc-pseudo.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/proxy/proxy.go" afterPath="$PROJECT_DIR$/proxy/proxy.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/server/server-conn.go" afterPath="$PROJECT_DIR$/server/server-conn.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/server/server.go" afterPath="$PROJECT_DIR$/server/server.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/server/ws-server-go.go" afterPath="$PROJECT_DIR$/server/ws-server-go.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/server/ws-server-gorilla.go" afterPath="$PROJECT_DIR$/server/ws-server-gorilla.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/server/ws_test.go" afterPath="$PROJECT_DIR$/server/ws_test.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/tee-listeners/recorder.go" afterPath="$PROJECT_DIR$/tee-listeners/recorder.go" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/tee-listeners/write-to.go" afterPath="$PROJECT_DIR$/tee-listeners/write-to.go" />
</list>
@ -57,21 +40,36 @@
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="enc-zrle.go" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/encodings/enc-zrle.go">
<file leaf-file-name="client-conn.go" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/client/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 relative-caret-position="-553">
<caret line="472" column="19" lean-forward="true" selection-start-line="472" selection-start-column="19" selection-end-line="472" selection-end-column="19" />
<folding>
<element signature="e#16#123#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="server-messages.go" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/client/server-messages.go">
<file leaf-file-name="ws-server-go.go" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/server/ws-server-go.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="126">
<caret line="7" column="12" lean-forward="false" selection-start-line="7" selection-start-column="8" selection-end-line="7" selection-end-column="12" />
<state relative-caret-position="197">
<caret line="50" column="32" lean-forward="true" selection-start-line="50" selection-start-column="32" selection-end-line="50" selection-end-column="32" />
<folding>
<marker date="1499771264739" expanded="true" signature="23:27" ph="..." />
<marker date="1499771264739" expanded="true" signature="731:768" ph="{...}" />
</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="313">
<caret line="221" column="13" lean-forward="true" selection-start-line="221" selection-start-column="13" selection-end-line="221" selection-end-column="13" />
<folding />
</state>
</provider>
@ -80,85 +78,79 @@
<file leaf-file-name="proxy.go" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/proxy/proxy.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="144">
<caret line="8" column="9" lean-forward="false" selection-start-line="8" selection-start-column="9" selection-end-line="8" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="proxy_test.go" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/proxy/proxy_test.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="270">
<caret line="15" column="43" lean-forward="true" selection-start-line="15" selection-start-column="43" selection-end-line="15" selection-end-column="43" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="main.go" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/main.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="378">
<caret line="65" column="46" lean-forward="true" selection-start-line="65" selection-start-column="46" selection-end-line="65" selection-end-column="46" />
<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-pseudo.go" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/encodings/enc-pseudo.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="216">
<caret line="12" column="79" lean-forward="false" selection-start-line="12" selection-start-column="79" selection-end-line="12" selection-end-column="79" />
<state relative-caret-position="395">
<caret line="129" column="1" lean-forward="true" selection-start-line="129" selection-start-column="1" selection-end-line="129" selection-end-column="1" />
<folding>
<element signature="e#19#43#0" expanded="true" />
<element signature="e#15#200#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="enc-rre.go" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/encodings/enc-rre.go">
<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="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 relative-caret-position="180">
<caret line="10" column="4" lean-forward="false" selection-start-line="10" selection-start-column="4" selection-end-line="10" selection-end-column="4" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="enc-zlib.go" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/encodings/enc-zlib.go">
<file leaf-file-name="write-to.go" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/tee-listeners/write-to.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" />
<state relative-caret-position="239">
<caret line="22" column="54" lean-forward="false" selection-start-line="22" selection-start-column="54" selection-end-line="22" selection-end-column="54" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="enc-corre.go" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/encodings/enc-corre.go">
<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="174">
<caret line="12" column="1" lean-forward="false" selection-start-line="12" selection-start-column="1" selection-end-line="12" selection-end-column="1" />
<state relative-caret-position="377">
<caret line="73" column="23" lean-forward="false" selection-start-line="73" selection-start-column="23" selection-end-line="73" selection-end-column="23" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="server-messages.go" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/client/server-messages.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="312">
<caret line="68" column="9" lean-forward="true" selection-start-line="68" selection-start-column="9" selection-end-line="68" selection-end-column="9" />
<folding>
<element signature="e#16#146#0" expanded="true" />
</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="204">
<caret line="61" column="35" lean-forward="true" selection-start-line="61" selection-start-column="35" selection-end-line="61" selection-end-column="35" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="recorder.go" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/tee-listeners/recorder.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="126">
<caret line="11" column="0" lean-forward="true" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
<folding>
<element signature="e#19#128#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FileTemplateManagerImpl">
@ -170,36 +162,36 @@
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>vnc-server</find>
<find>problem writing to port</find>
<find>listener consume</find>
<find>WriteTo.Consume</find>
<find>writeToDisk</find>
<find>Recorder.Consume</find>
<find>rect hdr data</find>
<find>sending segment to server</find>
<find>s</find>
<find>segment</find>
<find>rsegment</find>
<find>rfsegment</find>
<find>rfbsegment</find>
<find>SendMessageSeparator</find>
<find>got ClientMessage</find>
<find>done!</find>
<find>pseudo</find>
<find>pseudoen</find>
<find>pseudoenc</find>
<find>pseudoenco</find>
<find>pseudoencod</find>
<find>pseudoencoding</find>
<find>[Debug] ###############rect################: 0</find>
<find>[Debug] ###############rect################:</find>
<find>[Debug] ###############rect################:</find>
<find>[Debug] ###############rect################</find>
<find>[Debug] ###############rect###############</find>
<find>Debug] ###############rect###############</find>
<find>#############rect###############</find>
<find>type=SegmentFullyParsedClientMessage</find>
<find>sending segment type</find>
<find>sending segment</find>
<find>servermessage</find>
<find>got ServerMessage</find>
<find>Recorder.HandleRfbSegment</find>
<find>paddedSize</find>
<find>rect hdr</find>
<find>encodingType</find>
<find>read &amp; parsed ServerMessage</find>
<find>pr</find>
<find>prox.</find>
<find>prox</find>
<find>proxy</find>
<find>proxy.go</find>
<find>vncpass</find>
<find>SegmentFullyParsedClientMessage</find>
<find>WriteTo.Consume</find>
<find>rect hdr data</find>
<find>upc</find>
<find>got ClientMessage</find>
<find>got segment type</find>
<find>read &amp; parsed</find>
<find>FramebufferUpdateRequestMsgType</find>
<find>d &amp; parsed ServerMessage</find>
<find>connect</find>
<find>Connect</find>
<find>Error:</find>
<find>got ClientMessage type</find>
<find>ServerConn.Handle got ClientMessage</find>
</findStrings>
<dirStrings>
<dir>C:\Users\betzalel\Dropbox\go\src\vncproxy</dir>
@ -232,19 +224,19 @@
<option value="$PROJECT_DIR$/main.go" />
<option value="$PROJECT_DIR$/common/logger.go" />
<option value="$PROJECT_DIR$/logger/logger.go" />
<option value="$PROJECT_DIR$/common/client-message.go" />
<option value="$PROJECT_DIR$/common/readers.go" />
<option value="$PROJECT_DIR$/tee-listeners/write-to.go" />
<option value="$PROJECT_DIR$/server/server-conn.go" />
<option value="$PROJECT_DIR$/common/server-message.go" />
<option value="$PROJECT_DIR$/client/client-conn.go" />
<option value="$PROJECT_DIR$/tee-listeners/recorder.go" />
<option value="$PROJECT_DIR$/common/encoding.go" />
<option value="$PROJECT_DIR$/encodings/enc-copy-rect.go" />
<option value="$PROJECT_DIR$/encodings/enc-pseudo.go" />
<option value="$PROJECT_DIR$/client/server-messages.go" />
<option value="$PROJECT_DIR$/proxy/proxy.go" />
<option value="$PROJECT_DIR$/proxy/proxy_test.go" />
<option value="$PROJECT_DIR$/encodings/enc-pseudo.go" />
<option value="$PROJECT_DIR$/tee-listeners/recorder.go" />
<option value="$PROJECT_DIR$/tee-listeners/write-to.go" />
<option value="$PROJECT_DIR$/common/client-message.go" />
<option value="$PROJECT_DIR$/client/client-conn.go" />
<option value="$PROJECT_DIR$/proxy/proxy.go" />
<option value="$PROJECT_DIR$/server/server-conn.go" />
</list>
</option>
</component>
@ -452,7 +444,7 @@
<property name="last_opened_file_path" value="$PROJECT_DIR$/../../../vnc record/vnc_javasrc" />
<property name="settings.editor.selected.configurable" value="project.propCompiler" />
<property name="DefaultGoTemplateProperty" value="Go File" />
<property name="SearchEverywhereHistoryKey" value="main&#9;FILE&#9;file://C:/Users/betzalel/Dropbox/go/src/vncproxy/main.go&#10;proxy_test&#9;FILE&#9;file://C:/Users/betzalel/Dropbox/go/src/vncproxy/proxy/proxy_test.go&#10;proxy&#9;FILE&#9;file://C:/Users/betzalel/Dropbox/go/src/vncproxy/proxy/proxy.go&#10;generate&#9;ACTION&#9;Maven.GenerateGroup&#10;implement&#9;ACTION&#9;GotoImplementation" />
<property name="SearchEverywhereHistoryKey" value="clientcon&#9;FILE&#9;file://C:/Users/betzalel/Dropbox/go/src/vncproxy/client/client-conn.go&#10;main&#9;FILE&#9;file://C:/Users/betzalel/Dropbox/go/src/vncproxy/main.go&#10;proxy_test&#9;FILE&#9;file://C:/Users/betzalel/Dropbox/go/src/vncproxy/proxy/proxy_test.go&#10;proxy&#9;FILE&#9;file://C:/Users/betzalel/Dropbox/go/src/vncproxy/proxy/proxy.go&#10;generate&#9;ACTION&#9;Maven.GenerateGroup&#10;implement&#9;ACTION&#9;GotoImplementation" />
<property name="FullScreen" value="true" />
</component>
<component name="RunDashboard">
@ -467,7 +459,7 @@
</list>
</option>
</component>
<component name="RunManager" selected="Go Application.main">
<component name="RunManager" selected="Go Test.test proxy">
<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" />
@ -960,39 +952,39 @@
<servers />
</component>
<component name="TestHistory">
<history-entry file="test_proxy - 2017.07.11 at 15h 54m 43s.xml">
<history-entry file="test_proxy - 2017.07.11 at 17h 51m 50s.xml">
<configuration name="test proxy" configurationId="GoTestRunConfiguration" />
</history-entry>
<history-entry file="test_proxy - 2017.07.11 at 16h 00m 06s.xml">
<history-entry file="test_proxy - 2017.07.11 at 18h 06m 55s.xml">
<configuration name="test proxy" configurationId="GoTestRunConfiguration" />
</history-entry>
<history-entry file="test_proxy - 2017.07.11 at 16h 00m 25s.xml">
<history-entry file="test_proxy - 2017.07.11 at 18h 07m 07s.xml">
<configuration name="test proxy" configurationId="GoTestRunConfiguration" />
</history-entry>
<history-entry file="test_proxy - 2017.07.11 at 16h 05m 43s.xml">
<history-entry file="test_proxy - 2017.07.11 at 18h 07m 22s.xml">
<configuration name="test proxy" configurationId="GoTestRunConfiguration" />
</history-entry>
<history-entry file="test_proxy - 2017.07.11 at 16h 06m 09s.xml">
<history-entry file="test_proxy - 2017.07.11 at 18h 07m 25s.xml">
<configuration name="test proxy" configurationId="GoTestRunConfiguration" />
</history-entry>
<history-entry file="test_proxy - 2017.07.11 at 16h 09m 03s.xml">
<history-entry file="test_proxy - 2017.07.11 at 18h 07m 57s.xml">
<configuration name="test proxy" configurationId="GoTestRunConfiguration" />
</history-entry>
<history-entry file="test_proxy - 2017.07.11 at 16h 10m 05s.xml">
<history-entry file="test_proxy - 2017.07.11 at 18h 12m 02s.xml">
<configuration name="test proxy" configurationId="GoTestRunConfiguration" />
</history-entry>
<history-entry file="test_proxy - 2017.07.11 at 16h 20m 51s.xml">
<history-entry file="test_proxy - 2017.07.11 at 18h 12m 34s.xml">
<configuration name="test proxy" configurationId="GoTestRunConfiguration" />
</history-entry>
<history-entry file="test_proxy - 2017.07.11 at 16h 26m 38s.xml">
<history-entry file="test_proxy - 2017.07.11 at 18h 12m 43s.xml">
<configuration name="test proxy" configurationId="GoTestRunConfiguration" />
</history-entry>
<history-entry file="test_proxy - 2017.07.11 at 16h 29m 06s.xml">
<history-entry file="test_proxy - 2017.07.11 at 18h 33m 52s.xml">
<configuration name="test proxy" configurationId="GoTestRunConfiguration" />
</history-entry>
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="47843000" />
<option name="totallyTimeSpent" value="54001000" />
</component>
<component name="TodoView">
<todo-panel id="selected-file">
@ -1009,7 +1001,7 @@
<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="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" 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.5810163" sideWeight="0.5021322" 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="3" 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" />
@ -1025,7 +1017,7 @@
<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="Version Control" 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="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.4017258" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.44199425" sideWeight="0.4978678" order="2" 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.32981783" sideWeight="0.5" 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.2867804" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Problems" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.21506849" sideWeight="0.49676898" order="0" side_tool="false" content_ui="tabs" />
@ -1114,13 +1106,13 @@
</line-breakpoint>
<line-breakpoint type="DlvLineBreakpoint">
<url>file://$PROJECT_DIR$/tee-listeners/recorder.go</url>
<line>147</line>
<line>146</line>
<properties />
<option name="timeStamp" value="112" />
</line-breakpoint>
<line-breakpoint type="DlvLineBreakpoint">
<url>file://$PROJECT_DIR$/tee-listeners/recorder.go</url>
<line>153</line>
<line>152</line>
<properties />
<option name="timeStamp" value="113" />
</line-breakpoint>
@ -1180,7 +1172,7 @@
</line-breakpoint>
<line-breakpoint type="DlvLineBreakpoint">
<url>file://$PROJECT_DIR$/tee-listeners/write-to.go</url>
<line>26</line>
<line>27</line>
<properties />
<option name="timeStamp" value="125" />
</line-breakpoint>
@ -1234,14 +1226,6 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/main.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="21" column="0" lean-forward="false" selection-start-line="21" selection-start-column="0" selection-end-line="21" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/client/client_auth.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="225">
@ -1289,23 +1273,7 @@
<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="1499772221819" expanded="true" signature="1837:2136" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2074:2134" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2188:2302" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2355:2627" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2407:2449" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2455:2613" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2497:2516" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2568:2610" ph="/.../" />
<marker date="1499772221819" expanded="true" signature="2714:3369" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2768:2785" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2842:2905" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2963:2995" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="3055:3087" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="3147:3179" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="3233:3271" ph="{...}" />
</folding>
<folding />
</state>
</provider>
</entry>
@ -1331,10 +1299,7 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="765">
<caret line="51" column="4" lean-forward="false" selection-start-line="51" selection-start-column="4" selection-end-line="51" selection-end-column="4" />
<folding>
<marker date="1499777283567" expanded="true" signature="23:84" ph="..." />
<marker date="1499777283567" expanded="true" signature="5281:5352" ph="..." />
</folding>
<folding />
</state>
</provider>
</entry>
@ -1350,7 +1315,7 @@
<state relative-caret-position="315">
<caret line="21" column="27" lean-forward="true" selection-start-line="21" selection-start-column="27" selection-end-line="21" selection-end-column="27" />
<folding>
<element signature="e#19#138#0" expanded="true" />
<element signature="e#19#128#0" expanded="true" />
</folding>
</state>
</provider>
@ -1405,14 +1370,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/server/client-messages.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="138">
<caret line="81" column="14" lean-forward="false" selection-start-line="81" selection-start-column="14" selection-end-line="81" selection-end-column="14" />
<folding />
</state>
</provider>
</entry>
<entry file="file://C:/Go/src/runtime/asm_amd64.s">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="221">
@ -1421,46 +1378,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/server/server.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="419">
<caret line="127" column="5" lean-forward="false" selection-start-line="127" selection-start-column="5" selection-end-line="127" selection-end-column="5" />
<folding>
<marker date="1499772221819" expanded="true" signature="1837:2136" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2074:2134" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2188:2302" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2355:2627" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2407:2449" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2455:2613" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2497:2516" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2568:2610" ph="/.../" />
<marker date="1499772221819" expanded="true" signature="2714:3369" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2768:2785" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2842:2905" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="2963:2995" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="3055:3087" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="3147:3179" ph="{...}" />
<marker date="1499772221819" expanded="true" signature="3233:3271" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/server/ws-server-go.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="360">
<caret line="29" column="20" lean-forward="false" selection-start-line="29" selection-start-column="20" selection-end-line="29" selection-end-column="20" />
<folding>
<marker date="1499771264739" expanded="true" signature="23:27" ph="..." />
<marker date="1499771264739" expanded="true" signature="731:768" ph="{...}" />
<marker date="1499771264739" expanded="true" signature="731:1544" ph="{...}" />
<marker date="1499771264739" expanded="true" signature="771:1166" ph="/.../" />
<marker date="1499771264739" expanded="true" signature="1237:1435" ph="{...}" />
<marker date="1499771264739" expanded="true" signature="1313:1344" ph="{...}" />
<marker date="1499771264739" expanded="true" signature="1496:1542" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://C:/Go/src/fmt/print.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="233">
@ -1493,33 +1410,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/readers.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="253">
<caret line="42" column="26" lean-forward="true" selection-start-line="42" selection-start-column="26" selection-end-line="42" selection-end-column="26" />
<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="165">
<caret line="233" column="66" lean-forward="false" selection-start-line="233" selection-start-column="66" selection-end-line="233" selection-end-column="66" />
<folding>
<marker date="1499777283567" expanded="true" signature="23:84" ph="..." />
<marker date="1499777283567" expanded="true" signature="5281:5352" ph="..." />
</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="57">
<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$/common/multiListener.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="234">
@ -1528,44 +1418,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tee-listeners/recorder.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="306">
<caret line="147" column="0" lean-forward="false" selection-start-line="147" selection-start-column="0" selection-end-line="147" selection-end-column="0" />
<folding>
<element signature="e#19#138#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tee-listeners/write-to.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="163">
<caret line="16" column="0" lean-forward="false" selection-start-line="16" selection-start-column="0" selection-end-line="16" 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="209">
<caret line="41" column="19" lean-forward="false" selection-start-line="41" selection-start-column="19" selection-end-line="41" selection-end-column="19" />
<folding>
<element signature="e#16#33#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/client/client-conn.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="352">
<caret line="517" column="9" lean-forward="true" selection-start-line="517" selection-start-column="9" selection-end-line="517" selection-end-column="9" />
<folding>
<element signature="e#16#123#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/encoding.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="108">
@ -1654,32 +1506,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/encodings/enc-pseudo.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="216">
<caret line="12" column="79" lean-forward="false" selection-start-line="12" selection-start-column="79" selection-end-line="12" selection-end-column="79" />
<folding>
<element signature="e#19#43#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/client/server-messages.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="126">
<caret line="7" column="12" lean-forward="false" selection-start-line="7" selection-start-column="8" selection-end-line="7" selection-end-column="12" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/proxy/proxy.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="144">
<caret line="8" column="9" lean-forward="false" selection-start-line="8" selection-start-column="9" selection-end-line="8" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/proxy/proxy_test.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="270">
@ -1690,12 +1516,135 @@
</entry>
<entry file="file://$PROJECT_DIR$/main.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="378">
<caret line="65" column="46" lean-forward="true" selection-start-line="65" selection-start-column="46" selection-end-line="65" selection-end-column="46" />
<state relative-caret-position="414">
<caret line="46" column="44" lean-forward="true" selection-start-line="46" selection-start-column="44" selection-end-line="46" selection-end-column="44" />
<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="193" column="40" lean-forward="false" selection-start-line="193" selection-start-column="40" selection-end-line="193" selection-end-column="40" />
<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="-612">
<caret line="9" column="19" lean-forward="false" selection-start-line="9" selection-start-column="5" selection-end-line="9" selection-end-column="19" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/server/server.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="432">
<caret line="30" column="15" lean-forward="true" selection-start-line="30" selection-start-column="15" selection-end-line="30" selection-end-column="15" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/encodings/enc-pseudo.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="270">
<caret line="15" column="0" lean-forward="true" selection-start-line="15" selection-start-column="0" selection-end-line="15" 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="204">
<caret line="61" column="35" lean-forward="true" selection-start-line="61" selection-start-column="35" selection-end-line="61" selection-end-column="35" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/client/server-messages.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="312">
<caret line="68" column="9" lean-forward="true" selection-start-line="68" selection-start-column="9" selection-end-line="68" selection-end-column="9" />
<folding>
<element signature="e#16#146#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tee-listeners/recorder.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="126">
<caret line="11" column="0" lean-forward="true" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
<folding>
<element signature="e#19#128#0" expanded="true" />
</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="377">
<caret line="73" column="23" lean-forward="false" selection-start-line="73" selection-start-column="23" selection-end-line="73" selection-end-column="23" />
<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="180">
<caret line="10" column="4" lean-forward="false" selection-start-line="10" selection-start-column="4" selection-end-line="10" selection-end-column="4" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/client/client-conn.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-553">
<caret line="472" column="19" lean-forward="true" selection-start-line="472" selection-start-column="19" selection-end-line="472" selection-end-column="19" />
<folding>
<element signature="e#16#123#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/proxy/proxy.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="395">
<caret line="129" column="1" lean-forward="true" selection-start-line="129" selection-start-column="1" selection-end-line="129" selection-end-column="1" />
<folding>
<element signature="e#15#200#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tee-listeners/write-to.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="239">
<caret line="22" column="54" lean-forward="false" selection-start-line="22" selection-start-column="54" selection-end-line="22" selection-end-column="54" />
<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="313">
<caret line="221" column="13" lean-forward="true" selection-start-line="221" selection-start-column="13" selection-end-line="221" selection-end-column="13" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/server/ws-server-go.go">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="197">
<caret line="50" column="32" lean-forward="true" selection-start-line="50" selection-start-column="32" selection-end-line="50" selection-end-column="32" />
<folding>
<marker date="1499771264739" expanded="true" signature="23:27" ph="..." />
<marker date="1499771264739" expanded="true" signature="731:768" ph="{...}" />
</folding>
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>

View File

@ -493,18 +493,20 @@ func (c *ClientConn) mainLoop() {
}
}
defer func(){
defer func() {
logger.Warn("ClientConn.MainLoop: exiting!")
}()
for {
var messageType uint8
if err := binary.Read(c.conn, binary.BigEndian, &messageType); err != nil {
logger.Errorf("ClientConn.MainLoop: error reading messagetype, %s", err)
break
}
msg, ok := typeMap[messageType]
if !ok {
logger.Errorf("ClientConn.MainLoop: bad message type, %d", messageType)
// Unsupported message type! Bad!
break
}
@ -514,9 +516,10 @@ func (c *ClientConn) mainLoop() {
parsedMsg, err := msg.Read(c, reader)
if err != nil {
logger.Errorf("ClientConn.MainLoop: error parsing message, %s", err)
break
}
logger.Debugf("ClientConn.MainLoop: read & parsed ServerMessage:%s, %v", parsedMsg.Type(), parsedMsg)
logger.Debugf("ClientConn.MainLoop: read & parsed ServerMessage:%d, %s", parsedMsg.Type(), parsedMsg)
if c.config.ServerMessageCh == nil {
continue

View File

@ -5,10 +5,10 @@ import (
"encoding/json"
"fmt"
"io"
"strings"
"vncproxy/common"
"vncproxy/encodings"
"vncproxy/logger"
"strings"
)
// FramebufferUpdateMessage consists of a sequence of rectangles of
@ -90,6 +90,7 @@ func (fbm *FramebufferUpdateMessage) Read(c common.IClientConn, r *common.RfbRea
if strings.Contains(encType.String(), "Pseudo") {
rect.Enc = &encodings.PseudoEncoding{encodingTypeInt}
} else {
logger.Errorf("unsupported encoding type: %d, %s", encodingTypeInt, encType)
return nil, fmt.Errorf("unsupported encoding type: %d, %s", encodingTypeInt, encType)
}
@ -100,10 +101,6 @@ func (fbm *FramebufferUpdateMessage) Read(c common.IClientConn, r *common.RfbRea
return &FramebufferUpdateMessage{rects}, nil
}
// SetColorMapEntriesMessage is sent by the server to set values into
// the color map. This message will automatically update the color map
// for the associated connection, but contains the color change data

View File

@ -61,17 +61,17 @@ type ClientMessage interface {
func (cmt ClientMessageType) String() string {
switch cmt {
case SetPixelFormatMsgType:
return "SetPixelFormatMsgType"
return "SetPixelFormat"
case SetEncodingsMsgType:
return "SetEncodingsMsgType"
return "SetEncodings"
case FramebufferUpdateRequestMsgType:
return "FramebufferUpdateRequestMsgType"
return "FramebufferUpdateRequest"
case KeyEventMsgType:
return "KeyEventMsgType"
return "KeyEvent"
case PointerEventMsgType:
return "PointerEventMsgType"
return "PointerEvent"
case ClientCutTextMsgType:
return "ClientCutTextMsgType"
return "ClientCutText"
}
return ""
}

View File

@ -6,10 +6,10 @@ type PseudoEncoding struct {
Typ int32
}
func (pe *PseudoEncoding ) Type() int32{
func (pe *PseudoEncoding) Type() int32 {
return pe.Typ
}
func (pe *PseudoEncoding) Read(*common.PixelFormat, *common.Rectangle, *common.RfbReadHelper) (common.Encoding, error){
func (pe *PseudoEncoding) Read(*common.PixelFormat, *common.Rectangle, *common.RfbReadHelper) (common.Encoding, error) {
return pe, nil
}

23
main.go
View File

@ -23,7 +23,8 @@ func main() {
vncSrvMessagesChan := make(chan common.ServerMessage)
rec := listeners.NewRecorder("c:/Users/betzalel/recording.rbs")
//rec := listeners.NewRecorder("c:/Users/betzalel/recording.rbs")
rec := listeners.NewRecorder("/Users/amitbet/vncRec/recording.rbs")
clientConn, err := client.NewClientConn(nc,
&client.ClientConfig{
@ -42,20 +43,22 @@ func main() {
// if err != nil {
// logger.Errorf("error requesting fb update: %s", err)
// }
encs := []common.Encoding{
&encodings.TightEncoding{},
//&encodings.TightPngEncoding{},
//rre := encodings.RREEncoding{},
//zlib := encodings.ZLibEncoding{},
//zrle := encodings.ZRLEEncoding{},
//&encodings.CopyRectEncoding{},
//coRRE := encodings.CoRREEncoding{},
//hextile := encodings.HextileEncoding{},
}
tight := encodings.TightEncoding{}
tightPng := encodings.TightPngEncoding{}
//rre := encodings.RREEncoding{}
//zlib := encodings.ZLibEncoding{}
//zrle := encodings.ZRLEEncoding{}
cpyRect := encodings.CopyRectEncoding{}
//coRRE := encodings.CoRREEncoding{}
//hextile := encodings.HextileEncoding{}
// file, _ := os.OpenFile("stam.bin", os.O_CREATE|os.O_RDWR, 0755)
// defer file.Close()
//tight.SetOutput(file)
clientConn.SetEncodings([]common.Encoding{&cpyRect, &tightPng, &tight})
clientConn.SetEncodings(encs)
go func() {
for {

View File

@ -0,0 +1,71 @@
package proxy
import (
"vncproxy/client"
"vncproxy/common"
"vncproxy/logger"
"vncproxy/server"
)
type ClientUpdater struct {
conn *client.ClientConn
}
// Consume recieves vnc-server-bound messages (Client messages) and updates the server part of the proxy
func (cc *ClientUpdater) Consume(seg *common.RfbSegment) error {
//logger.Debugf("ClientUpdater.Consume (vnc-server-bound): got segment type=%s bytes: %v", seg.SegmentType, seg.Bytes)
switch seg.SegmentType {
case common.SegmentFullyParsedClientMessage:
clientMsg := seg.Message.(common.ClientMessage)
logger.Debugf("ClientUpdater.Consume:(vnc-server-bound) got ClientMessage type=%s", clientMsg.Type())
switch clientMsg.Type() {
case common.SetPixelFormatMsgType:
// update pixel format
logger.Debugf("ClientUpdater.Consume: updating pixel format")
pixFmtMsg := clientMsg.(*server.SetPixelFormat)
cc.conn.PixelFormat = pixFmtMsg.PF
}
err := clientMsg.Write(cc.conn)
if err != nil {
logger.Errorf("ClientUpdater.Consume (vnc-server-bound, SegmentFullyParsedClientMessage): problem writing to port: %s", err)
}
return err
}
return nil
}
type ServerUpdater struct {
conn *server.ServerConn
Name string
}
// Consume receives vnc-client-bound messages (Server messages) and updates the server part of the proxy
func (p *ServerUpdater) Consume(seg *common.RfbSegment) error {
logger.Debugf("ServerUpdater.Consume ("+p.Name+"): got segment type=%s bytes: %v", seg.SegmentType, seg.Bytes)
switch seg.SegmentType {
case common.SegmentMessageSeparator:
case common.SegmentRectSeparator:
case common.SegmentBytes:
// _, err := p.Writer.Write(seg.Bytes)
// if (err != nil) {
// logger.Errorf("WriteTo.Consume ("+p.Name+" SegmentBytes): problem writing to port: %s", err)
// }
// return err
case common.SegmentFullyParsedClientMessage:
// clientMsg := seg.Message.(common.ClientMessage)
// logger.Debugf("WriteTo.Consume ("+p.Name+"): got ClientMessage type=%s", clientMsg.Type())
// err := clientMsg.Write(p.Writer)
// if err != nil {
// logger.Errorf("WriteTo.Consume ("+p.Name+" SegmentFullyParsedClientMessage): problem writing to port: %s", err)
// }
// return err
default:
//return errors.New("WriteTo.Consume: undefined RfbSegment type")
}
return nil
}

View File

@ -101,8 +101,9 @@ func (vp *VncProxy) newServerConnHandler(cfg *server.ServerConfig, sconn *server
// gets the messages from the server part (from vnc-client),
// and write through the client to the actual vnc-server
clientMsgRepeater := &listeners.WriteTo{cconn, "vnc-server-bound"}
sconn.Listeners.AddListener(clientMsgRepeater)
//clientMsgRepeater := &listeners.WriteTo{cconn, "vnc-server-bound"}
clientUpdater := &ClientUpdater{cconn}
sconn.Listeners.AddListener(clientUpdater)
err = cconn.Connect()
if err != nil {
@ -121,7 +122,8 @@ func (vp *VncProxy) newServerConnHandler(cfg *server.ServerConfig, sconn *server
//encodings.CoRREEncoding{},
//encodings.HextileEncoding{},
}
err = cconn.SetEncodings(encs)
cconn.Encs = encs
//err = cconn.SetEncodings(encs)
if err != nil {
logger.Errorf("Proxy.newServerConnHandler error connecting to client: %s", err)
return err

View File

@ -7,8 +7,8 @@ func TestProxy(t *testing.T) {
proxy := &VncProxy{
wsListeningUrl: "http://localhost:7777/", // empty = not listening on ws
recordingDir: "c:\\vncRec", // empty = no recording
targetServersPassword: "Ch_#!T@8", //empty = no auth
recordingDir: "/Users/amitbet/vncRec", // empty = no recording
targetServersPassword: "Ch_#!T@8", //empty = no auth
SingleSession: &VncSession{
TargetHostname: "localhost",
TargetPort: "5903",

View File

@ -206,7 +206,7 @@ func (c *ServerConn) handle() error {
default:
var messageType common.ClientMessageType
if err := binary.Read(c, binary.BigEndian, &messageType); err != nil {
logger.Errorf("Error: %v", err)
logger.Errorf("ServerConn.handle error: %v", err)
return err
}
msg, ok := clientMessages[messageType]
@ -216,11 +216,27 @@ func (c *ServerConn) handle() error {
parsedMsg, err := msg.Read(c)
//update connection for pixel format / color map changes
switch parsedMsg.Type() {
case common.SetPixelFormatMsgType:
// update pixel format
logger.Debugf("ClientUpdater.Consume: updating pixel format")
pixFmtMsg := parsedMsg.(*SetPixelFormat)
c.SetPixelFormat(&pixFmtMsg.PF)
if pixFmtMsg.PF.TrueColor != 0 {
c.SetColorMap(&common.ColorMap{})
}
}
////////
if err != nil {
logger.Errorf("srv err %s", err.Error())
return err
}
//logger.Debugf("ServerConn.Handle got client message, type=%s", parsedMsg.Type())
logger.Debugf("ServerConn.Handle got ClientMessage: %s, %v", parsedMsg.Type(), parsedMsg)
//parsedMsg.Type()
seg := &common.RfbSegment{
SegmentType: common.SegmentFullyParsedClientMessage,
Message: parsedMsg,
@ -231,7 +247,6 @@ func (c *ServerConn) handle() error {
return err
}
logger.Debugf("ServerConn.Handle got ClientMessage: %s, %v", parsedMsg.Type(), parsedMsg)
//c.cfg.ClientMessageCh <- parsedMsg
}
}

View File

@ -3,7 +3,6 @@ package listeners
import (
"bytes"
"encoding/binary"
"errors"
"os"
"time"
"vncproxy/common"
@ -73,7 +72,7 @@ const (
// }
func (r *Recorder) writeStartSession(initMsg *common.ServerInit) error {
r.sessionStartWritten = true
desktopName := string(initMsg.NameText)
framebufferWidth := initMsg.FBWidth
framebufferHeight := initMsg.FBHeight
@ -91,13 +90,21 @@ func (r *Recorder) writeStartSession(initMsg *common.ServerInit) error {
binary.Write(&r.buffer, binary.BigEndian, int16(framebufferWidth))
binary.Write(&r.buffer, binary.BigEndian, int16(framebufferHeight))
var fbsServerInitMsg = []byte{32, 24, 0, 1, 0, byte(0xFF), 0, byte(0xFF), 0, byte(0xFF), 16, 8, 0, 0, 0, 0}
r.buffer.Write(fbsServerInitMsg)
buff := bytes.Buffer{}
//binary.Write(&buff, binary.BigEndian, initMsg.FBWidth)
//binary.Write(&buff, binary.BigEndian, initMsg.FBHeight)
binary.Write(&buff, binary.BigEndian, initMsg.PixelFormat)
buff.Write([]byte{0, 0, 0}) //padding
r.buffer.Write(buff.Bytes())
//logger.Debugf(">>>>>>buffer for initMessage:%v ", buff.Bytes())
binary.Write(&r.buffer, binary.BigEndian, uint32(len(desktopName)+1))
//var fbsServerInitMsg = []byte{32, 24, 0, 1, 0, byte(0xFF), 0, byte(0xFF), 0, byte(0xFF), 16, 8, 0, 0, 0, 0}
//r.buffer.Write(fbsServerInitMsg)
binary.Write(&r.buffer, binary.BigEndian, uint32(len(desktopName)))
r.buffer.WriteString(desktopName)
binary.Write(&r.buffer, binary.BigEndian, byte(0)) // add null termination for desktop string
//binary.Write(&r.buffer, binary.BigEndian, byte(0)) // add null termination for desktop string
return nil
}
@ -123,23 +130,23 @@ func (r *Recorder) HandleRfbSegment(data *common.RfbSegment) error {
switch data.SegmentType {
case common.SegmentMessageSeparator:
if !r.sessionStartWritten {
logger.Debugf("Recorder.HandleRfbSegment: writing start session segment: %v",r.serverInitMessage)
logger.Debugf("Recorder.HandleRfbSegment: writing start session segment: %v", r.serverInitMessage)
r.writeStartSession(r.serverInitMessage)
}
switch common.ServerMessageType(data.UpcomingObjectType) {
case common.FramebufferUpdate:
logger.Debugf("Recorder.HandleRfbSegment: saving FramebufferUpdate segment")
r.writeToDisk()
//r.writeToDisk()
case common.SetColourMapEntries:
case common.Bell:
case common.ServerCutText:
default:
return errors.New("unknown message type:" + string(data.UpcomingObjectType))
logger.Warn("Recorder.HandleRfbSegment: unknown message type:" + string(data.UpcomingObjectType))
}
case common.SegmentRectSeparator:
logger.Debugf("Recorder.HandleRfbSegment: writing start rect start")
logger.Debugf("Recorder.HandleRfbSegment: writing rect")
r.writeToDisk()
case common.SegmentBytes:
_, err := r.buffer.Write(data.Bytes)

View File

@ -13,7 +13,7 @@ type WriteTo struct {
func (p *WriteTo) Consume(seg *common.RfbSegment) error {
logger.Debugf("WriteTo.Consume ("+p.Name+"): sending segment type=%s", seg.SegmentType)
logger.Debugf("WriteTo.Consume ("+p.Name+"): got segment type=%s bytes: %v", seg.SegmentType, seg.Bytes)
switch seg.SegmentType {
case common.SegmentMessageSeparator:
case common.SegmentRectSeparator:
@ -24,7 +24,9 @@ func (p *WriteTo) Consume(seg *common.RfbSegment) error {
}
return err
case common.SegmentFullyParsedClientMessage:
clientMsg := seg.Message.(common.ClientMessage)
logger.Debugf("WriteTo.Consume ("+p.Name+"): got ClientMessage type=%s", clientMsg.Type())
err := clientMsg.Write(p.Writer)
if (err != nil) {
logger.Errorf("WriteTo.Consume ("+p.Name+" SegmentFullyParsedClientMessage): problem writing to port: %s", err)
@ -36,6 +38,8 @@ func (p *WriteTo) Consume(seg *common.RfbSegment) error {
return nil
}
// type SendToClientMessageChan struct {
// Channel chan *common.ClientMessage
// }

View File

@ -3,7 +3,6 @@
* test proxy flow
* create replay flow
* set correct status for each flow
* have splitter logic on the connection objects
* move encodings to be on the framebufferupdate message object
* clear all messages read functions from updating stuff, move modification logic to another listener
* message read function should accept only an io.Reader, move read helper logic (readuint8) to an actual helper class