daapclient 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. data/CHANGELOG +36 -0
  2. data/EXAMPLES +79 -0
  3. data/LICENSE +340 -0
  4. data/NOTES +33 -0
  5. data/README +7 -31
  6. data/lib/net/daap.rb +34 -20
  7. data/lib/net/daap/album.rb +16 -0
  8. data/lib/net/daap/artist.rb +16 -0
  9. data/lib/net/daap/daap_version.rb +7 -0
  10. data/lib/net/daap/database.rb +54 -27
  11. data/lib/net/daap/dmap.rb +13 -24
  12. data/lib/net/daap/playlist.rb +4 -5
  13. data/lib/net/daap/song.rb +10 -8
  14. data/test/data/mt-daapd/02dd88de4b3a69c74bcc56c1acca9ae5.txt +0 -0
  15. data/test/data/mt-daapd/0de583b288d8ae30f89acb26d4c8535b.txt +0 -0
  16. data/test/data/mt-daapd/4146ec82a0f0a638db9293a0c2039e6b.txt +0 -0
  17. data/test/data/mt-daapd/51a2a6f2a53743bec7e79fe0d074dd28.txt +0 -0
  18. data/test/data/mt-daapd/6069971903eef3c8c71ec2c7b395bfeb.txt +0 -0
  19. data/test/data/mt-daapd/{e9a8e709c2116651157182f130207048.txt → 7102a16e834342b8264f1fb5226690e5.txt} +0 -0
  20. data/test/data/mt-daapd/9d29fb31969da7757fa2f4baa3a52fe9.txt +0 -0
  21. data/test/data/mt-daapd/a52dd33cc99471cc156528c06b22e709.txt +0 -0
  22. data/test/data/mt-daapd/a600829e59b3d719b32f25323a2719b0.txt +0 -0
  23. data/test/data/mt-daapd/e2552df8d742fe31d6cc6e1e41e496b3.txt +0 -0
  24. data/test/data/mt-daapd/fc631aa54b83344df9ccf1fbaa7684b0.txt +0 -0
  25. data/test/data/song_data.txt +0 -0
  26. data/test/data/song_structure.txt +209 -0
  27. data/test/mock_server.rb +56 -0
  28. data/test/server_saver.rb +31 -0
  29. data/test/tc_artists.rb +33 -0
  30. data/test/tc_client.rb +47 -116
  31. data/test/tc_download.rb +29 -0
  32. data/test/tc_playlist.rb +37 -0
  33. data/test/tc_protocol.rb +3 -0
  34. data/test/test_daap.rb +23 -0
  35. data/test/ts_daap.rb +7 -0
  36. metadata +41 -97
  37. data/doc/classes/Net.html +0 -127
  38. data/doc/classes/Net/DAAP.html +0 -168
  39. data/doc/classes/Net/DAAP/Client.html +0 -269
  40. data/doc/classes/Net/DAAP/Client.src/M000003.html +0 -20
  41. data/doc/classes/Net/DAAP/Client.src/M000004.html +0 -28
  42. data/doc/classes/Net/DAAP/Client.src/M000005.html +0 -33
  43. data/doc/classes/Net/DAAP/Client.src/M000006.html +0 -37
  44. data/doc/classes/Net/DAAP/Client.src/M000007.html +0 -20
  45. data/doc/classes/Net/DAAP/Client.src/M000008.html +0 -24
  46. data/doc/classes/Net/DAAP/Client.src/M000009.html +0 -18
  47. data/doc/classes/Net/DAAP/DAAPv2.html +0 -165
  48. data/doc/classes/Net/DAAP/DAAPv2.src/M000016.html +0 -30
  49. data/doc/classes/Net/DAAP/DAAPv2.src/M000017.html +0 -21
  50. data/doc/classes/Net/DAAP/DAAPv3.html +0 -178
  51. data/doc/classes/Net/DAAP/DAAPv3.src/M000018.html +0 -30
  52. data/doc/classes/Net/DAAP/DAAPv3.src/M000019.html +0 -23
  53. data/doc/classes/Net/DAAP/DMAP.html +0 -176
  54. data/doc/classes/Net/DAAP/DMAP.src/M000013.html +0 -20
  55. data/doc/classes/Net/DAAP/DMAP.src/M000014.html +0 -18
  56. data/doc/classes/Net/DAAP/DMAP.src/M000015.html +0 -24
  57. data/doc/classes/Net/DAAP/Database.html +0 -224
  58. data/doc/classes/Net/DAAP/Database.src/M000010.html +0 -25
  59. data/doc/classes/Net/DAAP/Database.src/M000011.html +0 -21
  60. data/doc/classes/Net/DAAP/Database.src/M000012.html +0 -35
  61. data/doc/classes/Net/DAAP/Playlist.html +0 -192
  62. data/doc/classes/Net/DAAP/Playlist.src/M000001.html +0 -24
  63. data/doc/classes/Net/DAAP/Playlist.src/M000002.html +0 -30
  64. data/doc/classes/Net/DAAP/Song.html +0 -208
  65. data/doc/classes/Net/DAAP/Song.src/M000020.html +0 -27
  66. data/doc/classes/Net/DAAP/Song.src/M000021.html +0 -19
  67. data/doc/created.rid +0 -1
  68. data/doc/files/CHANGELOG.html +0 -134
  69. data/doc/files/LICENSE.html +0 -531
  70. data/doc/files/README.html +0 -182
  71. data/doc/files/lib/net/daap/database_rb.html +0 -101
  72. data/doc/files/lib/net/daap/dmap_rb.html +0 -101
  73. data/doc/files/lib/net/daap/playlist_rb.html +0 -101
  74. data/doc/files/lib/net/daap/song_rb.html +0 -101
  75. data/doc/files/lib/net/daap_rb.html +0 -114
  76. data/doc/fr_class_index.html +0 -35
  77. data/doc/fr_file_index.html +0 -34
  78. data/doc/fr_method_index.html +0 -47
  79. data/doc/index.html +0 -24
  80. data/doc/rdoc-style.css +0 -208
  81. data/lib/CVS/Entries +0 -1
  82. data/lib/CVS/Repository +0 -1
  83. data/lib/CVS/Root +0 -1
  84. data/lib/net/CVS/Entries +0 -2
  85. data/lib/net/CVS/Repository +0 -1
  86. data/lib/net/CVS/Root +0 -1
  87. data/lib/net/daap/CVS/Entries +0 -5
  88. data/lib/net/daap/CVS/Repository +0 -1
  89. data/lib/net/daap/CVS/Root +0 -1
  90. data/test/CVS/Entries +0 -4
  91. data/test/CVS/Repository +0 -1
  92. data/test/CVS/Root +0 -1
  93. data/test/data/CVS/Entries +0 -1
  94. data/test/data/CVS/Repository +0 -1
  95. data/test/data/CVS/Root +0 -1
  96. data/test/data/mt-daapd/079aca35773150da9fd98db10c7fd0c0.txt +0 -0
  97. data/test/data/mt-daapd/2972f65088b42a06b5d3ca089d71791d.txt +0 -0
  98. data/test/data/mt-daapd/440c2217e6207c54c317c296f71f9769.txt +0 -0
  99. data/test/data/mt-daapd/4d1ce9f941cbd823ed06f1f1baa5a3b9.txt +0 -0
  100. data/test/data/mt-daapd/7bded8b540fd082f102d25e181b47bc4.txt +0 -0
  101. data/test/data/mt-daapd/CVS/Entries +0 -11
  102. data/test/data/mt-daapd/CVS/Repository +0 -1
  103. data/test/data/mt-daapd/CVS/Root +0 -1
  104. data/test/data/mt-daapd/b3e894b87111bdba88e4765967f4b45a.txt +0 -0
  105. data/test/data/mt-daapd/d56b699830e77ba53855679cb1d252da.txt +0 -0
  106. data/test/data/mt-daapd/e61ce3062cb76770658896b778ad06cd.txt +0 -0
  107. data/test/data/mt-daapd/f9073959a0afacebfab7e3bf19c2714a.txt +0 -0
