steam-condenser 0.10.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/VERSION.yml +2 -2
  2. data/lib/datagram_channel.rb +30 -33
  3. data/lib/exceptions/packet_format_exception.rb +7 -3
  4. data/lib/exceptions/rcon_ban_exception.rb +7 -5
  5. data/lib/exceptions/rcon_no_auth_exception.rb +8 -6
  6. data/lib/exceptions/timeout_exception.rb +10 -4
  7. data/lib/socket_channel.rb +11 -17
  8. data/lib/steam/community/cacheable.rb +5 -7
  9. data/lib/steam/community/css/css_map.rb +31 -0
  10. data/lib/steam/community/css/css_stats.rb +116 -0
  11. data/lib/steam/community/css/css_weapon.rb +33 -0
  12. data/lib/steam/community/dods/dods_stats.rb +3 -3
  13. data/lib/steam/community/game_stats.rb +14 -13
  14. data/lib/steam/community/game_weapon.rb +3 -5
  15. data/lib/steam/community/l4d/abstract_l4d_stats.rb +4 -2
  16. data/lib/steam/community/l4d/l4d_explosive.rb +2 -2
  17. data/lib/steam/community/l4d/l4d_map.rb +3 -3
  18. data/lib/steam/community/steam_group.rb +2 -4
  19. data/lib/steam/community/steam_id.rb +2 -2
  20. data/lib/steam/community/tf2/tf2_class.rb +17 -17
  21. data/lib/steam/community/tf2/tf2_class_factory.rb +17 -17
  22. data/lib/steam/community/tf2/tf2_engineer.rb +9 -9
  23. data/lib/steam/community/tf2/tf2_medic.rb +9 -9
  24. data/lib/steam/community/tf2/tf2_sniper.rb +7 -7
  25. data/lib/steam/community/tf2/tf2_spy.rb +9 -9
  26. data/lib/steam/community/tf2/tf2_stats.rb +9 -9
  27. data/lib/steam/packets/a2a_ack_packet.rb +11 -9
  28. data/lib/steam/packets/a2a_ping_packet.rb +5 -4
  29. data/lib/steam/packets/a2m_get_servers_batch2_packet.rb +13 -12
  30. data/lib/steam/packets/a2s_info_packet.rb +8 -7
  31. data/lib/steam/packets/a2s_player_packet.rb +6 -6
  32. data/lib/steam/packets/a2s_rules_packet.rb +5 -5
  33. data/lib/steam/packets/a2s_serverquery_getchallenge_packet.rb +4 -3
  34. data/lib/steam/packets/m2a_server_batch_packet.rb +20 -22
  35. data/lib/steam/packets/rcon/rcon_auth_request.rb +5 -5
  36. data/lib/steam/packets/rcon/rcon_auth_response.rb +6 -6
  37. data/lib/steam/packets/rcon/rcon_exec_request.rb +5 -5
  38. data/lib/steam/packets/rcon/rcon_exec_response.rb +2 -2
  39. data/lib/steam/packets/rcon/rcon_goldsrc_request.rb +7 -7
  40. data/lib/steam/packets/rcon/rcon_goldsrc_response.rb +8 -8
  41. data/lib/steam/packets/rcon/rcon_packet.rb +12 -16
  42. data/lib/steam/packets/rcon/rcon_packet_factory.rb +19 -19
  43. data/lib/steam/packets/request_with_challenge.rb +5 -5
  44. data/lib/steam/packets/s2a_info2_packet.rb +28 -30
  45. data/lib/steam/packets/s2a_info_base_packet.rb +11 -16
  46. data/lib/steam/packets/s2a_info_detailed_packet.rb +30 -28
  47. data/lib/steam/packets/s2a_player_packet.rb +7 -9
  48. data/lib/steam/packets/s2a_rules_packet.rb +8 -12
  49. data/lib/steam/packets/s2c_challenge_packet.rb +7 -6
  50. data/lib/steam/packets/steam_packet.rb +7 -6
  51. data/lib/steam/packets/steam_packet_factory.rb +37 -38
  52. data/lib/steam/servers/game_server.rb +76 -86
  53. data/lib/steam/servers/goldsrc_server.rb +5 -5
  54. data/lib/steam/servers/master_server.rb +24 -24
  55. data/lib/steam/servers/source_server.rb +17 -19
  56. data/lib/steam/sockets/goldsrc_socket.rb +43 -46
  57. data/lib/steam/sockets/master_server_socket.rb +11 -13
  58. data/lib/steam/sockets/rcon_socket.rb +15 -17
  59. data/lib/steam/sockets/source_socket.rb +21 -21
  60. data/lib/steam/sockets/steam_socket.rb +25 -28
  61. data/lib/steam/steam_player.rb +3 -1
  62. data/lib/stringio_additions.rb +48 -0
  63. data/test/datagram_channel_tests.rb +8 -8
  64. data/test/query_tests.rb +15 -14
  65. data/test/rcon_tests.rb +32 -31
  66. data/test/socket_channel_tests.rb +7 -7
  67. data/test/steam/communtiy/steam_community_test_suite.rb +5 -2
  68. data/test/steam_community_tests.rb +4 -3
  69. data/test/stringio_additions_tests.rb +77 -0
  70. metadata +15 -8
  71. data/lib/byte_buffer.rb +0 -126
  72. data/lib/exceptions/buffer_underflow_exception.rb +0 -8
  73. data/test/byte_buffer_tests.rb +0 -76
