class SFO

Public Class Methods

disp_as_hex(item) click to toggle source
# File lib/SFO.rb, line 33
def self.disp_as_hex(item)
  item.to_binary_s.reverse.unpack('H*')[0]
end
parse_sfo(stream) click to toggle source

Takes a stream as an argument

# File lib/SFO.rb, line 135
def self.parse_sfo(stream)
  sfo = SFO.read(stream)
  unless sfo.header.magic == 1179865088
    return nil
  end
  sfoHash = Hash[sfo.key_table.zip(sfo.data_table)].inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
  sfoHash.each_key do |key|
    sfoHash[key] = transform_data(key,sfoHash[key])
  end
  sfoHash
end
transform_data(key,data) click to toggle source
# File lib/SFO.rb, line 4
def self.transform_data(key,data)
  case key
  when :SYSTEM_VER
    disp_as_hex data
  when :PUBTOOLVER
    disp_as_hex data
  when :REMOTE_PLAY_KEY_ASSIGN
    disp_as_hex data
  when :DOWNLOAD_DATA_SIZE
    disp_as_hex data
  when :APP_TYPE
    disp_as_hex data
  when :PARENTAL_LEVEL
    disp_as_hex data
  when :PT_PARAM
    disp_as_hex data
  when :DEV_FLAG
    disp_as_hex data
  when :PUBTOOLMINVER
    disp_as_hex data
  when :ATTRIBUTE
    Attribute.read(data.to_binary_s.reverse)
  when :ATTRIBUTE2
    Attribute2.read(data.to_binary_s.reverse)
  else
    data.to_binary_s.strip
  end
end