Class: Idevice::RestoreClient

Inherits:
C::ManagedOpaquePointer show all
Defined in:
lib/idevice/restore.rb

Overview

Used to initiate the device restore process or reboot a device.

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from C::ManagedOpaquePointer

#initialize

Constructor Details

This class inherits a constructor from Idevice::C::ManagedOpaquePointer

Class Method Details

.attach(opts = {}) ⇒ Object


40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/idevice/restore.rb', line 40

def self.attach(opts={})
  idevice = opts[:idevice] || Idevice.attach(opts)
  label = opts[:label] || "ruby-idevice"

  FFI::MemoryPointer.new(:pointer) do |p_rc|
    err = C.restored_client_new(idevice, p_rc, label)
    raise RestoreErrror, "Restore Error: #{err}" if err != :SUCCESS

    rc = p_rc.read_pointer
    raise NPError, "restore_client_new returned a NULL client" if rc.null?
    return new(rc)
  end
end

.release(ptr) ⇒ Object


32
33
34
35
36
37
38
# File 'lib/idevice/restore.rb', line 32

def self.release(ptr)
  C::Freelock.synchronize do
    unless ptr.null?
      C.restored_client_free(ptr)
    end
  end
end

Instance Method Details

#get_value(key) ⇒ Object


88
89
90
91
92
93
94
# File 'lib/idevice/restore.rb', line 88

def get_value(key)
  FFI::MemoryPointer.new(:pointer) do |p_value|
    err = C.restored_get_value(self, key, p_value)
    raise RestoreErrror, "Restore Error: #{err}" if err != :SUCCESS
    return p_value.read_pointer.read_plist_t
  end
end

#goodbyeObject

Raises:


54
55
56
57
58
59
# File 'lib/idevice/restore.rb', line 54

def goodbye
  err = C.restored_goodbye(self)
  raise RestoreErrror, "Restore Error: #{err}" if err != :SUCCESS

  return true
end

#query_typeObject


61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/idevice/restore.rb', line 61

def query_type
  FFI::MemoryPointer.new(:pointer) do |p_type|
    FFI::MemoryPointer.new(:uint64) do |p_vers|
      err = C.restored_query_type(self, p_type, p_vers)
      raise RestoreErrror, "Restore Error: #{err}" if err != :SUCCESS

      type = p_type.read_pointer
      raise RestoreErrror, "restored_query_type returned a null type" if type.null?
      result = {
        type: type.read_string,
        version: p_vers.read_uint64,
      }
      C.free(type)
      return result
    end
  end
end

#query_value(key) ⇒ Object


79
80
81
82
83
84
85
86
# File 'lib/idevice/restore.rb', line 79

def query_value(key)
  FFI::MemoryPointer.new(:pointer) do |p_value|
    err = C.restored_query_value(self, key, p_value)
    raise RestoreErrror, "Restore Error: #{err}" if err != :SUCCESS

    return p_value.read_pointer.read_plist_t
  end
end

#rebootObject

Raises:


117
118
119
120
121
122
# File 'lib/idevice/restore.rb', line 117

def reboot
  err = C.restored_reboot(self)
  raise RestoreErrror, "Restore Error: #{err}" if err != :SUCCESS

  return true
end

#receive_plistObject


102
103
104
105
106
107
108
# File 'lib/idevice/restore.rb', line 102

def receive_plist
  FFI::MemoryPointer.new(:pointer) do |p_value|
    err = C.restored_receive(self, p_value)
    raise RestoreErrror, "Restore Error: #{err}" if err != :SUCCESS
    return p_value.read_pointer.read_plist_t
  end
end

#send_plist(dict) ⇒ Object

Raises:


96
97
98
99
100
# File 'lib/idevice/restore.rb', line 96

def send_plist(dict)
  err = C.restored_send(self, Plist_t.from_ruby(hash))
  raise RestoreErrror, "Restore Error: #{err}" if err != :SUCCESS

end

#set_label(label) ⇒ Object


124
125
126
127
# File 'lib/idevice/restore.rb', line 124

def set_label(label)
  C.restored_client_set_label(self, label)
  return true
end

#start_restore(version, options = {}) ⇒ Object

Raises:


110
111
112
113
114
115
# File 'lib/idevice/restore.rb', line 110

def start_restore(version, options={})
  err = C.restored_start_restore(self, Plist_t.from_ruby(options), version)
  raise RestoreErrror, "Restore Error: #{err}" if err != :SUCCESS

  return true
end