@@ -1,14 +1,14 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2008-2009, Sebastian Staudt
4
+ # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
6
  # This module implements a to_s method for request packets which send a challenge number
7
7
  module RequestWithChallenge
8
-
8
+
9
9
  # Returns a packed version of the request
10
10
  def to_s
11
- return [0xFF, 0xFF, 0xFF, 0xFF, @header_data, @content_data.array.to_i].pack("c5l")
11
+ [0xFF, 0xFF, 0xFF, 0xFF, @header_data, @content_data.data.to_i].pack('c5l')
12
12
  end
13
-
14
- end
13
+
14
+ end
@@ -1,50 +1,48 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2008-2009, Sebastian Staudt
4
+ # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
- require "steam/packets/s2a_info_base_packet"
6
+ require 'steam/packets/s2a_info_base_packet'
7
7
 
8
8
  # The S2A_INFO2_Packet class represents the response to a A2A_INFO
9
9
  # request send to a Source server.
10
10
  class S2A_INFO2_Packet < S2A_INFO_BasePacket
11
-
11
+
12
12
  # Creates a S2A_INFO2 response object based on the data received.
13
13
  def initialize(data)
14
14
  super SteamPacket::S2A_INFO2_HEADER, data
15
-
16
- @protocol_version = @content_data.get_byte
17
- @server_name = @content_data.get_string
18
- @map_name = @content_data.get_string
19
- @game_directory = @content_data.get_string
20
- @game_description = @content_data.get_string
21
- @app_id = @content_data.get_short
22
- @number_of_players = @content_data.get_byte
23
- @max_players = @content_data.get_byte
24
- @number_of_bots = @content_data.get_byte
25
- @dedicated = @content_data.get_byte.chr
26
- @operating_system = @content_data.get_byte.chr
27
- @password_needed = @content_data.get_byte == 1
28
- @secure = @content_data.get_byte == 1
29
- @game_version = @content_data.get_string
30
- extra_data_flag = @content_data.get_byte
31
-
32
- unless extra_data_flag & 0x80 == 0
33
- @server_port = @content_data.get_short
34
- end
15
+
16
+ @protocol_version = @content_data.byte
17
+ @server_name = @content_data.string
18
+ @map_name = @content_data.string
19
+ @game_directory = @content_data.string
20
+ @game_description = @content_data.string
21
+ @app_id = @content_data.short
22
+ @number_of_players = @content_data.byte
23
+ @max_players = @content_data.byte
24
+ @number_of_bots = @content_data.byte
25
+ @dedicated = @content_data.byte.chr
26
+ @operating_system = @content_data.byte.chr
27
+ @password_needed = @content_data.byte == 1
28
+ @secure = @content_data.byte == 1
29
+ @game_version = @content_data.string
30
+ extra_data_flag = @content_data.byte
31
+
32
+ @server_port = @content_data.short unless extra_data_flag & 0x80 == 0
35
33
 
