ruby-x11 now successfully established a connection

This commit is contained in:
Richard Ramsden 2012-05-06 19:32:22 -07:00
parent 6f281d14ff
commit 336a418a6a
2 changed files with 24 additions and 3 deletions

View file

@ -5,10 +5,28 @@
# #
# EXAMPLE: # EXAMPLE:
# Int8.call(255) => "\xFF" # Int8.call(255) => "\xFF"
# String8.call("hello") => "hxello\u0000\u0000\u0000" # String8.call("hello") => "hello"
module X11 module X11
module Encode module Encode
# List.of(Foo)
# In this document the List.of notation strictly means some number of
# repetitions of the FOO encoding; the actual length of the list is encoded
# elsewhere
class List
class << self
def of(type)
lambda do |data|
# X11 has other List.of(Foo) for different data types right now
# will just throw an error until we've implemented them all.
throw "dont know how to handle this yet"
end
end
end
end
# Takes an object and uses Array#pack to # Takes an object and uses Array#pack to
# convert it into binary data # convert it into binary data
def self.pack(a) def self.pack(a)
@ -19,12 +37,15 @@ module X11
# For instance, C<pack(padded('Hello'), 'Hello')> gives C<"Hello\0\0\0">. # For instance, C<pack(padded('Hello'), 'Hello')> gives C<"Hello\0\0\0">.
def self.pad(x); x + "\0"*(-x.length & 3); end def self.pad(x); x + "\0"*(-x.length & 3); end
# Primitive Types
Int8 = pack("c") Int8 = pack("c")
Int16 = pack("s") Int16 = pack("s")
Int32 = pack("l") Int32 = pack("l")
Uint8 = pack("C") Uint8 = pack("C")
Uint16 = pack("S") Uint16 = pack("S")
Uint32 = pack("L") Uint32 = pack("L")
String8 = lambda {|a| pad(a)}
# LISTofFOO
String8 = lambda{|x| self.pad(x)} # equivalent to List.of(Uint8) /w padding
end end
end end

View file

@ -83,7 +83,7 @@ module X11
field :protocol_minor_version, Uint16 field :protocol_minor_version, Uint16
length :auth_proto_name, Uint16 length :auth_proto_name, Uint16
length :auth_proto_data, Uint16 length :auth_proto_data, Uint16
unused 1 unused 2
field :auth_proto_name, String8 field :auth_proto_name, String8
field :auth_proto_data, String8 field :auth_proto_data, String8
end end