miketracy-wwmd 0.2.16 → 0.2.17

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.
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)