From 6cd5b679eb148aa35bde63e74199d0ac619ba600 Mon Sep 17 00:00:00 2001 From: Kasper Grubbe Date: Sat, 2 Jun 2018 20:10:43 +0100 Subject: [PATCH] Add helpers to read/write in same language as spec Used the vocabulary from https://tools.ietf.org/html/rfc6143 # Conflicts: # ChangeLog --- ChangeLog | 4 ++++ lib/net/vnc.rb | 36 ++++++++++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0b59c6d..4f72c5d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +== Unreleased + +- Made helpers to read/send information from/to server + == 1.1.0 / 2012-06-03 - Fixes to support ruby 1.9 (jedi4ever & codemonkeyjohn). diff --git a/lib/net/vnc.rb b/lib/net/vnc.rb index 1af5c8e..1efe701 100644 --- a/lib/net/vnc.rb +++ b/lib/net/vnc.rb @@ -102,6 +102,34 @@ def port BASE_PORT + @display end + def readU8(data) + data.unpack('C')[0] + end + + def writeU8(data) + data.chr + end + + def readU16(data) + data.unpack('n')[0] + end + + def writeU16(data) + [data].pack('n') + end + + def readU32(data) + data.unpack('N')[0] + end + + def writeU32(data) + [data].pack('N') + end + + def readS32(data) + data.unpack('l')[0] + end + def connect @socket = TCPSocket.open server, port unless socket.read(12) =~ /^RFB (\d{3}.\d{3})\n$/ @@ -128,7 +156,7 @@ def connect end # ClientInitialisation - socket.write((options[:shared] ? 1 : 0).chr) + socket.write(writeU8(options[:shared] ? 1 : 0)) # ServerInitialisation # TODO: parse this. @@ -279,8 +307,8 @@ def read_packet type case type when 3 # ServerCutText socket.read 3 # discard padding bytes - len = socket.read(4).unpack('N')[0] - @mutex.synchronize { @clipboard = socket.read len } + len = readU32(socket.read(4)) + @mutex.synchronize { @clipboard = socket.read(len) } else raise NotImplementedError, 'unhandled server packet type - %d' % type end @@ -292,7 +320,7 @@ def packet_reading_thread begin break if @packet_reading_state != :loop next unless IO.select [socket], nil, nil, 2 - type = socket.read(1)[0] + type = readU8(socket.read(1)) read_packet type rescue warn "exception in packet_reading_thread: #{$!.class}:#{$!}"