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.
Files changed (60) hide show
  1. data/History.txt +21 -0
  2. data/{README → README.rdoc} +27 -2
  3. data/lib/wwmd.rb +4 -4
  4. data/lib/wwmd/class_extensions.rb +2 -0
  5. data/lib/wwmd/{mixins.rb → class_extensions/extensions_base.rb} +25 -121
  6. data/lib/wwmd/class_extensions/extensions_encoding.rb +79 -0
  7. data/lib/wwmd/{mixins_external.rb → class_extensions/extensions_external.rb} +0 -0
  8. data/lib/wwmd/class_extensions/extensions_nilclass.rb +11 -0
  9. data/lib/wwmd/{mixins_extends.rb → class_extensions/extensions_rbkb.rb} +0 -0
  10. data/lib/wwmd/{encoding.rb → class_extensions/mixins_string_encoding.rb} +6 -6
  11. data/lib/wwmd/page.rb +3 -245
  12. data/lib/wwmd/page/auth.rb +0 -166
  13. data/lib/wwmd/page/constants.rb +7 -4
  14. data/lib/wwmd/page/form.rb +0 -15
  15. data/lib/wwmd/page/form_array.rb +96 -74
  16. data/lib/wwmd/page/headers.rb +25 -21
  17. data/lib/wwmd/page/helpers.rb +30 -0
  18. data/lib/wwmd/{hpricot_html2text.rb → page/html2text_hpricot.rb} +1 -1
  19. data/lib/wwmd/{nokogiri_html2text.rb → page/html2text_nokogiri.rb} +0 -0
  20. data/lib/wwmd/page/inputs.rb +1 -1
  21. data/lib/wwmd/page/irb_helpers.rb +37 -13
  22. data/lib/wwmd/page/page.rb +238 -0
  23. data/lib/wwmd/page/parsing_convenience.rb +8 -3
  24. data/lib/wwmd/page/scrape.rb +15 -19
  25. data/lib/wwmd/page/spider.rb +11 -11
  26. data/lib/wwmd/urlparse.rb +20 -5
  27. data/lib/wwmd/viewstate.rb +9 -112
  28. data/lib/wwmd/viewstate/viewstate.rb +101 -0
  29. data/lib/wwmd/viewstate/viewstate_deserializer_methods.rb +36 -36
  30. data/lib/wwmd/viewstate/viewstate_types.rb +0 -4
  31. data/lib/wwmd/viewstate/viewstate_utils.rb +6 -1
  32. data/lib/wwmd/viewstate/vs_stubs.rb +22 -0
  33. data/lib/wwmd/viewstate/{vs_array.rb → vs_stubs/vs_array.rb} +3 -1
  34. data/lib/wwmd/viewstate/{vs_binary_serialized.rb → vs_stubs/vs_binary_serialized.rb} +3 -1
  35. data/lib/wwmd/viewstate/{vs_hashtable.rb → vs_stubs/vs_hashtable.rb} +3 -1
  36. data/lib/wwmd/viewstate/{vs_hybrid_dict.rb → vs_stubs/vs_hybrid_dict.rb} +3 -1
  37. data/lib/wwmd/viewstate/{vs_indexed_string.rb → vs_stubs/vs_indexed_string.rb} +1 -1
  38. data/lib/wwmd/viewstate/{vs_indexed_string_ref.rb → vs_stubs/vs_indexed_string_ref.rb} +3 -1
  39. data/lib/wwmd/viewstate/{vs_int_enum.rb → vs_stubs/vs_int_enum.rb} +3 -1
  40. data/lib/wwmd/viewstate/{vs_list.rb → vs_stubs/vs_list.rb} +2 -1
  41. data/lib/wwmd/viewstate/{vs_pair.rb → vs_stubs/vs_pair.rb} +3 -1
  42. data/lib/wwmd/viewstate/vs_stubs/vs_read_types.rb +11 -0
  43. data/lib/wwmd/viewstate/{vs_read_value.rb → vs_stubs/vs_read_value.rb} +3 -1
  44. data/lib/wwmd/viewstate/{vs_sparse_array.rb → vs_stubs/vs_sparse_array.rb} +3 -1
  45. data/lib/wwmd/viewstate/{vs_string.rb → vs_stubs/vs_string.rb} +2 -1
  46. data/lib/wwmd/viewstate/{vs_string_array.rb → vs_stubs/vs_string_array.rb} +4 -2
  47. data/lib/wwmd/viewstate/{vs_string_formatted.rb → vs_stubs/vs_string_formatted.rb} +4 -2
  48. data/lib/wwmd/viewstate/{viewstate_class_helpers.rb → vs_stubs/vs_stub_helpers.rb} +2 -1
  49. data/lib/wwmd/viewstate/{vs_triplet.rb → vs_stubs/vs_triplet.rb} +3 -1
  50. data/lib/wwmd/viewstate/{vs_type.rb → vs_stubs/vs_type.rb} +3 -1
  51. data/lib/wwmd/viewstate/{vs_unit.rb → vs_stubs/vs_unit.rb} +3 -1
  52. data/lib/wwmd/viewstate/{vs_value.rb → vs_stubs/vs_value.rb} +4 -2
  53. data/lib/wwmd/wwmd_config.rb +44 -36
  54. data/lib/wwmd/wwmd_puts.rb +9 -0
  55. data/lib/wwmd/wwmd_utils.rb +22 -24
  56. data/tasks/setup.rb +1 -1
  57. metadata +41 -35
  58. data/README.txt +0 -62
  59. data/lib/wwmd/viewstate/vs_read_types.rb +0 -11
  60. 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].to_form_array
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.opts[:base_url],url).to_s
65
+ self.url = @urlparse.parse(self.base_url,url).to_s
61
66
  end
62
67
 
63
68
  # set self.opts[:base_url]
@@ -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 = true
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
- # define an urls_from_helper method in your task specific script
97
- def urls_from_helper
98
- putw "WARN: Please set an urls_from_helper override in your helper script" if @warn
99
- return nil
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
@@ -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
- @bypass.each { |b| return true if (url =~ b) }
47
- @queued.push(url) if (@visited.find { |v| v == url }.nil? and @queued.find { |q| q == url }.nil?)
48
- return true
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
- return true
53
+ true
55
54
  end
56
55
 
57
56
  # get the next url in the queue
58
57
  def get_next
59
- return queued.shift
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
- return !queued.empty?
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.push(_de_csrf(url))
100
+ return nil if @visited.include?(url)
101
+ @visited.push(url)
102
102
  links.each { |l| self.push_url l }
103
- return nil
103
+ nil
104
104
  end
105
105
 
106
106
  # set up the ignore list
@@ -1,6 +1,5 @@
1
1
  require 'htmlentities'
2
- require 'wwmd/mixins'
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
- @base_url = @proto + "://" + @location
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
- return true if HANDLERS.include?(@actual.split(":").first.downcase.to_sym)
75
- return false
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
@@ -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/mixins'
11
- require 'wwmd/mixins_extends'
12
- require 'wwmd/mixins_external'
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/vs_read_value'
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)