Class: SFO

Inherits:
Object
  • Object
show all
Defined in:
lib/SFO.rb

Defined Under Namespace

Classes: Attribute, Attribute2, Header, SFO, Sfo_index_table_entry

Class Method Summary collapse

Class Method Details

.disp_as_hex(item) ⇒ Object



33
34
35
# File 'lib/SFO.rb', line 33

def self.disp_as_hex(item)
  item.to_binary_s.reverse.unpack('H*')[0]
end

.parse_sfo(stream) ⇒ Object

Takes a stream as an argument



135
136
137
138
139
140
141
142
143
144
145
# 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) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 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