misagent.pxi 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. cdef extern from "libimobiledevice/misagent.h":
  2. cdef struct misagent_client_private:
  3. pass
  4. ctypedef misagent_client_private *misagent_client_t
  5. ctypedef enum misagent_error_t:
  6. MISAGENT_E_SUCCESS = 0
  7. MISAGENT_E_INVALID_ARG = -1
  8. MISAGENT_E_PLIST_ERROR = -2
  9. MISAGENT_E_CONN_FAILED = -3
  10. MISAGENT_E_REQUEST_FAILED = -4
  11. MISAGENT_E_UNKNOWN_ERROR = -256
  12. misagent_error_t misagent_client_new(idevice_t device, lockdownd_service_descriptor_t descriptor, misagent_client_t * client)
  13. misagent_error_t misagent_client_free(misagent_client_t client)
  14. misagent_error_t misagent_install(misagent_client_t client, plist.plist_t profile)
  15. misagent_error_t misagent_copy(misagent_client_t client, plist.plist_t* profiles)
  16. misagent_error_t misagent_remove(misagent_client_t client, char* profileID)
  17. int misagent_get_status_code(misagent_client_t client)
  18. cdef class MisagentError(BaseError):
  19. def __init__(self, *args, **kwargs):
  20. self._lookup_table = {
  21. MISAGENT_E_SUCCESS: "Success",
  22. MISAGENT_E_INVALID_ARG: "Invalid argument",
  23. MISAGENT_E_PLIST_ERROR: "Property list error",
  24. MISAGENT_E_CONN_FAILED: "Connection failed",
  25. MISAGENT_E_REQUEST_FAILED: "Request failed",
  26. MISAGENT_E_UNKNOWN_ERROR: "Unknown error"
  27. }
  28. BaseError.__init__(self, *args, **kwargs)
  29. cdef class MisagentClient(PropertyListService):
  30. __service_name__ = "com.apple.misagent"
  31. cdef misagent_client_t _c_client
  32. def __cinit__(self, iDevice device not None, LockdownServiceDescriptor descriptor, *args, **kwargs):
  33. self.handle_error(misagent_client_new(device._c_dev, descriptor._c_service_descriptor, &self._c_client))
  34. def __dealloc__(self):
  35. cdef misagent_error_t err
  36. if self._c_client is not NULL:
  37. err = misagent_client_free(self._c_client)
  38. self.handle_error(err)
  39. cdef inline BaseError _error(self, int16_t ret):
  40. return MisagentError(ret)
  41. cpdef install(self, plist.Node profile):
  42. cdef misagent_error_t err
  43. err = misagent_install(self._c_client, profile._c_node)
  44. self.handle_error(err)
  45. cpdef plist.Node copy(self):
  46. cdef:
  47. plist.plist_t c_node = NULL
  48. misagent_error_t err
  49. err = misagent_copy(self._c_client, &c_node)
  50. try:
  51. self.handle_error(err)
  52. return plist.plist_t_to_node(c_node)
  53. except BaseError, e:
  54. if c_node != NULL:
  55. plist.plist_free(c_node)
  56. raise
  57. cpdef remove(self, bytes profile_id):
  58. cdef misagent_error_t err
  59. err = misagent_remove(self._c_client, profile_id)
  60. self.handle_error(err)
  61. cpdef int get_status_code(self):
  62. return misagent_get_status_code(self._c_client)