wwmd 0.2.20.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +38 -0
- data/README.rdoc +87 -0
- data/Rakefile +33 -0
- data/examples/config_example.yaml +24 -0
- data/examples/wwmd_example.rb +73 -0
- data/lib/wwmd.rb +84 -0
- data/lib/wwmd/class_extensions.rb +4 -0
- data/lib/wwmd/class_extensions/extensions_base.rb +251 -0
- data/lib/wwmd/class_extensions/extensions_encoding.rb +79 -0
- data/lib/wwmd/class_extensions/extensions_external.rb +18 -0
- data/lib/wwmd/class_extensions/extensions_nilclass.rb +11 -0
- data/lib/wwmd/class_extensions/extensions_rbkb.rb +193 -0
- data/lib/wwmd/class_extensions/mixins_string_encoding.rb +40 -0
- data/lib/wwmd/guid.rb +155 -0
- data/lib/wwmd/page.rb +3 -0
- data/lib/wwmd/page/_fa.old +302 -0
- data/lib/wwmd/page/auth.rb +17 -0
- data/lib/wwmd/page/constants.rb +63 -0
- data/lib/wwmd/page/form.rb +99 -0
- data/lib/wwmd/page/form_array.rb +304 -0
- data/lib/wwmd/page/headers.rb +118 -0
- data/lib/wwmd/page/helpers.rb +41 -0
- data/lib/wwmd/page/html2text_hpricot.rb +76 -0
- data/lib/wwmd/page/html2text_nokogiri.rb +42 -0
- data/lib/wwmd/page/inputs.rb +47 -0
- data/lib/wwmd/page/irb_helpers.rb +114 -0
- data/lib/wwmd/page/page.rb +257 -0
- data/lib/wwmd/page/parsing_convenience.rb +98 -0
- data/lib/wwmd/page/reporting_helpers.rb +89 -0
- data/lib/wwmd/page/scrape.rb +196 -0
- data/lib/wwmd/page/spider.rb +127 -0
- data/lib/wwmd/urlparse.rb +125 -0
- data/lib/wwmd/viewstate.rb +17 -0
- data/lib/wwmd/viewstate/viewstate.rb +101 -0
- data/lib/wwmd/viewstate/viewstate_deserializer_methods.rb +217 -0
- data/lib/wwmd/viewstate/viewstate_from_xml.rb +129 -0
- data/lib/wwmd/viewstate/viewstate_types.rb +51 -0
- data/lib/wwmd/viewstate/viewstate_utils.rb +164 -0
- data/lib/wwmd/viewstate/viewstate_yaml.rb +25 -0
- data/lib/wwmd/viewstate/vs_stubs.rb +22 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_array.rb +38 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_binary_serialized.rb +30 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_hashtable.rb +42 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_hybrid_dict.rb +42 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_indexed_string.rb +6 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_indexed_string_ref.rb +24 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_int_enum.rb +27 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_list.rb +34 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_pair.rb +29 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_read_types.rb +11 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_read_value.rb +35 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_sparse_array.rb +58 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_string.rb +33 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_string_array.rb +39 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_string_formatted.rb +32 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_stub_helpers.rb +37 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_triplet.rb +31 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_type.rb +23 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_unit.rb +30 -0
- data/lib/wwmd/viewstate/vs_stubs/vs_value.rb +35 -0
- data/lib/wwmd/wwmd_config.rb +52 -0
- data/lib/wwmd/wwmd_puts.rb +9 -0
- data/lib/wwmd/wwmd_utils.rb +28 -0
- data/spec/README +3 -0
- data/spec/form_array.spec +49 -0
- data/spec/spider_csrf_test.spec +28 -0
- data/spec/urlparse_test.spec +101 -0
- data/tasks/ann.rake +80 -0
- data/tasks/bones.rake +20 -0
- data/tasks/gem.rake +201 -0
- data/tasks/git.rake +40 -0
- data/tasks/notes.rake +27 -0
- data/tasks/post_load.rake +34 -0
- data/tasks/rdoc.rake +51 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +292 -0
- data/tasks/spec.rake +54 -0
- data/tasks/test.rake +40 -0
- data/tasks/zentest.rake +36 -0
- metadata +222 -0
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'htmlentities'
|
2
|
+
require 'wwmd/class_extensions'
|
3
|
+
module WWMD
|
4
|
+
|
5
|
+
# yay for experiments in re-inventing the wheel
|
6
|
+
class URLParse
|
7
|
+
HANDLERS = [:https,:http,:ftp,:file]
|
8
|
+
attr_reader :proto,:location,:path,:script,:rpath,:params,:base_url,:fqpath
|
9
|
+
|
10
|
+
def initialize(*args)
|
11
|
+
# nothing to see here, move along
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse(*args)
|
15
|
+
if args.size == 1
|
16
|
+
base = ""
|
17
|
+
actual = args.shift.to_s.strip
|
18
|
+
else
|
19
|
+
base = args.shift.to_s.strip
|
20
|
+
actual = args.shift.to_s.strip
|
21
|
+
end
|
22
|
+
if actual.has_proto?
|
23
|
+
url = actual
|
24
|
+
else
|
25
|
+
url = base
|
26
|
+
url += "/" unless (base =~ /\/\z/ || actual =~ /\A\// || actual.empty?)
|
27
|
+
url += actual
|
28
|
+
end
|
29
|
+
return URI.parse(url).to_s
|
30
|
+
|
31
|
+
#### yeah... screw this
|
32
|
+
@proto = @location = @path = @script = @rpath = nil
|
33
|
+
@base = base.to_s
|
34
|
+
@actual = actual
|
35
|
+
if self.has_proto?
|
36
|
+
@base = @actual
|
37
|
+
@actual = ""
|
38
|
+
end
|
39
|
+
# does this work for http://location/? probably not
|
40
|
+
@base += "/" if (!@base.has_ext? || @base.split("/").size == 3)
|
41
|
+
@rpath = make_me_path.join("/")
|
42
|
+
@rpath += "?#{@params}" if @params
|
43
|
+
@path = "/" + @rpath
|
44
|
+
if @rpath.has_ext?
|
45
|
+
@path = "/" + @rpath.dirname
|
46
|
+
@script = @rpath.basename.clip
|
47
|
+
end
|
48
|
+
@script = "" if @script.nil?
|
49
|
+
begin
|
50
|
+
@base_url = @proto + "://" + @location
|
51
|
+
rescue => e
|
52
|
+
return false
|
53
|
+
raise e
|
54
|
+
dbg = WWMD.debug
|
55
|
+
WWMD.debug = true
|
56
|
+
putd "ERROR in urlparse TRACE:"
|
57
|
+
pp *args
|
58
|
+
putd @proto
|
59
|
+
putd @base
|
60
|
+
putd @actual
|
61
|
+
putd @location
|
62
|
+
WWMD.debug = dbg
|
63
|
+
raise e
|
64
|
+
end
|
65
|
+
@fqpath = @path + @script
|
66
|
+
self
|
67
|
+
end
|
68
|
+
|
69
|
+
def make_me_path
|
70
|
+
@proto,tpath = @base.split(":",2)
|
71
|
+
tpath ||= ""
|
72
|
+
@params = tpath.clop
|
73
|
+
tpath = tpath.clip
|
74
|
+
if @actual.empty?
|
75
|
+
a_path = tpath.split("/").reject { |x| x.empty? }
|
76
|
+
else
|
77
|
+
a_path = tpath.dirname.split("/").reject { |x| x.empty? }
|
78
|
+
end
|
79
|
+
@location = a_path.shift
|
80
|
+
if @actual.clop
|
81
|
+
@params = @actual.clop
|
82
|
+
@actual = @actual.clip
|
83
|
+
end
|
84
|
+
a_path = [] if (@actual =~ (/^\//))
|
85
|
+
b_path = @actual.split("/").reject { |x| x.empty? }
|
86
|
+
a_path.pop if (a_path[-1] =~ /^\?/).kind_of?(Fixnum) && !b_path.empty?
|
87
|
+
c_path = (a_path + @actual.split("/").reject { |x| x.empty? }).flatten
|
88
|
+
d_path = []
|
89
|
+
c_path.each do |x|
|
90
|
+
(d_path.pop;next) if x == ".."
|
91
|
+
next if (x == "." || x =~ /^\?/)
|
92
|
+
d_path << x
|
93
|
+
end
|
94
|
+
return d_path
|
95
|
+
end
|
96
|
+
|
97
|
+
def has_proto?
|
98
|
+
begin
|
99
|
+
return true if HANDLERS.include?(@actual.split(":").first.downcase.to_sym)
|
100
|
+
rescue
|
101
|
+
return false
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def to_s
|
106
|
+
return "#{@proto}://#{@location}/#{rpath}"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
class String
|
112
|
+
HANDLERS = [:https,:http,:ftp,:file]
|
113
|
+
def has_proto?
|
114
|
+
begin
|
115
|
+
return true if HANDLERS.include?(self.split(":").first.downcase.to_sym)
|
116
|
+
rescue
|
117
|
+
return false
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def has_ext? #:nodoc:
|
122
|
+
return false if self.basename.split(".",2)[1].empty?
|
123
|
+
return true
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'rexml/document'
|
4
|
+
require 'htmlentities'
|
5
|
+
require 'wwmd/viewstate/viewstate_utils'
|
6
|
+
module WWMD
|
7
|
+
class ViewState
|
8
|
+
include ViewStateUtils
|
9
|
+
end
|
10
|
+
end
|
11
|
+
require 'wwmd/class_extensions'
|
12
|
+
require 'wwmd/viewstate/viewstate'
|
13
|
+
require 'wwmd/viewstate/viewstate_types'
|
14
|
+
require 'wwmd/viewstate/viewstate_yaml'
|
15
|
+
require 'wwmd/viewstate/viewstate_deserializer_methods'
|
16
|
+
require 'wwmd/viewstate/viewstate_from_xml'
|
17
|
+
require 'wwmd/viewstate/vs_stubs'
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module WWMD
|
2
|
+
class ViewState
|
3
|
+
attr_accessor :b64
|
4
|
+
attr_accessor :obj_queue
|
5
|
+
attr_accessor :mac
|
6
|
+
attr_accessor :debug
|
7
|
+
attr_reader :raw
|
8
|
+
attr_reader :stack
|
9
|
+
attr_reader :buf
|
10
|
+
attr_reader :magic
|
11
|
+
attr_reader :size
|
12
|
+
attr_reader :indexed_strings
|
13
|
+
attr_reader :last_offset
|
14
|
+
attr_reader :xml
|
15
|
+
attr_reader :ndoc
|
16
|
+
attr_reader :obj_counts
|
17
|
+
|
18
|
+
def initialize(b64=nil)
|
19
|
+
@b64 = b64
|
20
|
+
@raw = ""
|
21
|
+
@stack = ""
|
22
|
+
@obj_queue = []
|
23
|
+
@size = 0
|
24
|
+
@indexed_strings = []
|
25
|
+
@mac = nil
|
26
|
+
@debug = false
|
27
|
+
@obj_counts = {}
|
28
|
+
self.deserialize if b64
|
29
|
+
end
|
30
|
+
|
31
|
+
# mac_enabled?
|
32
|
+
def mac_enabled?
|
33
|
+
return !@mac.nil?
|
34
|
+
end
|
35
|
+
|
36
|
+
# deserialize
|
37
|
+
def deserialize(b64=nil)
|
38
|
+
@obj_queue = []
|
39
|
+
@b64 = b64 if b64
|
40
|
+
@raw = @b64.b64d
|
41
|
+
@buf = StringIO.new(@raw)
|
42
|
+
@size = @buf.size
|
43
|
+
raise "Invalid ViewState" if not self.magic?
|
44
|
+
@obj_queue << self.deserialize_value
|
45
|
+
if (@buf.size - @buf.pos) == 20 then
|
46
|
+
@mac = @buf.read(20)
|
47
|
+
dlog(0x00,"MAC = #{@mac.hexify}")
|
48
|
+
end
|
49
|
+
raise "Error Parsing Viewstate (left: #{@buf.size - @buf.pos})" if not (@buf.size - @buf.pos) == 0
|
50
|
+
return !self.raw.nil?
|
51
|
+
end
|
52
|
+
alias_method :parse,:deserialize
|
53
|
+
|
54
|
+
def serialize(objs=nil,version=2)
|
55
|
+
@obj_queue = objs if objs
|
56
|
+
@stack << "\xFF\x01"
|
57
|
+
@stack << @obj_queue.first.serialize
|
58
|
+
@stack << @mac if @mac
|
59
|
+
return !self.stack.nil?
|
60
|
+
end
|
61
|
+
|
62
|
+
def to_xml
|
63
|
+
@xml = REXML::Document.new()
|
64
|
+
header = REXML::Element.new("ViewState")
|
65
|
+
header.add_attribute("version", @magic.b64e)
|
66
|
+
header.add_attribute("version_string", @magic.hexify)
|
67
|
+
header.add_element(@obj_queue.first.to_xml)
|
68
|
+
if self.mac_enabled?
|
69
|
+
max = REXML::Element.new("Mac")
|
70
|
+
max.add_attribute("encoding","hexify")
|
71
|
+
max.add_text(@mac.hexify)
|
72
|
+
header.add_element(max)
|
73
|
+
end
|
74
|
+
@xml.add_element(header)
|
75
|
+
@ndoc = Nokogiri::XML.parse(@xml.to_s)
|
76
|
+
self
|
77
|
+
end
|
78
|
+
|
79
|
+
# xpath search the nokogiri doc if we have one
|
80
|
+
def search(*args)
|
81
|
+
return "No XML" if !@ndoc
|
82
|
+
@ndoc.search(*args)
|
83
|
+
end
|
84
|
+
|
85
|
+
# move pp due to to_xml returning self
|
86
|
+
# this is all for the sake of getting #search to work
|
87
|
+
def pp(*args)
|
88
|
+
return "Undefined" if !@xml
|
89
|
+
@xml.pp(*args)
|
90
|
+
end
|
91
|
+
|
92
|
+
def from_yaml(yaml)
|
93
|
+
@obj_queue = YAML.load(yaml)
|
94
|
+
end
|
95
|
+
|
96
|
+
def to_yaml
|
97
|
+
@obj_queue.to_yaml
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,217 @@
|
|
1
|
+
module WWMD
|
2
|
+
class ViewState
|
3
|
+
# complex types
|
4
|
+
def pair(t=nil)
|
5
|
+
dlog t,"next = #{next_type}"
|
6
|
+
VSStubs::VSPair.new(self.deserialize_value,self.deserialize_value)
|
7
|
+
end
|
8
|
+
|
9
|
+
def triplet(t=nil)
|
10
|
+
dlog t,"next = #{next_type}"
|
11
|
+
VSStubs::VSTriplet.new(self.deserialize_value,self.deserialize_value,self.deserialize_value)
|
12
|
+
end
|
13
|
+
|
14
|
+
def type(t=nil)
|
15
|
+
typeref,typeval = self.deserialize_type
|
16
|
+
dlog(t,"typeref = 0x#{typeref.to_s(16)} typeval = #{typeval}")
|
17
|
+
VSStubs::VSType.new(typeref,typeval)
|
18
|
+
end
|
19
|
+
|
20
|
+
def string_formatted(t=nil)
|
21
|
+
typeref,typeval = self.deserialize_type
|
22
|
+
str = self.read_string
|
23
|
+
dlog(t,"typeref = 0x#{typeref.to_s(16)} typeval = #{typeval} string = #{str}")
|
24
|
+
VSStubs::VSStringFormatted.new(typeref,typeval,str)
|
25
|
+
end
|
26
|
+
|
27
|
+
def int_enum(t=nil)
|
28
|
+
typeref,typeval = self.deserialize_type
|
29
|
+
index = self.read_7bit_encoded_int
|
30
|
+
dlog(t,"typeref = 0x#{typeref.to_s(16)} typeval = #{typeval} index = #{index}")
|
31
|
+
VSStubs::VSIntEnum.new(typeref,typeval,index)
|
32
|
+
end
|
33
|
+
|
34
|
+
def binary_serialized(t=nil)
|
35
|
+
count = self.read_7bit_encoded_int
|
36
|
+
dlog(t,count)
|
37
|
+
bin = self.read(count)
|
38
|
+
me = VSStubs::VSBinarySerialized.new()
|
39
|
+
me.set(bin)
|
40
|
+
return me
|
41
|
+
end
|
42
|
+
|
43
|
+
def sparse_array(t=nil)
|
44
|
+
typeref,typeval = self.deserialize_type
|
45
|
+
size = read_7bit_encoded_int
|
46
|
+
elems = read_7bit_encoded_int
|
47
|
+
dlog(t,"typeref = 0x#{typeref.to_s(16)} typeval = #{typeval} size = #{size} elems = #{elems}")
|
48
|
+
me = VSStubs::VSSparseArray.new(typeref,typeval,size,elems)
|
49
|
+
if elems > size
|
50
|
+
raise "Invalid sparse_array"
|
51
|
+
end
|
52
|
+
(1..elems).each do |i|
|
53
|
+
idx = read_7bit_encoded_int
|
54
|
+
me.add(idx,self.deserialize_value)
|
55
|
+
end
|
56
|
+
return me
|
57
|
+
end
|
58
|
+
|
59
|
+
def hashtable(t=nil)
|
60
|
+
len = read_7bit_encoded_int
|
61
|
+
dlog(t,"len = #{len}")
|
62
|
+
me = VSStubs::VSHashtable.new()
|
63
|
+
(1..len).each do |i|
|
64
|
+
me.add(self.deserialize_value,self.deserialize_value)
|
65
|
+
end
|
66
|
+
return me
|
67
|
+
end
|
68
|
+
|
69
|
+
def hybrid_dict(t=nil)
|
70
|
+
len = read_7bit_encoded_int
|
71
|
+
dlog(t,"len = #{len}")
|
72
|
+
me = VSStubs::VSHybridDict.new()
|
73
|
+
(1..len).each do |i|
|
74
|
+
me.add(self.deserialize_value,self.deserialize_value)
|
75
|
+
end
|
76
|
+
return me
|
77
|
+
end
|
78
|
+
|
79
|
+
def array(t=nil)
|
80
|
+
typeref,typeval = self.deserialize_type
|
81
|
+
len = read_7bit_encoded_int
|
82
|
+
dlog(t,"typeref = 0x#{typeref.to_s(16)} typeval = #{typeval} len = #{len}")
|
83
|
+
me = VSStubs::VSArray.new(typeref,typeval)
|
84
|
+
(1..len).each do |i|
|
85
|
+
me.add(self.deserialize_value)
|
86
|
+
end
|
87
|
+
return me
|
88
|
+
end
|
89
|
+
|
90
|
+
def string_array(t=nil)
|
91
|
+
len = read_7bit_encoded_int
|
92
|
+
dlog(t,"len = #{len}")
|
93
|
+
me = VSStubs::VSStringArray.new()
|
94
|
+
(1..len).each do |i|
|
95
|
+
str = self.read_string
|
96
|
+
me.add(str)
|
97
|
+
dlog(t,"string_array_elem: #{str}")
|
98
|
+
end
|
99
|
+
return me
|
100
|
+
end
|
101
|
+
|
102
|
+
def list(t=nil)
|
103
|
+
len = read_7bit_encoded_int
|
104
|
+
dlog(t,"len = #{len}")
|
105
|
+
me = VSStubs::VSList.new()
|
106
|
+
(1..len).each do |i|
|
107
|
+
me.add(self.deserialize_value)
|
108
|
+
end
|
109
|
+
return me
|
110
|
+
end
|
111
|
+
|
112
|
+
def unit(t=nil)
|
113
|
+
s1 = read_double
|
114
|
+
s2 = read_int32
|
115
|
+
dlog(t,"#{s1.to_s(16).rjust(16,"0")},#{s2.to_s(16).rjust(8,"0")}")
|
116
|
+
VSStubs::VSUnit.new(s1,s2)
|
117
|
+
end
|
118
|
+
|
119
|
+
def indexed_string(t=nil)
|
120
|
+
str = self.read_string
|
121
|
+
@indexed_strings << str
|
122
|
+
dlog(t,"idx = #{@indexed_strings.size - 1} val = #{str}")
|
123
|
+
VSStubs::VSIndexedString.new(str)
|
124
|
+
end
|
125
|
+
|
126
|
+
def indexed_string_ref(t=nil)
|
127
|
+
ref = self.read_int
|
128
|
+
dlog(t,"ref = #{ref} val = #{@indexed_strings[ref]}")
|
129
|
+
VSStubs::VSIndexedStringRef.new(ref)
|
130
|
+
end
|
131
|
+
|
132
|
+
def string(t=nil)
|
133
|
+
str = self.read_string
|
134
|
+
dlog(t,str)
|
135
|
+
VSStubs::VSString.new(str)
|
136
|
+
end
|
137
|
+
|
138
|
+
# VSStubs::VSReadValue types
|
139
|
+
def color(t=nil)
|
140
|
+
val = self.read_int32
|
141
|
+
dlog(t,val.to_s(16))
|
142
|
+
VSStubs::VSColor.new(val)
|
143
|
+
end
|
144
|
+
|
145
|
+
def known_color(t=nil)
|
146
|
+
index = self.read_7bit_encoded_int
|
147
|
+
dlog(t,"index = #{index.to_s(16)}")
|
148
|
+
VSStubs::VSKnownColor.new(index)
|
149
|
+
end
|
150
|
+
|
151
|
+
def int16(t=nil)
|
152
|
+
val = read_short
|
153
|
+
dlog(t,val)
|
154
|
+
VSStubs::VSInt16.new(val)
|
155
|
+
end
|
156
|
+
|
157
|
+
def int32(t=nil)
|
158
|
+
val = self.read_7bit_encoded_int
|
159
|
+
dlog(t,val)
|
160
|
+
VSStubs::VSInt32.new(val)
|
161
|
+
end
|
162
|
+
|
163
|
+
def byte(t=nil)
|
164
|
+
val = self.read_byte
|
165
|
+
dlog(t,val)
|
166
|
+
VSStubs::VSByte.new(val)
|
167
|
+
end
|
168
|
+
|
169
|
+
def char(t=nil)
|
170
|
+
val = self.read_byte
|
171
|
+
dlog(t,val)
|
172
|
+
VSStubs::VSChar.new(val)
|
173
|
+
end
|
174
|
+
|
175
|
+
def date_time(t=nil)
|
176
|
+
val = self.read_double
|
177
|
+
dlog(t,val)
|
178
|
+
VSStubs::VSDateTime.new(val)
|
179
|
+
end
|
180
|
+
|
181
|
+
def double(t=nil)
|
182
|
+
val = self.read_double
|
183
|
+
dlog(t,val)
|
184
|
+
VSStubs::VSDouble.new(val)
|
185
|
+
end
|
186
|
+
|
187
|
+
def single(t=nil)
|
188
|
+
val = self.read_single
|
189
|
+
dlog(t,val)
|
190
|
+
VSStubs::VSSingle.new(val)
|
191
|
+
end
|
192
|
+
|
193
|
+
# VSStubs::VSValue types
|
194
|
+
def null(t=nil); dlog(t,nil); return VSStubs::VSValue.new(t); end
|
195
|
+
def empty_byte(t=nil); dlog(t,nil); return VSStubs::VSValue.new(t); end
|
196
|
+
def zeroint32(t=nil); dlog(t,nil); return VSStubs::VSValue.new(t); end
|
197
|
+
def bool_true(t=nil); dlog(t,nil); return VSStubs::VSValue.new(t); end
|
198
|
+
def bool_false(t=nil); dlog(t,nil); return VSStubs::VSValue.new(t); end
|
199
|
+
def empty_color(t=nil); dlog(t,nil); return VSStubs::VSValue.new(t); end
|
200
|
+
def empty_unit(t=nil); dlog(t,nil); return VSStubs::VSValue.new(t); end
|
201
|
+
|
202
|
+
# deserialize_value
|
203
|
+
def deserialize_value
|
204
|
+
@last_offset = @buf.pos
|
205
|
+
token = self.read_byte # self.read_raw_byte
|
206
|
+
if not (tsym = VIEWSTATE_TYPES[token])
|
207
|
+
STDERR.puts "TOKEN: [0x#{token.to_s(16)}] at #{last_offset}"
|
208
|
+
STDERR.puts @buf.read(32).hexdump
|
209
|
+
raise "Invalid Type [0x#{token.to_s(16)}] at #{last_offset}" if not (tsym = VIEWSTATE_TYPES[token])
|
210
|
+
end
|
211
|
+
nobj = self.send(tsym,token)
|
212
|
+
raise "Invalid Class Returned #{nobj.class}" if not VIEWSTATE_TYPES.include?(nobj.opcode)
|
213
|
+
return nobj
|
214
|
+
end
|
215
|
+
|
216
|
+
end
|
217
|
+
end
|