36
34
  unless extra_data_flag & 0x10 == 0
37
- @server_id = @content_data.get_long | (@content_data.get_long << 32)
35
+ @server_id = @content_data.long | (@content_data.long << 32)
38
36
  end
39
37
 
40
38
  unless extra_data_flag & 0x40 == 0
41
- @tv_port = @content_data.get_short
42
- @tv_name = @content_data.get_string
39
+ @tv_port = @content_data.short
40
+ @tv_name = @content_data.string
43
41
  end
44
42
 
45
- unless extra_data_flag & 0x20 == 0
46
- @server_tags = @content_data.get_string
47
- end
43
+ @server_tags = @content_data.string unless extra_data_flag & 0x20 == 0
44
+
45
+ generate_info_hash
48
46
  end
49
-
47
+
50
48
  end
@@ -1,31 +1,26 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2008-2009, Sebastian Staudt
4
+ # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
- require "abstract_class"
7
- require "steam/packets/steam_packet"
6
+ require 'abstract_class'
7
+ require 'steam/packets/steam_packet'
8
8
 
9
9
  # The S2A_INFO_BasePacket class represents the response to a A2S_INFO
10
10
  # request send to the server.
11
11
  class S2A_INFO_BasePacket < SteamPacket
12
-
12
+
13
13
  include AbstractClass
14
-
15
- # Creates a S2A_INFO[...] response object based on the data received.
16
- def initialize(header, data)
17
- super header, data
18
- end
19
-
14
+
15
+ attr_reader :info_hash
16
+
20
17
  # Returns the hash containing information on the server
