Module: SteamPacketFactory

Included in:
RCONPacketFactory
Defined in:
lib/steam/packets/steam_packet_factory.rb

Class Method Summary collapse

Class Method Details

.packet_from_data(raw_data) ⇒ Object

Creates a new packet object based on the header byte of the given raw data



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/steam/packets/steam_packet_factory.rb', line 27

def self.packet_from_data(raw_data)
  header = raw_data[0].ord
  data = raw_data[1..-1]

  case header
    when SteamPacket::S2A_INFO_DETAILED_HEADER
      return S2A_INFO_DETAILED_Packet.new(data)
    when SteamPacket::A2S_INFO_HEADER
      return A2S_INFO_Packet.new
    when SteamPacket::S2A_INFO2_HEADER
      return S2A_INFO2_Packet.new(data)
    when SteamPacket::A2A_PING_HEADER
      return A2A_PING_Packet.new
    when SteamPacket::A2A_ACK_HEADER
      return A2A_ACK_Packet.new(data)
    when SteamPacket::A2S_PLAYER_HEADER
      return A2S_PLAYER_Packet.new
    when SteamPacket::S2A_PLAYER_HEADER
      return S2A_PLAYER_Packet.new(data)
    when SteamPacket::A2S_RULES_HEADER
      return A2S_RULES_Packet
    when SteamPacket::S2A_RULES_HEADER
      return S2A_RULES_Packet.new(data)
    when SteamPacket::A2S_SERVERQUERY_GETCHALLENGE_HEADER
      return A2S_SERVERQUERY_GETCHALLENGE_Packet.new
    when SteamPacket::S2C_CHALLENGE_HEADER
      return S2C_CHALLENGE_Packet.new(data)
    when SteamPacket::A2M_GET_SERVERS_BATCH2_HEADER
      return A2M_GET_SERVERS_BATCH2_Packet.new(data)
    when SteamPacket::M2A_SERVER_BATCH_HEADER
      return M2A_SERVER_BATCH_Packet.new(data)
    when SteamPacket::RCON_GOLDSRC_CHALLENGE_HEADER,
         SteamPacket::RCON_GOLDSRC_NO_CHALLENGE_HEADER,
         SteamPacket::RCON_GOLDSRC_RESPONSE_HEADER
      return RCONGoldSrcResponse.new(data)
    else
      raise SteamCondenserException.new("Unknown packet with header 0x#{header.to_s(16)} received.")
  end
end

.reassemble_packet(split_packets, is_compressed = false, packet_checksum = 0) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/steam/packets/steam_packet_factory.rb', line 67

def self.reassemble_packet(split_packets, is_compressed = false, packet_checksum = 0)
  packet_data = split_packets.join ''

  if is_compressed
    begin
      require 'bz2'
      packet_data = BZ2.uncompress(packet_data)
    rescue LoadError
      raise SteamCondenserException.new('You need to install the libbzip2 interface for Ruby.')
    end

    unless Zlib.crc32(packet_data) == packet_checksum
      raise PacketFormatException.new('CRC32 checksum mismatch of uncompressed packet data.')
    end
  end

  packet_from_data packet_data[4..-1]
end