class OpenRAReplay::Sanitize::PacketSanitizer
Attributes
chat[R]
ip[R]
message[R]
password[R]
ping[R]
player_map[R]
player_name[R]
server_name[R]
time[R]
Public Class Methods
new(options = {})
click to toggle source
# File lib/openrareplay/sanitize/packet_sanitizer.rb, line 29 def initialize(options = {}) @ping = options[:ping] @message = options[:message] @chat = options[:chat] @ip = options[:ip] @time = options[:time] @password = options[:password] @player_name = options[:player_name] @server_name = options[:server_name] @player_map = {} end
Public Instance Methods
sanitize_packet(packet)
click to toggle source
# File lib/openrareplay/sanitize/packet_sanitizer.rb, line 41 def sanitize_packet(packet) return sanitize_packet_metadata(packet) if packet.metadata? return sanitize_packet_normal(packet) unless packet.unknown? packet end
Private Instance Methods
sanitize_ip(object, key)
click to toggle source
# File lib/openrareplay/sanitize/packet_sanitizer.rb, line 112 def sanitize_ip(object, key) object[key]['IpAddress'] = nil if object[key]['IpAddress'] end
sanitize_name(object, key)
click to toggle source
# File lib/openrareplay/sanitize/packet_sanitizer.rb, line 116 def sanitize_name(object, key) return unless !object[key]['IsBot'] && object[key]['Name'] unless player_map[object[key]['Name']] @player_map[object[key]['Name']] = "Player #{player_map.length + 1}" end object[key]['Name'] = player_map[object[key]['Name']] end
sanitize_order(order)
click to toggle source
# File lib/openrareplay/sanitize/packet_sanitizer.rb, line 73 def sanitize_order(order) return order unless order.command.match('Sync') || order.command.match('Handshake') object = OpenRAReplay::MiniYaml.load order.data sanitize_password object if password sanitize_server_name object if server_name object.each_key do |key| next unless key == 'Client' || key =~ /^Client@\d+$/ sanitize_name object, key if player_name sanitize_ip object, key if ip end order.class.new( command: order.command, data: OpenRAReplay::MiniYaml.dump(object) ) end
sanitize_packet_metadata(packet)
click to toggle source
# File lib/openrareplay/sanitize/packet_sanitizer.rb, line 49 def sanitize_packet_metadata(packet) object = OpenRAReplay::MiniYaml.load(packet.data) time_placeholder = sanitize_time_packet object if time object.each_key do |key| player = key.match(/^Player@(\d+)$/) next unless player sanitize_time_player object, key, time_placeholder if time sanitize_name object, key if player_name end packet.class.new(data: OpenRAReplay::MiniYaml.dump(object)) end
sanitize_packet_normal(packet)
click to toggle source
# File lib/openrareplay/sanitize/packet_sanitizer.rb, line 61 def sanitize_packet_normal(packet) packet.class.new( client_id: packet.client_id, frame: packet.frame, orders: packet.orders.reject do |o| (ping && (o.command.match('Ping') || o.command == 'Pong')) || (message && o.command == 'Message') || (chat && (o.command == 'Chat') || o.command == 'TeamChat') end.map { |o| sanitize_order o } ) end
sanitize_password(object)
click to toggle source
# File lib/openrareplay/sanitize/packet_sanitizer.rb, line 104 def sanitize_password(object) object['Handshake']['Password'] = nil if object['Handshake'] && object['Handshake']['Password'] end
sanitize_server_name(object)
click to toggle source
# File lib/openrareplay/sanitize/packet_sanitizer.rb, line 108 def sanitize_server_name(object) object['GlobalSettings']['ServerName'] = nil if object['GlobalSettings'] && object['GlobalSettings']['ServerName'] end
sanitize_time_packet(object)
click to toggle source
# File lib/openrareplay/sanitize/packet_sanitizer.rb, line 90 def sanitize_time_packet(object) start_time = OpenRAReplay::MiniYaml.load_time(object['Root']['StartTimeUtc']) epoch = Time.at(0).utc start_time = start_time.to_i stop_time = OpenRAReplay::MiniYaml.load_time(object['Root']['EndTimeUtc']) - start_time object['Root']['StartTimeUtc'] = OpenRAReplay::MiniYaml.dump_time(epoch) object['Root']['EndTimeUtc'] = OpenRAReplay::MiniYaml.dump_time(stop_time) start_time end
sanitize_time_player(object, key, start_time)
click to toggle source
# File lib/openrareplay/sanitize/packet_sanitizer.rb, line 100 def sanitize_time_player(object, key, start_time) object[key]['OutcomeTimestampUtc'] = OpenRAReplay::MiniYaml.dump_time(OpenRAReplay::MiniYaml.load_time(object[key]['OutcomeTimestampUtc']) - start_time) end