21
- public
22
- def get_info_hash
23
- return Hash[
18
+ def generate_info_hash
19
+ @info_hash = Hash[
24
20
  *instance_variables.map { |var|
25
- if var != "@content_data" && var != "@header_data"
26
- [var[1..-1], instance_variable_get(var)]
27
- end
21
+ [var[1..-1], instance_variable_get(var)] if var != '@content_data' && var != '@header_data'
28
22
  }.compact.flatten
29
23
  ]
30
24
  end
25
+
31
26
  end
@@ -1,7 +1,7 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2008-2009, Sebastian Staudt
4
+ # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
6
  require "steam/packets/s2a_info_base_packet"
7
7
 
@@ -10,41 +10,43 @@ require "steam/packets/s2a_info_base_packet"
10
10
  # This is deprecated by 10/24/2008 for GoldSrc servers. They use the same
11
11
  # format as Source servers (S2A_INFO2) now.
12
12
  class S2A_INFO_DETAILED_Packet < S2A_INFO_BasePacket
13
-
13
+
14
14
  # Creates a S2A_INFO_DETAILED response object based on the data received.
15
15
  def initialize(data)
16
16
  super SteamPacket::S2A_INFO_DETAILED_HEADER, data
17
17
 
18
- @game_ip = @content_data.get_string
19
- @server_name = @content_data.get_string
20
- @map_name = @content_data.get_string
21
- @game_directory = @content_data.get_string
22
- @game_description = @content_data.get_string
23
- @number_of_players = @content_data.get_byte
24
- @max_players = @content_data.get_byte
25
- @network_version = @content_data.get_byte
26
- @dedicated = @content_data.get_byte.chr
27
- @operating_system = @content_data.get_byte.chr
28
- @password_needed = @content_data.get_byte == 1
29
- @is_mod = @content_data.get_byte == 1
30
-
18
+ @game_ip = @content_data.string
19
+ @server_name = @content_data.string
20
+ @map_name = @content_data.string
21
+ @game_directory = @content_data.string
22
+ @game_description = @content_data.string
23
+ @number_of_players = @content_data.byte
24
+ @max_players = @content_data.byte
25
+ @network_version = @content_data.byte
26
+ @dedicated = @content_data.byte.chr
27
+ @operating_system = @content_data.byte.chr
28
+ @password_needed = @content_data.byte == 1
29
+ @is_mod = @content_data.byte == 1
30
+
31
31
  if @is_mod
32
- @mod_info = Hash.new
33
- @mod_info["url_info"] = @content_data.get_string
34
- @mod_info["url_dl"] = @content_data.get_string
35
- @content_data.get_byte
32
+ @mod_info = {}
33
+ @mod_info['url_info'] = @content_data.string
34
+ @mod_info['url_dl'] = @content_data.string
35
+ @content_data.byte
36
36
  if @content_data.remaining == 12
37
- @mod_info["mod_version"] = @content_data.get_long
38
- @mod_info["mod_size"] = @content_data.get_long
39
- @mod_info["sv_only"] = @content_data.get_byte == 1
40
- @mod_info["cl_dll"] = @content_data.get_byte == 1
41
- @secure = @content_data.get_byte == 1
42
- @number_of_bots = @content_data.get_byte
37
+ @mod_info['mod_version'] = @content_data.long
38
+ @mod_info['mod_size'] = @content_data.long
39
+ @mod_info['sv_only'] = @content_data.byte == 1
40
+ @mod_info['cl_dll'] = @content_data.byte == 1
41
+ @secure = @content_data.byte == 1
42
+ @number_of_bots = @content_data.byte
43
43
  end
44
44
  else
45
- @secure = @content_data.get_byte == 1
46
- @number_of_bots = @content_data.get_byte
45
+ @secure = @content_data.byte == 1
46
+ @number_of_bots = @content_data.byte
47
47
  end
48
+
49
+ generate_info_hash
48
50
  end
49
-
51
+
50
52
  end
@@ -1,30 +1,28 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2008-2009, Sebastian Staudt
4
+ # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
- require "steam/packets/steam_packet"
6
+ require 'steam/packets/steam_packet'
7
7
 
8
8
  # The S2A_PLAYER_Packet class represents the response to a A2S_PLAYER
9
9
  # request send to the server.
10
10
  class S2A_PLAYER_Packet < SteamPacket
11
11
 
12
12
  attr_reader :player_hash
13
-
13
+
14
14
  # Creates a S2A_PLAYER response object based on the data received.
15
15
  def initialize(content_data)
16
- if content_data == nil
17
- raise Exception.new("Wrong formatted S2A_PLAYER packet.")
18
- end
19
-
16
+ raise Exception.new('Wrong formatted S2A_PLAYER packet.') if content_data.nil?
17
+
20
18
  super SteamPacket::S2A_PLAYER_HEADER, content_data
21
19
 
22
20
  # Ignore player count
23
- @content_data.get_byte
21
+ @content_data.byte
24
22
  @player_hash = {}
25
23
 
26
24
  while @content_data.remaining > 0
27
- player_data = @content_data.get_byte, @content_data.get_string, @content_data.get_signed_long, @content_data.get_float
25
+ player_data = @content_data.byte, @content_data.string, @content_data.signed_long, @content_data.float
28
26
  @player_hash[player_data[1]] = SteamPlayer.new(*player_data[0..3])
29
27
  end
30
28
  end
@@ -1,29 +1,29 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2008-2009, Sebastian Staudt
4
+ # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
- require "steam/packets/steam_packet"
6
+ require 'steam/packets/steam_packet'
7
7
 
8
8
  # The S2A_RULES_Packet class represents the response to a A2S_RULES
9
9
  # request send to the server.
10
10
  class S2A_RULES_Packet < SteamPacket
11
11
 
12
+ attr_reader :rules_hash
13
+
12
14
  # Creates a S2A_RULES response object based on the data received.
13
15
  def initialize(content_data)
14
- if content_data == nil
15
- raise Exception.new("Wrong formatted A2A_RULES response packet.")
16
- end
16
+ raise Exception.new('Wrong formatted A2A_RULES response packet.') if content_data.nil?
17
17
 
18
18
  super SteamPacket::S2A_RULES_HEADER, content_data
19
19
 
20
- rules_count = @content_data.get_short
20
+ rules_count = @content_data.short
21
21
 
22
22
  @rules_hash = {}
23
23
 
24
24
  rules_count.times do
25
- rule = @content_data.get_string
26
- value = @content_data.get_string
25
+ rule = @content_data.string
26
+ value = @content_data.string
27
27
 
28
28
  # This is a workaround for servers sending corrupt replies
29
29
  break if rule.empty? or value.empty?
@@ -32,8 +32,4 @@ class S2A_RULES_Packet < SteamPacket
32
32
  end
33
33
  end
34
34
 
35
- # Returns the hash containing the server rules
36
- def get_rules_hash
37
- return @rules_hash
38
- end
39
35
  end
@@ -1,21 +1,22 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2008-2009, Sebastian Staudt
4
+ # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
- require "steam/packets/steam_packet"
6
+ require 'steam/packets/steam_packet'
7
7
 
8
8
  # The S2C_CHALLENGE_Packet class represents the response
9
9
  # to a A2S_SERVERQUERY_GETCHALLENGE request send to the server.
10
10
  class S2C_CHALLENGE_Packet < SteamPacket
11
-
11
+
12
12
  # Creates a AS2C_CHALLENGE response object based on the data received.
13
13
  def initialize(challenge_number)
14
14
  super S2C_CHALLENGE_HEADER, challenge_number
15
15
  end
16
-
16
+
17
17
  # Returns the challenge number received from the server
18
- def get_challenge_number
19
- return @content_data.rewind.get_long
18
+ def challenge_number
19
+ @content_data.rewind
20
+ @content_data.long
20
21
  end
21
22
  end
@@ -3,6 +3,8 @@
3
3
  #
4
4
  # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
+ require 'stringio_additions'
7
+
6
8
  # This class represents a packet used by the Source query protocol
7
9
  class SteamPacket
8
10
 
@@ -25,15 +27,14 @@ class SteamPacket
25
27
  S2C_CHALLENGE_HEADER = 0x41
26
28
 
27
29
  # Creates a new SteamPacket object with given header and content data
28
- def initialize(header_data, content_data = "")
29
- @content_data = ByteBuffer.new content_data
30
- @header_data = header_data
30
+ def initialize(header_data, content_data = '')
31
+ @content_data = StringIO.new content_data.to_s
32
+ @header_data = header_data
31
33
  end
32
34
 
33
35
  # Returns a packed string representing the packet's data
34
36
  def to_s
35
- packet_data = [0xFF, 0xFF, 0xFF, 0xFF].pack("cccc")
36
-
37
- return packet_data << [@header_data, @content_data.array].pack("ca*")
37
+ [0xFF, 0xFF, 0xFF, 0xFF, @header_data, @content_data.data].pack('c5a*')
38
38
  end
39
+
39
40
  end
@@ -1,40 +1,41 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under the
2
2
  # terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2008-2009, Sebastian Staudt
4
+ # Copyright (c) 2008-2010, Sebastian Staudt
5
5
 
6
6
  require 'zlib'
7
7
 
8
- require "abstract_class"
9
- require "steam/packets/s2a_info_detailed_packet"
10
- require "steam/packets/a2s_info_packet"
11
- require "steam/packets/s2a_info2_packet"
12
- require "steam/packets/a2a_ping_packet"
13
- require "steam/packets/a2a_ack_packet"
14
- require "steam/packets/a2s_player_packet"
15
- require "steam/packets/s2a_player_packet"
16
- require "steam/packets/a2s_rules_packet"
17
- require "steam/packets/s2a_rules_packet"
18
- require "steam/packets/a2s_serverquery_getchallenge_packet"
19
- require "steam/packets/s2c_challenge_packet"
20
- require "steam/packets/a2m_get_servers_batch2_packet"
21
- require "steam/packets/m2a_server_batch_packet"
22
- require "steam/packets/rcon/rcon_goldsrc_response"
8
+ require 'abstract_class'
9
+ require 'exceptions/steam_condenser_exception'
10
+ require 'steam/packets/s2a_info_detailed_packet'
11
+ require 'steam/packets/a2s_info_packet'
12
+ require 'steam/packets/s2a_info2_packet'
13
+ require 'steam/packets/a2a_ping_packet'
14
+ require 'steam/packets/a2a_ack_packet'
15
+ require 'steam/packets/a2s_player_packet'
16
+ require 'steam/packets/s2a_player_packet'
17
+ require 'steam/packets/a2s_rules_packet'
18
+ require 'steam/packets/s2a_rules_packet'
19
+ require 'steam/packets/a2s_serverquery_getchallenge_packet'
20
+ require 'steam/packets/s2c_challenge_packet'
21
+ require 'steam/packets/a2m_get_servers_batch2_packet'
22
+ require 'steam/packets/m2a_server_batch_packet'
23
+ require 'steam/packets/rcon/rcon_goldsrc_response'
23
24
 
24
25
  class SteamPacketFactory
25
-
26
+
26
27
  include AbstractClass
27
-
28
+
28
29
  # Creates a new packet object based on the header byte of the given raw data
29
- def self.get_packet_from_data(raw_data)
30
- header = raw_data[0].to_i;
31
- data = raw_data[1..-1];
32
-
30
+ def self.packet_from_data(raw_data)
31
+ header = raw_data[0].to_i
32
+ data = raw_data[1..-1]
33
+
33
34
  case header
34
35
  when SteamPacket::S2A_INFO_DETAILED_HEADER
35
36
  return S2A_INFO_DETAILED_Packet.new(data)
36
37
  when SteamPacket::A2S_INFO_HEADER
37
- return A2S_INFO_Packet.new;
38
+ return A2S_INFO_Packet.new
38
39
  when SteamPacket::S2A_INFO2_HEADER
39
40
  return S2A_INFO2_Packet.new(data)
40
41
  when SteamPacket::A2A_PING_HEADER
@@ -54,7 +55,7 @@ class SteamPacketFactory
54
55
  when SteamPacket::S2C_CHALLENGE_HEADER
55
56
  return S2C_CHALLENGE_Packet.new(data)
56
57
  when SteamPacket::A2M_GET_SERVERS_BATCH2_HEADER
57
- return A2M_GET_SERVERS_BATCH2.new(data)
58
+ return A2M_GET_SERVERS_BATCH2_Packet.new(data)
58
59
  when SteamPacket::M2A_SERVER_BATCH_HEADER
59
60
  return M2A_SERVER_BATCH_Packet.new(data)
60
61
  when SteamPacket::RCON_GOLDSRC_CHALLENGE_HEADER,
@@ -62,29 +63,27 @@ class SteamPacketFactory
62
63
  SteamPacket::RCON_GOLDSRC_RESPONSE_HEADER
63
64
  return RCONGoldSrcResponse.new(data)
64
65
  else
65
- raise Exception.new("Unknown packet with header 0x#{header.to_s 16} received.")
66
+ raise SteamCondenserException.new("Unknown packet with header 0x#{header.to_s(16)} received.")
66
67
  end
67
68
  end
68
-
69
+
69
70
  def self.reassemble_packet(split_packets, is_compressed = false, packet_checksum = 0)
70
- packet_data = split_packets.join ""
71
-
71
+ packet_data = split_packets.join ''
72
+
72
73
  if is_compressed
73
74
  begin
74
75
  require 'bz2'
75
76
  packet_data = BZ2.uncompress(packet_data)
76
77
  rescue LoadError
77
- raise SteamCondenserException.new("You need to install the libbzip2 interface for Ruby.")
78
+ raise SteamCondenserException.new('You need to install the libbzip2 interface for Ruby.')
78
79
  end
79
-
80
- if Zlib.crc32(packet_data) != packet_checksum
81
- raise PacketFormatException.new("CRC32 checksum mismatch of uncompressed packet data.")
80
+
81
+ unless Zlib.crc32(packet_data) == packet_checksum
82
+ raise PacketFormatException.new('CRC32 checksum mismatch of uncompressed packet data.')
82
83
  end
83
84
  end
84
-
85
- packet_data = packet_data[4..-1]
86
-
87
- return self.get_packet_from_data(packet_data)
85
+
86
+ packet_from_data packet_data[4..-1]
88
87
  end
89
-
90
- end
88
+
89
+ end