miketracy-wwmd 0.2.16 → 0.2.17
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +21 -0
- data/{README → README.rdoc} +27 -2
- data/lib/wwmd.rb +4 -4
- data/lib/wwmd/class_extensions.rb +2 -0
- data/lib/wwmd/{mixins.rb → class_extensions/extensions_base.rb} +25 -121
- data/lib/wwmd/class_extensions/extensions_encoding.rb +79 -0
- data/lib/wwmd/{mixins_external.rb → class_extensions/extensions_external.rb} +0 -0
- data/lib/wwmd/class_extensions/extensions_nilclass.rb +11 -0
- data/lib/wwmd/{mixins_extends.rb → class_extensions/extensions_rbkb.rb} +0 -0
- data/lib/wwmd/{encoding.rb → class_extensions/mixins_string_encoding.rb} +6 -6
- data/lib/wwmd/page.rb +3 -245
- data/lib/wwmd/page/auth.rb +0 -166
- data/lib/wwmd/page/constants.rb +7 -4
- data/lib/wwmd/page/form.rb +0 -15
- data/lib/wwmd/page/form_array.rb +96 -74
- data/lib/wwmd/page/headers.rb +25 -21
- data/lib/wwmd/page/helpers.rb +30 -0
- data/lib/wwmd/{hpricot_html2text.rb → page/html2text_hpricot.rb} +1 -1
- data/lib/wwmd/{nokogiri_html2text.rb → page/html2text_nokogiri.rb} +0 -0
- data/lib/wwmd/page/inputs.rb +1 -1
- data/lib/wwmd/page/irb_helpers.rb +37 -13
- data/lib/wwmd/page/page.rb +238 -0
- data/lib/wwmd/page/parsing_convenience.rb +8 -3
- data/lib/wwmd/page/scrape.rb +15 -19
- data/lib/wwmd/page/spider.rb +11 -11
- data/lib/wwmd/urlparse.rb +20 -5
- data/lib/wwmd/viewstate.rb +9 -112
- data/lib/wwmd/viewstate/viewstate.rb +101 -0
- data/lib/wwmd/viewstate/viewstate_deserializer_methods.rb +36 -36
- data/lib/wwmd/viewstate/viewstate_types.rb +0 -4
- data/lib/wwmd/viewstate/viewstate_utils.rb +6 -1
- data/lib/wwmd/viewstate/vs_stubs.rb +22 -0
- data/lib/wwmd/viewstate/{vs_array.rb → vs_stubs/vs_array.rb} +3 -1
- data/lib/wwmd/viewstate/{vs_binary_serialized.rb → vs_stubs/vs_binary_serialized.rb} +3 -1
- data/lib/wwmd/viewstate/{vs_hashtable.rb → vs_stubs/vs_hashtable.rb} +3 -1
- data/lib/wwmd/viewstate/{vs_hybrid_dict.rb → vs_stubs/vs_hybrid_dict.rb} +3 -1
- data/lib/wwmd/viewstate/{vs_indexed_string.rb → vs_stubs/vs_indexed_string.rb} +1 -1
- data/lib/wwmd/viewstate/{vs_indexed_string_ref.rb → vs_stubs/vs_indexed_string_ref.rb} +3 -1
- data/lib/wwmd/viewstate/{vs_int_enum.rb → vs_stubs/vs_int_enum.rb} +3 -1
- data/lib/wwmd/viewstate/{vs_list.rb → vs_stubs/vs_list.rb} +2 -1
- data/lib/wwmd/viewstate/{vs_pair.rb → vs_stubs/vs_pair.rb} +3 -1
- data/lib/wwmd/viewstate/vs_stubs/vs_read_types.rb +11 -0
- data/lib/wwmd/viewstate/{vs_read_value.rb → vs_stubs/vs_read_value.rb} +3 -1
- data/lib/wwmd/viewstate/{vs_sparse_array.rb → vs_stubs/vs_sparse_array.rb} +3 -1
- data/lib/wwmd/viewstate/{vs_string.rb → vs_stubs/vs_string.rb} +2 -1
- data/lib/wwmd/viewstate/{vs_string_array.rb → vs_stubs/vs_string_array.rb} +4 -2
- data/lib/wwmd/viewstate/{vs_string_formatted.rb → vs_stubs/vs_string_formatted.rb} +4 -2
- data/lib/wwmd/viewstate/{viewstate_class_helpers.rb → vs_stubs/vs_stub_helpers.rb} +2 -1
- data/lib/wwmd/viewstate/{vs_triplet.rb → vs_stubs/vs_triplet.rb} +3 -1
- data/lib/wwmd/viewstate/{vs_type.rb → vs_stubs/vs_type.rb} +3 -1
- data/lib/wwmd/viewstate/{vs_unit.rb → vs_stubs/vs_unit.rb} +3 -1
- data/lib/wwmd/viewstate/{vs_value.rb → vs_stubs/vs_value.rb} +4 -2
- data/lib/wwmd/wwmd_config.rb +44 -36
- data/lib/wwmd/wwmd_puts.rb +9 -0
- data/lib/wwmd/wwmd_utils.rb +22 -24
- data/tasks/setup.rb +1 -1
- metadata +41 -35
- data/README.txt +0 -62
- data/lib/wwmd/viewstate/vs_read_types.rb +0 -11
- data/wwmd.gemspec +0 -0
@@ -12,8 +12,13 @@ module WWMD
|
|
12
12
|
# return this page's form (at index id) as a FormArray
|
13
13
|
def get_form(id=nil)
|
14
14
|
id = 0 if not id
|
15
|
-
return nil if forms.empty?
|
16
|
-
@forms[id]
|
15
|
+
return nil if forms.empty? || !forms[id]
|
16
|
+
f = @forms[id]
|
17
|
+
url_action = @urlparse.parse(self.cur,f.action).to_s
|
18
|
+
FormArray.new do |x|
|
19
|
+
x.set_fields(f.fields)
|
20
|
+
x.action = url_action
|
21
|
+
end
|
17
22
|
end
|
18
23
|
|
19
24
|
# return the complete url to the form action on this page
|
@@ -57,7 +62,7 @@ module WWMD
|
|
57
62
|
end
|
58
63
|
|
59
64
|
def furl(url)
|
60
|
-
self.url = @urlparse.parse(self.
|
65
|
+
self.url = @urlparse.parse(self.base_url,url).to_s
|
61
66
|
end
|
62
67
|
|
63
68
|
# set self.opts[:base_url]
|
data/lib/wwmd/page/scrape.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# o hai! I need your help.
|
2
|
+
|
1
3
|
module WWMD
|
2
4
|
LINKS_REGEXP = [
|
3
5
|
/window\.open\s*\(([^\)]+)/i,
|
@@ -8,35 +10,21 @@ module WWMD
|
|
8
10
|
/Ajax\.Request\s*\((['"][^'"]+['"])/i,
|
9
11
|
]
|
10
12
|
|
11
|
-
AJAX_REGEXP = [
|
12
|
-
/Ajax\.Request\s*\((['"][^'"]+['"])/i,
|
13
|
-
]
|
14
|
-
|
15
|
-
SRC_REGEXP = [
|
16
|
-
/src=\s*(['"][^'"]+['"])/i
|
17
|
-
]
|
18
|
-
|
19
|
-
# NOT_URL_CHAR = "[^0-9a-zA-Z\:\/\+\\-\%\#]"
|
20
|
-
|
21
13
|
class Scrape
|
22
14
|
|
23
15
|
attr_accessor :debug
|
24
16
|
attr_accessor :warn
|
25
17
|
attr_accessor :links # links found on page
|
26
18
|
attr_accessor :jlinks # links to javascript includes
|
27
|
-
|
28
19
|
attr_reader :hdoc
|
29
20
|
|
30
|
-
@debug = false
|
31
|
-
@warn = true
|
32
|
-
|
33
21
|
# create a new scrape object using passed HTML
|
34
22
|
def initialize(page='<>')
|
35
23
|
@page = page
|
36
24
|
@hdoc = HDOC.parse(@page)
|
37
25
|
@links = Array.new
|
38
26
|
@debug = false
|
39
|
-
@warn
|
27
|
+
@warn = false
|
40
28
|
end
|
41
29
|
|
42
30
|
# reset this scrape object (called by WWMD::Page)
|
@@ -93,10 +81,11 @@ module WWMD
|
|
93
81
|
end
|
94
82
|
end
|
95
83
|
|
96
|
-
#
|
97
|
-
def
|
98
|
-
|
99
|
-
|
84
|
+
# return an array of Form objects for forms on page
|
85
|
+
def for_forms
|
86
|
+
ret = []
|
87
|
+
@hdoc.search("//form").each { |f| ret << Form.new(f) }
|
88
|
+
ret
|
100
89
|
end
|
101
90
|
|
102
91
|
# use xpath searches to get
|
@@ -198,5 +187,12 @@ module WWMD
|
|
198
187
|
def warnings#:nodoc:
|
199
188
|
return @warn
|
200
189
|
end
|
190
|
+
|
191
|
+
# define an urls_from_helper method in your task specific script
|
192
|
+
def urls_from_helper
|
193
|
+
putw "WARN: Please set an urls_from_helper override in your helper script" if @warn
|
194
|
+
return nil
|
195
|
+
end
|
196
|
+
|
201
197
|
end
|
202
198
|
end
|
data/lib/wwmd/page/spider.rb
CHANGED
@@ -23,11 +23,11 @@ module WWMD
|
|
23
23
|
|
24
24
|
# pass me opts and an array of regexps to ignore
|
25
25
|
# we have a set of sane(ish) defaults here
|
26
|
-
def initialize(opts={},ignore=nil)
|
26
|
+
def initialize(opts={},ignore=nil,&block)
|
27
|
+
@block ||= block
|
27
28
|
@opts = opts
|
28
29
|
@visited = []
|
29
30
|
@queued = []
|
30
|
-
@bypass = []
|
31
31
|
@local_only = true
|
32
32
|
@csrf_token = nil
|
33
33
|
if !opts[:spider_local_only].nil?
|
@@ -39,31 +39,30 @@ module WWMD
|
|
39
39
|
# push an url onto the queue
|
40
40
|
def push_url(url)
|
41
41
|
return false if _check_ignore(url)
|
42
|
-
url = _de_csrf(url)
|
43
42
|
if @local_only
|
44
43
|
return false if !(url =~ /#{@opts[:base_url]}/)
|
45
44
|
end
|
46
|
-
|
47
|
-
@queued.push(url)
|
48
|
-
|
45
|
+
return false if (@visited.include?(url) or @queued.include?(url))
|
46
|
+
@queued.push(url)
|
47
|
+
true
|
49
48
|
end
|
50
49
|
|
51
50
|
# skip items in the queue
|
52
51
|
def skip(tim=1)
|
53
52
|
tim.times { |i| @queued.shift }
|
54
|
-
|
53
|
+
true
|
55
54
|
end
|
56
55
|
|
57
56
|
# get the next url in the queue
|
58
57
|
def get_next
|
59
|
-
|
58
|
+
queued.shift
|
60
59
|
end
|
61
60
|
|
62
61
|
alias_method :next, :get_next
|
63
62
|
|
64
63
|
# more elements in the queue?
|
65
64
|
def next?
|
66
|
-
|
65
|
+
!queued.empty?
|
67
66
|
end
|
68
67
|
|
69
68
|
# get the last ul we visited? this doesn't look right
|
@@ -98,9 +97,10 @@ module WWMD
|
|
98
97
|
|
99
98
|
# add url to queue
|
100
99
|
def add(url='',links=[])
|
101
|
-
@visited.
|
100
|
+
return nil if @visited.include?(url)
|
101
|
+
@visited.push(url)
|
102
102
|
links.each { |l| self.push_url l }
|
103
|
-
|
103
|
+
nil
|
104
104
|
end
|
105
105
|
|
106
106
|
# set up the ignore list
|
data/lib/wwmd/urlparse.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'htmlentities'
|
2
|
-
require 'wwmd/
|
3
|
-
require 'wwmd/mixins_extends'
|
2
|
+
require 'wwmd/class_extensions'
|
4
3
|
module WWMD
|
5
4
|
|
6
5
|
# yay for experiments in re-inventing the wheel
|
@@ -37,7 +36,20 @@ module WWMD
|
|
37
36
|
@script = @rpath.basename.clip
|
38
37
|
end
|
39
38
|
@script = "" if @script.nil?
|
40
|
-
|
39
|
+
begin
|
40
|
+
@base_url = @proto + "://" + @location
|
41
|
+
rescue => e
|
42
|
+
dgb = WWMD.debug
|
43
|
+
WWMD.debug = true
|
44
|
+
putd "ERROR in urlparse TRACE:"
|
45
|
+
pp *args
|
46
|
+
putd @proto
|
47
|
+
putd @base
|
48
|
+
putd @actual
|
49
|
+
putd @location
|
50
|
+
WWMD.debug = dbg
|
51
|
+
raise e
|
52
|
+
end
|
41
53
|
@fqpath = @path + @script
|
42
54
|
self
|
43
55
|
end
|
@@ -71,8 +83,11 @@ module WWMD
|
|
71
83
|
end
|
72
84
|
|
73
85
|
def has_proto?
|
74
|
-
|
75
|
-
|
86
|
+
begin
|
87
|
+
return true if HANDLERS.include?(@actual.split(":").first.downcase.to_sym)
|
88
|
+
rescue
|
89
|
+
return false
|
90
|
+
end
|
76
91
|
end
|
77
92
|
|
78
93
|
def to_s
|
data/lib/wwmd/viewstate.rb
CHANGED
@@ -1,120 +1,17 @@
|
|
1
|
-
require 'wwmd/viewstate/viewstate_utils'
|
2
|
-
module WWMD
|
3
|
-
class ViewState < ViewStateUtils
|
4
|
-
end
|
5
|
-
end
|
6
1
|
require 'rubygems'
|
7
2
|
require 'nokogiri'
|
8
3
|
require 'rexml/document'
|
9
4
|
require 'htmlentities'
|
10
|
-
require 'wwmd/
|
11
|
-
|
12
|
-
|
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
13
|
require 'wwmd/viewstate/viewstate_types'
|
14
|
-
require 'wwmd/viewstate/viewstate_class_helpers'
|
15
14
|
require 'wwmd/viewstate/viewstate_yaml'
|
16
15
|
require 'wwmd/viewstate/viewstate_deserializer_methods'
|
17
16
|
require 'wwmd/viewstate/viewstate_from_xml'
|
18
|
-
require 'wwmd/viewstate/
|
19
|
-
require 'wwmd/viewstate/vs_read_types'
|
20
|
-
require 'wwmd/viewstate/vs_value'
|
21
|
-
require 'wwmd/viewstate/vs_array'
|
22
|
-
require 'wwmd/viewstate/vs_binary_serialized'
|
23
|
-
require 'wwmd/viewstate/vs_int_enum'
|
24
|
-
require 'wwmd/viewstate/vs_hashtable'
|
25
|
-
require 'wwmd/viewstate/vs_hybrid_dict'
|
26
|
-
require 'wwmd/viewstate/vs_list'
|
27
|
-
require 'wwmd/viewstate/vs_pair'
|
28
|
-
require 'wwmd/viewstate/vs_sparse_array'
|
29
|
-
require 'wwmd/viewstate/vs_string'
|
30
|
-
require 'wwmd/viewstate/vs_string_array'
|
31
|
-
require 'wwmd/viewstate/vs_string_formatted'
|
32
|
-
require 'wwmd/viewstate/vs_triplet'
|
33
|
-
require 'wwmd/viewstate/vs_type'
|
34
|
-
require 'wwmd/viewstate/vs_unit'
|
35
|
-
require 'wwmd/viewstate/vs_indexed_string'
|
36
|
-
require 'wwmd/viewstate/vs_indexed_string_ref'
|
37
|
-
module WWMD
|
38
|
-
class ViewState
|
39
|
-
attr_accessor :b64
|
40
|
-
attr_accessor :obj_queue
|
41
|
-
attr_accessor :mac
|
42
|
-
attr_accessor :debug
|
43
|
-
attr_reader :raw
|
44
|
-
attr_reader :stack
|
45
|
-
attr_reader :bufarr
|
46
|
-
attr_reader :magic
|
47
|
-
attr_reader :size
|
48
|
-
attr_reader :indexed_strings
|
49
|
-
attr_reader :last_offset
|
50
|
-
attr_reader :xml
|
51
|
-
|
52
|
-
def initialize(b64=nil)
|
53
|
-
@b64 = b64
|
54
|
-
@raw = ""
|
55
|
-
@stack = ""
|
56
|
-
@obj_queue = []
|
57
|
-
@bufarr = []
|
58
|
-
@size = 0
|
59
|
-
@indexed_strings = []
|
60
|
-
@mac = nil
|
61
|
-
@debug = false
|
62
|
-
self.deserialize if b64
|
63
|
-
end
|
64
|
-
|
65
|
-
# mac_enabled?
|
66
|
-
def mac_enabled?
|
67
|
-
return !@mac.nil?
|
68
|
-
end
|
69
|
-
|
70
|
-
# deserialize
|
71
|
-
def deserialize(b64=nil)
|
72
|
-
@obj_queue = []
|
73
|
-
@b64 = b64 if b64
|
74
|
-
@raw = @b64.b64d
|
75
|
-
@bufarr = @raw.scan(/./m)
|
76
|
-
@size = @bufarr.size
|
77
|
-
raise "Invalid ViewState" if not self.magic?
|
78
|
-
@obj_queue << self.deserialize_value
|
79
|
-
if @bufarr.size == 20 then
|
80
|
-
@mac = bufarr.slice!(0..19).join("")
|
81
|
-
dlog(0x00,"MAC = #{@mac.hexify}")
|
82
|
-
end
|
83
|
-
raise "Error Parsing Viewstate (left: #{@buffarr.size})" if not @bufarr.size == 0
|
84
|
-
return !self.raw.nil?
|
85
|
-
end
|
86
|
-
|
87
|
-
def serialize(objs=nil,version=2)
|
88
|
-
@obj_queue = objs if objs
|
89
|
-
@stack << "\xFF\x01"
|
90
|
-
@stack << @obj_queue.first.serialize
|
91
|
-
@stack << @mac if @mac
|
92
|
-
return !self.stack.nil?
|
93
|
-
end
|
94
|
-
|
95
|
-
def to_xml
|
96
|
-
@xml = REXML::Document.new()
|
97
|
-
header = REXML::Element.new("ViewState")
|
98
|
-
header.add_attribute("version", @magic.b64e)
|
99
|
-
header.add_attribute("version_string", @magic.hexify)
|
100
|
-
header.add_element(@obj_queue.first.to_xml)
|
101
|
-
if self.mac_enabled?
|
102
|
-
max = REXML::Element.new("Mac")
|
103
|
-
max.add_attribute("encoding","hexify")
|
104
|
-
max.add_text(@mac.hexify)
|
105
|
-
header.add_element(max)
|
106
|
-
end
|
107
|
-
@xml.add_element(header)
|
108
|
-
@xml
|
109
|
-
end
|
110
|
-
|
111
|
-
def from_yaml(yaml)
|
112
|
-
@obj_queue = YAML.load(yaml)
|
113
|
-
end
|
114
|
-
|
115
|
-
def to_yaml
|
116
|
-
@obj_queue.to_yaml
|
117
|
-
end
|
118
|
-
|
119
|
-
end
|
120
|
-
end
|
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 :bufarr
|
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
|
+
@bufarr = []
|
24
|
+
@size = 0
|
25
|
+
@indexed_strings = []
|
26
|
+
@mac = nil
|
27
|
+
@debug = false
|
28
|
+
@obj_counts = {}
|
29
|
+
self.deserialize if b64
|
30
|
+
end
|
31
|
+
|
32
|
+
# mac_enabled?
|
33
|
+
def mac_enabled?
|
34
|
+
return !@mac.nil?
|
35
|
+
end
|
36
|
+
|
37
|
+
# deserialize
|
38
|
+
def deserialize(b64=nil)
|
39
|
+
@obj_queue = []
|
40
|
+
@b64 = b64 if b64
|
41
|
+
@raw = @b64.b64d
|
42
|
+
@bufarr = @raw.scan(/./m)
|
43
|
+
@size = @bufarr.size
|
44
|
+
raise "Invalid ViewState" if not self.magic?
|
45
|
+
@obj_queue << self.deserialize_value
|
46
|
+
if @bufarr.size == 20 then
|
47
|
+
@mac = bufarr.slice!(0..19).join("")
|
48
|
+
dlog(0x00,"MAC = #{@mac.hexify}")
|
49
|
+
end
|
50
|
+
raise "Error Parsing Viewstate (left: #{@buffarr.size})" if not @bufarr.size == 0
|
51
|
+
return !self.raw.nil?
|
52
|
+
end
|
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
|
@@ -3,39 +3,39 @@ module WWMD
|
|
3
3
|
# complex types
|
4
4
|
def pair(t=nil)
|
5
5
|
dlog t,"next = #{next_type}"
|
6
|
-
VSPair.new(self.deserialize_value,self.deserialize_value)
|
6
|
+
VSStubs::VSPair.new(self.deserialize_value,self.deserialize_value)
|
7
7
|
end
|
8
8
|
|
9
9
|
def triplet(t=nil)
|
10
10
|
dlog t,"next = #{next_type}"
|
11
|
-
VSTriplet.new(self.deserialize_value,self.deserialize_value,self.deserialize_value)
|
11
|
+
VSStubs::VSTriplet.new(self.deserialize_value,self.deserialize_value,self.deserialize_value)
|
12
12
|
end
|
13
13
|
|
14
14
|
def type(t=nil)
|
15
15
|
typeref,typeval = self.deserialize_type
|
16
16
|
dlog(t,"typeref = 0x#{typeref.to_s(16)} typeval = #{typeval}")
|
17
|
-
VSType.new(typeref,typeval)
|
17
|
+
VSStubs::VSType.new(typeref,typeval)
|
18
18
|
end
|
19
19
|
|
20
20
|
def string_formatted(t=nil)
|
21
21
|
typeref,typeval = self.deserialize_type
|
22
22
|
str = self.read_string
|
23
23
|
dlog(t,"typeref = 0x#{typeref.to_s(16)} typeval = #{typeval} string = #{str}")
|
24
|
-
VSStringFormatted.new(typeref,typeval,str)
|
24
|
+
VSStubs::VSStringFormatted.new(typeref,typeval,str)
|
25
25
|
end
|
26
26
|
|
27
27
|
def int_enum(t=nil)
|
28
28
|
typeref,typeval = self.deserialize_type
|
29
29
|
index = self.read_7bit_encoded_int
|
30
30
|
dlog(t,"typeref = 0x#{typeref.to_s(16)} typeval = #{typeval} index = #{index}")
|
31
|
-
VSIntEnum.new(typeref,typeval,index)
|
31
|
+
VSStubs::VSIntEnum.new(typeref,typeval,index)
|
32
32
|
end
|
33
33
|
|
34
34
|
def binary_serialized(t=nil)
|
35
35
|
count = self.read_7bit_encoded_int
|
36
36
|
dlog(t,count)
|
37
37
|
bin = self.read(count)
|
38
|
-
me = VSBinarySerialized.new()
|
38
|
+
me = VSStubs::VSBinarySerialized.new()
|
39
39
|
me.set(bin)
|
40
40
|
return me
|
41
41
|
end
|
@@ -45,7 +45,7 @@ module WWMD
|
|
45
45
|
size = read_7bit_encoded_int
|
46
46
|
elems = read_7bit_encoded_int
|
47
47
|
dlog(t,"typeref = 0x#{typeref.to_s(16)} typeval = #{typeval} size = #{size} elems = #{elems}")
|
48
|
-
me = VSSparseArray.new(typeref,typeval,size,elems)
|
48
|
+
me = VSStubs::VSSparseArray.new(typeref,typeval,size,elems)
|
49
49
|
if elems > size
|
50
50
|
raise "Invalid sparse_array"
|
51
51
|
end
|
@@ -59,7 +59,7 @@ module WWMD
|
|
59
59
|
def hashtable(t=nil)
|
60
60
|
len = read_7bit_encoded_int
|
61
61
|
dlog(t,"len = #{len}")
|
62
|
-
me = VSHashtable.new()
|
62
|
+
me = VSStubs::VSHashtable.new()
|
63
63
|
(1..len).each do |i|
|
64
64
|
me.add(self.deserialize_value,self.deserialize_value)
|
65
65
|
end
|
@@ -69,7 +69,7 @@ module WWMD
|
|
69
69
|
def hybrid_dict(t=nil)
|
70
70
|
len = read_7bit_encoded_int
|
71
71
|
dlog(t,"len = #{len}")
|
72
|
-
me = VSHybridDict.new()
|
72
|
+
me = VSStubs::VSHybridDict.new()
|
73
73
|
(1..len).each do |i|
|
74
74
|
me.add(self.deserialize_value,self.deserialize_value)
|
75
75
|
end
|
@@ -80,7 +80,7 @@ module WWMD
|
|
80
80
|
typeref,typeval = self.deserialize_type
|
81
81
|
len = read_7bit_encoded_int
|
82
82
|
dlog(t,"typeref = 0x#{typeref.to_s(16)} typeval = #{typeval} len = #{len}")
|
83
|
-
me = VSArray.new(typeref,typeval)
|
83
|
+
me = VSStubs::VSArray.new(typeref,typeval)
|
84
84
|
(1..len).each do |i|
|
85
85
|
me.add(self.deserialize_value)
|
86
86
|
end
|
@@ -90,7 +90,7 @@ module WWMD
|
|
90
90
|
def string_array(t=nil)
|
91
91
|
len = read_7bit_encoded_int
|
92
92
|
dlog(t,"len = #{len}")
|
93
|
-
me = VSStringArray.new()
|
93
|
+
me = VSStubs::VSStringArray.new()
|
94
94
|
(1..len).each do |i|
|
95
95
|
str = self.read_string
|
96
96
|
me.add(str)
|
@@ -102,7 +102,7 @@ module WWMD
|
|
102
102
|
def list(t=nil)
|
103
103
|
len = read_7bit_encoded_int
|
104
104
|
dlog(t,"len = #{len}")
|
105
|
-
me = VSList.new()
|
105
|
+
me = VSStubs::VSList.new()
|
106
106
|
(1..len).each do |i|
|
107
107
|
me.add(self.deserialize_value)
|
108
108
|
end
|
@@ -113,99 +113,99 @@ module WWMD
|
|
113
113
|
s1 = read_double
|
114
114
|
s2 = read_int32
|
115
115
|
dlog(t,"#{s1.to_s(16).rjust(16,"0")},#{s2.to_s(16).rjust(8,"0")}")
|
116
|
-
VSUnit.new(s1,s2)
|
116
|
+
VSStubs::VSUnit.new(s1,s2)
|
117
117
|
end
|
118
118
|
|
119
119
|
def indexed_string(t=nil)
|
120
120
|
str = self.read_string
|
121
121
|
@indexed_strings << str
|
122
122
|
dlog(t,"idx = #{@indexed_strings.size - 1} val = #{str}")
|
123
|
-
VSIndexedString.new(str)
|
123
|
+
VSStubs::VSIndexedString.new(str)
|
124
124
|
end
|
125
125
|
|
126
126
|
def indexed_string_ref(t=nil)
|
127
127
|
ref = self.read_int
|
128
128
|
dlog(t,"ref = #{ref} val = #{@indexed_strings[ref]}")
|
129
|
-
VSIndexedStringRef.new(ref)
|
129
|
+
VSStubs::VSIndexedStringRef.new(ref)
|
130
130
|
end
|
131
131
|
|
132
132
|
def string(t=nil)
|
133
133
|
str = self.read_string
|
134
134
|
dlog(t,str)
|
135
|
-
VSString.new(str)
|
135
|
+
VSStubs::VSString.new(str)
|
136
136
|
end
|
137
137
|
|
138
|
-
# VSReadValue types
|
138
|
+
# VSStubs::VSReadValue types
|
139
139
|
def color(t=nil)
|
140
140
|
val = self.read_int32
|
141
141
|
dlog(t,val.to_s(16))
|
142
|
-
VSColor.new(val)
|
142
|
+
VSStubs::VSColor.new(val)
|
143
143
|
end
|
144
144
|
|
145
145
|
def known_color(t=nil)
|
146
146
|
index = self.read_7bit_encoded_int
|
147
147
|
dlog(t,"index = #{index.to_s(16)}")
|
148
|
-
VSKnownColor.new(index)
|
148
|
+
VSStubs::VSKnownColor.new(index)
|
149
149
|
end
|
150
150
|
|
151
151
|
def int16(t=nil)
|
152
152
|
val = read_short
|
153
153
|
dlog(t,val)
|
154
|
-
VSInt16.new(val)
|
154
|
+
VSStubs::VSInt16.new(val)
|
155
155
|
end
|
156
156
|
|
157
157
|
def int32(t=nil)
|
158
158
|
val = self.read_7bit_encoded_int
|
159
159
|
dlog(t,val)
|
160
|
-
VSInt32.new(val)
|
160
|
+
VSStubs::VSInt32.new(val)
|
161
161
|
end
|
162
162
|
|
163
163
|
def byte(t=nil)
|
164
164
|
val = self.read_byte
|
165
165
|
dlog(t,val)
|
166
|
-
VSByte.new(val)
|
166
|
+
VSStubs::VSByte.new(val)
|
167
167
|
end
|
168
168
|
|
169
169
|
def char(t=nil)
|
170
170
|
val = self.read_byte
|
171
171
|
dlog(t,val)
|
172
|
-
VSChar.new(val)
|
172
|
+
VSStubs::VSChar.new(val)
|
173
173
|
end
|
174
174
|
|
175
175
|
def date_time(t=nil)
|
176
176
|
val = self.read_double
|
177
177
|
dlog(t,val)
|
178
|
-
VSDateTime.new(val)
|
178
|
+
VSStubs::VSDateTime.new(val)
|
179
179
|
end
|
180
180
|
|
181
181
|
def double(t=nil)
|
182
182
|
val = self.read_double
|
183
183
|
dlog(t,val)
|
184
|
-
VSDouble.new(val)
|
184
|
+
VSStubs::VSDouble.new(val)
|
185
185
|
end
|
186
186
|
|
187
187
|
def single(t=nil)
|
188
188
|
val = self.read_single
|
189
189
|
dlog(t,val)
|
190
|
-
VSSingle.new(val)
|
190
|
+
VSStubs::VSSingle.new(val)
|
191
191
|
end
|
192
192
|
|
193
|
-
# VSValue types
|
194
|
-
def null(t=nil); dlog(t,nil); return VSValue.new(t); end
|
195
|
-
def empty_byte(t=nil); dlog(t,nil); return VSValue.new(t); end
|
196
|
-
def zeroint32(t=nil); dlog(t,nil); return VSValue.new(t); end
|
197
|
-
def bool_true(t=nil); dlog(t,nil); return VSValue.new(t); end
|
198
|
-
def bool_false(t=nil); dlog(t,nil); return VSValue.new(t); end
|
199
|
-
def empty_color(t=nil); dlog(t,nil); return VSValue.new(t); end
|
200
|
-
def empty_unit(t=nil); dlog(t,nil); return VSValue.new(t); end
|
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
201
|
|
202
202
|
# deserialize_value
|
203
203
|
def deserialize_value
|
204
204
|
@last_offset = self.offset
|
205
205
|
token = self.read_byte # self.read_raw_byte
|
206
206
|
if not (tsym = VIEWSTATE_TYPES[token])
|
207
|
-
puts "TOKEN: [0x#{token.to_s(16)}] at #{last_offset}"
|
208
|
-
puts @bufarr.slice(0..31).join("").hexdump
|
207
|
+
STDERR.puts "TOKEN: [0x#{token.to_s(16)}] at #{last_offset}"
|
208
|
+
STDERR.puts @bufarr.slice(0..31).join("").hexdump
|
209
209
|
raise "Invalid Type [0x#{token.to_s(16)}] at #{last_offset}" if not (tsym = VIEWSTATE_TYPES[token])
|
210
210
|
end
|
211
211
|
nobj = self.send(tsym,token)
|