data/NOTES ADDED
@@ -0,0 +1,33 @@
1
+ = Net::DAAP::Client Release Notes
2
+
3
+ == 0.2.0
4
+
5
+ Net::DAAP::Client has a newer, extended interface. In addition to the song
6
+ list that the database already contained, there is now a list of artists and
7
+ a list of albums that you can access from the database. The artists contain
8
+ all of the albums associated with that artists, and each album has all the songs
9
+ for that album. Each artist contains all songs by that artist as well.
10
+
11
+ For example, to access all songs by one artist, one could do this:
12
+
13
+ db.artists.find { |a| a.name == 'Radiohead' '}.songs.each { |s|
14
+ puts s.name
15
+ }
16
+
17
+ Or, to access all of Radiohead's albums, one could do this:
18
+
19
+ db.artists.find { |a| a.name == 'Radiohead' '}.albums.each { |a|
20
+ puts a.name
21
+ }
22
+
23
+ An exhaustive example can be seen in the EXAMPLES file.
24
+
25
+ This version of Net::DAAP::Client relies on digest-m4p which can be obtained
26
+ from the project page here[http://rubyforge.org/frs/?group_id=1155].
27
+ Unfortunately I can't get digest-m4p to build on Windows (I don't have a
28
+ windows machine), so for now digest-m4p only works on Linux and OS X.
29
+ Hopefully someone can send me a patch (hint hint).
30
+
31
+ Also, because of a bug in RubyGems, digest-m4p cannot be released as a gem
32
+ until I find a workaround, or the new version of RubyGems gets released.
33
+
data/README CHANGED
@@ -3,18 +3,14 @@
3
3
  This library is used for browsing iTunes DAAP servers.
4
4
 
5
5
  Most of this is based off the work in the perl version by Richard Clamp which
6
- can be found here:
7
-
8
- http://search.cpan.org/~rclamp/
6
+ can be found here[http://search.cpan.org/~rclamp/].
9
7
 
10
8
  Ruby version is by Aaron Patterson <aaronp@rubyforge.org>
11
9
 
12
10
  == Installation
13
11
 
14
12
  Make sure that Digest::M4P is installed before using this package. Digest::M4P
15
- is available on the daap client ruby forge site:
16
-
17
- http://rubyforge.org/frs/?group_id=1155
13
+ is available on the daap client ruby forge site here[http://rubyforge.org/frs/?group_id=1155].
18
14
 
19
15
  Digest::M4P has not been turned in to a Ruby gem as of this writing.
20
16
 
@@ -22,33 +18,13 @@ After that, just install the gem:
22
18
 
23
19
  sudo gem install daapclient
24
20
 
25
- Also, check out the project page:
26
-
27
- http://rubyforge.org/projects/daapclient
21
+ Also, check out the project page here[http://rubyforge.org/projects/daapclient].
28
22
 
29
23
  == Example Usage
30
24
 
31
- require 'net/daap'
32
- require 'fileutils'
33
-
34
- daap = Net::DAAP::Client.new('localhost')
35
-
36
- daap.connect do |dsn|
37
- daap.databases do |db|
38
- puts "All songs in the database"
39
- db.songs do |song|
40
- filename = "#{song.artist} - #{song.name}.#{song.format}"
41
- directory = "db/#{song.album}"
42
- FileUtils::mkdir_p(directory)
43
-
44
- File.open("#{directory}/#{filename}", "w") do |f|
45
- song.get { |str| f.write str }
46
- end
47
- end
48
- end
49
- end
50
-
51
- == Acknowledgements
25
+ See the EXAMPLES[link://files/EXAMPLES.html] file
26
+
27
+ == Acknowledgments
52
28
 
53
29
  The library is mostly a port of the Perl library, and owes most of its
54
30
  communication logic to the original Perl version by Richard Clamp.
@@ -62,5 +38,5 @@ favorite language! ;-)
62
38
 
63
39
  == License
64
40
 
65
- This library is distributed under the GPL. Please see the LICENSE file.
41
+ This library is distributed under the GPL. Please see the LICENSE[link://files/LICENSE.html] file.
66
42
 
data/lib/net/daap.rb CHANGED
@@ -1,10 +1,14 @@
1
1
  require 'net/http'
2
2
  require 'digest/m4p'
3
3
  require 'digest/md5'
4
+ require 'logger'
4
5
  require 'net/daap/dmap'
6
+ require 'net/daap/artist'
7
+ require 'net/daap/album'
5
8
  require 'net/daap/song'
6
9
  require 'net/daap/playlist'
7
10
  require 'net/daap/database'
11
+ require 'net/daap/daap_version'
8
12
 
9
13
 
10
14
  module Net
@@ -46,22 +50,29 @@ module Net
46
50
  # and each Database can have many Playlist, and many Song. See DAAP for a
47
51
  # code example.
48
52
  class Client
53
+ attr_accessor :log
49
54
  attr_reader :dmap
50
55
 
51
56
  # Create a new Client and pass in the host where the client will connect.
52
57
  def initialize(server_host)
53
58
  @server_host = server_host
54
59
  @server_port = 3689
55
- @debug = 0
60
+ @validator = nil
61
+ @log = Logger.new(nil)
62
+ @session_id = nil
63
+ @request_id = nil
64
+ yield self if block_given?
56
65
  end
57
66
 
58
67
  # Connects to the iTunes server. This method should be called right after
59
68
  # construction. See DAAP for an example.
60
69
  def connect
70
+ @log.info("Connecting to #{@server_host}:#{@server_port}")
61
71
  @http_client = Net::HTTP.start(@server_host, @server_port)
62
72
  find_validator
63
73
  @dmap = Net::DAAP::DMAP.new(:daap => self)
64
74
  load_server_info
75
+ @log.info("Now connected")
65
76
  @connected = 1
66
77
  if block_given?
67
78
  yield @dsn
@@ -73,15 +84,18 @@ module Net
73
84
 
74
85
  # Returns the databases found on the iTunes server.
75
86
  def databases
76
- return error("Not connected, can't fetch databases") unless @connected
87
+ unless @connected
88
+ errstr = "Not connected, can't fetch databases"
89
+ @log.error(errstr)
90
+ raise errstr
91
+ end
77
92
 
78
93
  listings = @dmap.find(do_get("databases"),
79
94
  "daap.serverdatabases/dmap.listing")
80
95
  # FIXME check the value of listing
81
96
  @databases = []
82
97
  unpack_listing(listings) do |value|
83
- db = Database.new( :db_info => value,
84
- :daap => self )
98
+ db = Database.new( value.merge(:daap => self) )
85
99
  if block_given?
86
100
  yield db
87
101
  else
@@ -92,19 +106,20 @@ module Net
92
106
  end
93
107
 
94
108
  def do_get(request, &block)
95
- debug("do_get")
109
+ @log.debug("do_get called")
96
110
  url = String.new('/' + request)
97
111
  if @session_id
98
112
  url += url =~ /\?/ ? "&" : "?"
99
113
  url += "session-id=#{@session_id}"
100
114
  end
101
115
 
102
- if @revision && request != "logout"
103
- url += "&revision-number=#{@revision}"
104
- end
105
- debug(url)
116
+ #if @revision && request != "logout"
117
+ # url += "&revision-number=#{@revision}"
118
+ #end
119
+ @log.debug("Fetching url: #{url}")
106
120
 
107
121
  res = @http_client.get(url, request_headers(url), nil, &block)
122
+ @log.debug("Done Fetching url: #{url}")
108
123
 
109
124
  content_type = res.header['content-type']
110
125
  if request !~ /(?:\/items\/\d+\.|logout)/ && content_type !~ /dmap/
@@ -115,8 +130,8 @@ module Net
115
130
  end
116
131
 
117
132
  def get_song(request, &block)
118
- @request_id = 1 unless @request_id
119
- @request_id += 1 if @request_id
133
+ @log.debug("Downloading a song")
134
+ @request_id = @request_id.nil? ? 2 : @request_id + 1
120
135
  do_get(request, &block)
121
136
  end
122
137
 
@@ -132,17 +147,19 @@ module Net
132
147
 
133
148
  # Disconnects from the DAAP server
134
149
  def disconnect
150
+ @log.info("Disconnecting")
135
151
  do_get("logout")
136
152
  end
153
+
137
154
  private
138
155
  def load_server_info
139
156
  flat_list = @dmap.flat_list(do_get("server-info"))
140
157
  @dsn = flat_list['/dmap.serverinforesponse/dmap.itemname']
141
158
 
142
- debug("Connected to share '#{@dsn}'")
159
+ @log.debug("Connected to share '#{@dsn}'")
143
160
  @session_id = @dmap.find(do_get("login"),
144
161
  "dmap.loginresponse/dmap.sessionid")
145
- debug("My id is #{@session_id}")
162
+ @log.debug("My id is #{@session_id}")
146
163
  @dsn
147
164
  end
148
165
 
@@ -157,23 +174,20 @@ module Net
157
174
  headers
158
175
  end
159
176
 
177
+ # Figure out what protocol version to use
160
178
  def find_validator
179
+ @log.info("Determining DAAP version")
161
180
  res = @http_client.get('/server-info')
162
181
  server = res.header['daap-server']
163
182
 
164
183
  if server =~ /^iTunes\/4.2/
165
184
  @validator = DAAPv2.new
185
+ @log.info("Found DAAPv2")
166
186
  end
167
187
 
168
188
  if server =~ /^iTunes/
169
189
  @validator = DAAPv3.new
170
- end
171
- end
172
-
173
- def debug(message)
174
- if @debug == 1
175
- print "DEBUG: "
176
- p message
190
+ @log.info("Found DAAPv3")
177
191
  end
178
192
  end
179
193
  end
@@ -0,0 +1,16 @@
1
+ module Net
2
+ module DAAP
3
+ # This class contains album information returned from the DAAP server.
4
+ class Album
5
+ attr_reader :name, :artist, :songs
6
+
7
+ alias :to_s :name
8
+
9
+ def initialize(args)
10
+ @name = args[:name] || args['daap.songalbum']
11
+ @artist = args[:artist]
12
+ @songs = []
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Net
2
+ module DAAP
3
+ # This class contains artist information returned from the DAAP server.
4
+ class Artist
5
+ attr_reader :name, :albums, :songs
6
+
7
+ alias :to_s :name
8
+
9
+ def initialize(args)
10
+ @name = args[:name] || args['daap.songartist']
11
+ @albums = []
12
+ @songs = []
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ # DO NOT EDIT
2
+ # This file is auto-generated by build scripts
3
+ module Net
4
+ module DAAP
5
+ Version = '0.2.0'
6
+ end
7
+ end
@@ -1,30 +1,39 @@
1
+ class Module
2
+ def attr_blockreader(*syms)
3
+ syms.each do |sym|
4
+ class_eval %{ def #{sym.to_s}
5
+ if block_given?
6
+ @#{sym.to_s}.each \{ |s| yield s \}
7
+ end
8
+ @#{sym.to_s}
9
+ end
10
+ }
11
+ end
12
+ end
13
+ end
14
+
1
15
  module Net
2
16
  module DAAP
3
17
  # This class contains a database found on an iTunes server.
4
18
  class Database
5
19
  attr_reader :persistentid, :name, :containercount, :id, :itemcount
6
- attr_reader :playlists, :songs
20
+ attr_blockreader :songs, :artists, :albums
21
+
7
22
  @@SONG_ATTRIBUTES = %w{ dmap.itemid dmap.itemname dmap.persistentid
8
23
  daap.songalbum daap.songartist daap.songformat
9
24
  daap.songsize }
10
25
 
11
26
  def initialize(args)
12
- info = args[:db_info]
13
- @persistentid = info['dmap.persistentid']
14
- @name = info['dmap.itemname']
15
- @containercount = info['dmap.containercount']
16
- @id = info['dmap.itemid']
17
- @itemcount = info['dmap.itemcount']
27
+ @persistentid = args['dmap.persistentid']
28
+ @name = args['dmap.itemname']
29
+ @containercount = args['dmap.containercount']
30
+ @id = args['dmap.itemid']
31
+ @itemcount = args['dmap.itemcount']
18
32
  @daap = args[:daap]
19
- @songs = load_songs
20
- end
21
-
22
- # Returns the songs associated with this database
23
- def songs
24
- if block_given?
25
- @songs.each { |s| yield s }
26
- end
27
- @songs
33
+ @songs = []
34
+ @artists = []
35
+ @albums = []
36
+ load_songs
28
37
  end
29
38
 
30
39
  # Returns the playlists associated with this database
@@ -36,14 +45,13 @@ module Net
36
45
 
37
46
  playlists = []
38
47
  @daap.unpack_listing(listings) do |value|
48
+ playlist = Playlist.new( value.merge(
49
+ :daap => @daap,
50
+ :db => self ))
39
51
  if block_given?
40
- yield Playlist.new( :pl_info => value,
41
- :daap => @daap,
42
- :db => self )
52
+ yield playlist
43
53
  else
44
- playlists << Playlist.new( :pl_info => value,
45
- :daap => @daap,
46
- :db => self )
54
+ playlists << playlist
47
55
  end
48
56
  end
49
57
  playlists
@@ -56,13 +64,32 @@ module Net
56
64
 
57
65
  listings = @daap.dmap.find(@daap.do_get(path),
58
66
  "daap.databasesongs/dmap.listing")
59
- songs = []
67
+ artist_hash = {}
68
+ album_hash = {}
60
69
  @daap.unpack_listing(listings) do |value|
61
- songs << Song.new( :song_info => value,
62
- :daap => @daap,
63
- :db => self )
70
+ artist = artist_hash[value['daap.songartist']] ||= Artist.new(value)
71
+ album = album_hash[value['daap.songalbum']] ||= Album.new(
72
+ :name => value['daap.songalbum'],
73
+ :artist => artist )
74
+
75
+ song = Song.new( value.merge(
76
+ :daap => @daap,
77
+ :db => self,
78
+ :artist => artist,
79
+ :album => album))
80
+
81
+ album.songs << song
82
+ artist.songs << song
83
+ @songs << song
64
84
  end
65
- songs
85
+
86
+ # Add each album to its artist
87
+ album_hash.each_value do |value|
88
+ value.artist.albums << value
89
+ @albums << value
90
+ end
91
+
92
+ artist_hash.each_value { |v| @artists << v }
66
93
  end
67
94
  end
68
95
  end
data/lib/net/daap/dmap.rb CHANGED
@@ -4,8 +4,9 @@ module Net
4
4
  # structures.
5
5
  class DMAP
6
6
  def initialize(args)
7
- @daap = args[:daap]
8
- load_types
7
+ @daap = args[:daap]
8
+ @big_endian = "Ruby".unpack("i")[0] != 2036495698 ? true : false
9
+ @type_to_unpack = find_type
9
10
  update_content_codes
10
11
  end
11
12
 
@@ -24,9 +25,9 @@ module Net
24
25
  end
25
26
 
26
27
  private
27
- def type_to_unpack
28
+ def find_type
28
29
  types = nil
29
- if big_endian?
30
+ if @big_endian
30
31
  types = {
31
32
  1 => 'c',
32
33
  3 => 'S',
@@ -52,11 +53,6 @@ module Net
52
53
  types
53
54
  end
54
55
 
55
- def big_endian?
56
- return @big_endian if @big_endian
57
- @big_endian = "Ruby".unpack("i")[0] != 2036495698 ? true : false
58
- end
59
-
60
56
  def update_content_codes
61
57
  content_codes = unpack(@daap.do_get("content-codes"))
62
58
  mccr = seek(content_codes, "dmap.contentcodesresponse")
@@ -70,10 +66,8 @@ module Net
70
66
  end
71
67
  type = 9 if id == 'mcnm'
72
68
  type = 42 if id == 'pfdt'
73
- @types[id] = { 'NAME' => name, 'ID' => id, 'TYPE' => type }
69
+ @@types[id] = { 'NAME' => name, 'ID' => id, 'TYPE' => type }
74
70
  end
75
- #@types = short
76
- @types
77
71
  end
78
72
 
79
73
  def flat_list_traverse(struct, list = [], prefix = '')
@@ -94,12 +88,10 @@ module Net
94
88
  def unpack(buffer = nil)
95
89
  tags = []
96
90
 
97
- buffer = @code unless buffer
98
-
99
91
  while(buffer.length > 0)
100
92
  tag, len = nil, nil
101
93
 
102
- if big_endian?
94
+ if @big_endian
103
95
  tag, len = buffer.unpack("a4L")
104
96
  else
105
97
  tag, len = buffer.unpack("a4N")
@@ -109,22 +101,22 @@ module Net
109
101
 
110
102
  buffer[0...8+len] = ''
111
103
 
112
- type = @types[tag]['TYPE']
104
+ type = @@types[tag]['TYPE']
113
105
 
114
106
  if type == 12
115
107
  data = unpack(data)
116
108
  elsif type == 7
117
- n1, n2 = big_endian? ? data.unpack("L2") : data.unpack("N2")
109
+ n1, n2 = @big_endian ? data.unpack("L2") : data.unpack("N2")
118
110
  data = n1 << 32
119
111
  data += n2
120
112
  else
121
- data = data.unpack(type_to_unpack()[type])
113
+ data = data.unpack(@type_to_unpack[type])
122
114
  end
123
115
 
124
116
  if data.class == Array && data.length == 1 && data[0].class != Array || type == 11
125
- tmp = [ @types[tag]['NAME'], data[0]]
117
+ tmp = [ @@types[tag]['NAME'], data[0]]
126
118
  else
127
- tmp = [ @types[tag]['NAME'], data]
119
+ tmp = [ @@types[tag]['NAME'], data]
128
120
  end
129
121
 
130
122
  tags << tmp
@@ -148,9 +140,7 @@ module Net
148
140
  return struct
149
141
  end
150
142
 
151
-
152
- def load_types
153
- @types =
143
+ @@types =
154
144
  {
155
145
  'abal' => {
156
146
  'ID' => 'abal',
@@ -598,7 +588,6 @@ module Net
598
588
  'TYPE' => 11
599
589
  }
600
590
  }
601
- end
602
591
  end
603
592
  end
604
593
  end