pymobiledevice3 4.27.7__tar.gz → 6.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. pymobiledevice3-6.1.4/.github/workflows/generate-executable.py +67 -0
  2. pymobiledevice3-6.1.4/.github/workflows/python-publish.yml +27 -0
  3. pymobiledevice3-6.1.4/.pre-commit-config.yaml +9 -0
  4. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/PKG-INFO +2 -3
  5. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/misc/plist_sniffer.py +15 -15
  6. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/misc/remotexpc_sniffer.py +29 -28
  7. pymobiledevice3-6.1.4/pymobiledevice3/__main__.py +339 -0
  8. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/_version.py +3 -3
  9. pymobiledevice3-6.1.4/pymobiledevice3/bonjour.py +381 -0
  10. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/ca.py +32 -24
  11. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/activation.py +7 -7
  12. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/afc.py +19 -19
  13. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/amfi.py +4 -4
  14. pymobiledevice3-6.1.4/pymobiledevice3/cli/apps.py +98 -0
  15. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/backup.py +58 -32
  16. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/bonjour.py +27 -20
  17. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/cli_common.py +112 -81
  18. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/companion_proxy.py +4 -4
  19. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/completions.py +10 -10
  20. pymobiledevice3-6.1.4/pymobiledevice3/cli/crash.py +88 -0
  21. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/developer.py +624 -521
  22. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/diagnostics.py +38 -33
  23. pymobiledevice3-6.1.4/pymobiledevice3/cli/idam.py +46 -0
  24. pymobiledevice3-6.1.4/pymobiledevice3/cli/lockdown.py +195 -0
  25. pymobiledevice3-6.1.4/pymobiledevice3/cli/mounter.py +199 -0
  26. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/notification.py +10 -10
  27. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/pcap.py +19 -14
  28. pymobiledevice3-6.1.4/pymobiledevice3/cli/power_assertion.py +27 -0
  29. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/processes.py +10 -10
  30. pymobiledevice3-6.1.4/pymobiledevice3/cli/profile.py +191 -0
  31. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/provision.py +17 -17
  32. pymobiledevice3-6.1.4/pymobiledevice3/cli/remote.py +339 -0
  33. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/restore.py +43 -40
  34. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/springboard.py +30 -28
  35. pymobiledevice3-6.1.4/pymobiledevice3/cli/syslog.py +230 -0
  36. pymobiledevice3-6.1.4/pymobiledevice3/cli/usbmux.py +69 -0
  37. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/version.py +3 -2
  38. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/webinspector.py +231 -123
  39. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/common.py +1 -1
  40. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/exceptions.py +156 -61
  41. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/irecv.py +49 -53
  42. pymobiledevice3-6.1.4/pymobiledevice3/irecv_devices.py +1503 -0
  43. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/lockdown.py +404 -251
  44. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/lockdown_service_provider.py +10 -7
  45. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/osu/os_utils.py +18 -9
  46. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/osu/posix_util.py +28 -15
  47. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/osu/win_util.py +14 -8
  48. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/pair_records.py +19 -19
  49. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/remote/common.py +4 -4
  50. pymobiledevice3-6.1.4/pymobiledevice3/remote/core_device/app_service.py +154 -0
  51. pymobiledevice3-6.1.4/pymobiledevice3/remote/core_device/core_device_service.py +37 -0
  52. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/remote/core_device/device_info.py +5 -5
  53. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/remote/core_device/diagnostics_service.py +10 -8
  54. pymobiledevice3-6.1.4/pymobiledevice3/remote/core_device/file_service.py +102 -0
  55. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/remote/remote_service_discovery.py +57 -35
  56. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/remote/remotexpc.py +64 -42
  57. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/remote/tunnel_service.py +383 -297
  58. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/remote/utils.py +14 -13
  59. pymobiledevice3-6.1.4/pymobiledevice3/remote/xpc_message.py +346 -0
  60. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/dsc_uuid_map.py +19 -19
  61. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/firmware_notifications.py +16 -16
  62. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/restore/asr.py +27 -27
  63. pymobiledevice3-6.1.4/pymobiledevice3/restore/base_restore.py +162 -0
  64. pymobiledevice3-6.1.4/pymobiledevice3/restore/consts.py +91 -0
  65. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/restore/device.py +11 -11
  66. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/restore/fdr.py +46 -46
  67. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/restore/ftab.py +19 -19
  68. pymobiledevice3-6.1.4/pymobiledevice3/restore/img4.py +163 -0
  69. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/restore/mbn.py +35 -54
  70. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/restore/recovery.py +125 -135
  71. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/restore/restore.py +526 -526
  72. pymobiledevice3-6.1.4/pymobiledevice3/restore/restore_options.py +225 -0
  73. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/restore/restored_client.py +25 -22
  74. pymobiledevice3-6.1.4/pymobiledevice3/restore/tss.py +912 -0
  75. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/service_connection.py +61 -54
  76. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/accessibilityaudit.py +137 -127
  77. pymobiledevice3-6.1.4/pymobiledevice3/services/afc.py +1526 -0
  78. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/amfi.py +21 -18
  79. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/companion.py +23 -19
  80. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/crash_reports.py +60 -46
  81. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/debugserver_applist.py +3 -3
  82. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/device_arbitration.py +8 -8
  83. pymobiledevice3-6.1.4/pymobiledevice3/services/device_link.py +229 -0
  84. pymobiledevice3-6.1.4/pymobiledevice3/services/diagnostics.py +1038 -0
  85. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dtfetchsymbols.py +8 -8
  86. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/dvt_secure_socket_proxy.py +4 -4
  87. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/dvt_testmanaged_proxy.py +4 -4
  88. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/activity_trace_tap.py +85 -74
  89. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/application_listing.py +2 -3
  90. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/condition_inducer.py +7 -6
  91. pymobiledevice3-6.1.4/pymobiledevice3/services/dvt/instruments/core_profile_session_tap.py +769 -0
  92. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/device_info.py +11 -11
  93. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/energy_monitor.py +1 -1
  94. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/graphics.py +1 -1
  95. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/location_simulation.py +1 -1
  96. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/location_simulation_base.py +10 -10
  97. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/network_monitor.py +17 -17
  98. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/notifications.py +1 -1
  99. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/process_control.py +25 -10
  100. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/screenshot.py +2 -2
  101. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/sysmontap.py +15 -15
  102. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/testmanaged/xcuitest.py +42 -52
  103. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/file_relay.py +10 -10
  104. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/heartbeat.py +8 -7
  105. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/house_arrest.py +12 -15
  106. pymobiledevice3-6.1.4/pymobiledevice3/services/idam.py +20 -0
  107. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/installation_proxy.py +119 -100
  108. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/lockdown_service.py +12 -5
  109. pymobiledevice3-6.1.4/pymobiledevice3/services/misagent.py +58 -0
  110. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/mobile_activation.py +84 -72
  111. pymobiledevice3-6.1.4/pymobiledevice3/services/mobile_config.py +435 -0
  112. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/mobile_image_mounter.py +137 -116
  113. pymobiledevice3-6.1.4/pymobiledevice3/services/mobilebackup2.py +422 -0
  114. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/notification_proxy.py +11 -11
  115. pymobiledevice3-6.1.4/pymobiledevice3/services/os_trace.py +242 -0
  116. pymobiledevice3-6.1.4/pymobiledevice3/services/pcapd.py +412 -0
  117. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/power_assertion.py +10 -9
  118. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/preboard.py +4 -4
  119. pymobiledevice3-6.1.4/pymobiledevice3/services/remote_fetch_symbols.py +53 -0
  120. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/remote_server.py +176 -146
  121. pymobiledevice3-6.1.4/pymobiledevice3/services/restore_service.py +45 -0
  122. pymobiledevice3-6.1.4/pymobiledevice3/services/screenshot.py +32 -0
  123. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/simulate_location.py +7 -7
  124. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/springboard.py +15 -15
  125. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/syslog.py +5 -5
  126. pymobiledevice3-6.1.4/pymobiledevice3/services/web_protocol/alert.py +26 -0
  127. pymobiledevice3-6.1.4/pymobiledevice3/services/web_protocol/automation_session.py +409 -0
  128. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/web_protocol/cdp_screencast.py +44 -36
  129. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/web_protocol/cdp_server.py +19 -19
  130. pymobiledevice3-6.1.4/pymobiledevice3/services/web_protocol/cdp_target.py +718 -0
  131. pymobiledevice3-6.1.4/pymobiledevice3/services/web_protocol/driver.py +198 -0
  132. pymobiledevice3-6.1.4/pymobiledevice3/services/web_protocol/element.py +208 -0
  133. pymobiledevice3-6.1.4/pymobiledevice3/services/web_protocol/inspector_session.py +268 -0
  134. pymobiledevice3-6.1.4/pymobiledevice3/services/web_protocol/selenium_api.py +91 -0
  135. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/web_protocol/session_protocol.py +18 -12
  136. pymobiledevice3-6.1.4/pymobiledevice3/services/web_protocol/switch_to.py +70 -0
  137. pymobiledevice3-6.1.4/pymobiledevice3/services/webinspector.py +380 -0
  138. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/tcp_forwarder.py +35 -22
  139. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/tunneld/api.py +20 -15
  140. pymobiledevice3-6.1.4/pymobiledevice3/tunneld/server.py +603 -0
  141. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/usbmux.py +197 -148
  142. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/utils.py +14 -11
  143. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3.egg-info/PKG-INFO +2 -3
  144. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3.egg-info/SOURCES.txt +3 -0
  145. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3.egg-info/requires.txt +1 -2
  146. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pyproject.toml +49 -0
  147. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pytest.ini +1 -0
  148. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/requirements.txt +1 -2
  149. pymobiledevice3-6.1.4/tests/cli/test_cli.py +77 -0
  150. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/conftest.py +28 -25
  151. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/instruments/test_core_profile_session.py +6 -4
  152. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/instruments/test_dvt_secure_socket_proxy.py +27 -25
  153. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/instruments/test_fetch_symbols.py +9 -7
  154. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/instruments/test_location.py +3 -1
  155. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/instruments/test_screenshot.py +2 -2
  156. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_accessibility.py +3 -3
  157. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_afc.py +135 -120
  158. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_apps.py +2 -3
  159. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_backup2.py +10 -5
  160. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_bonjour.py +4 -4
  161. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_crash_reports.py +15 -14
  162. pymobiledevice3-6.1.4/tests/services/test_house_arrest.py +26 -0
  163. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_springboard_services_relay.py +1 -1
  164. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_start_tunnel.py +6 -3
  165. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_syslog_relay.py +3 -3
  166. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_tcp_forwarder.py +2 -2
  167. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_web_protocol/common.py +2 -2
  168. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_web_protocol/conftest.py +7 -8
  169. pymobiledevice3-6.1.4/tests/services/test_web_protocol/test_driver.py +38 -0
  170. pymobiledevice3-6.1.4/tests/services/test_web_protocol/test_element.py +8 -0
  171. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_webinspector.py +7 -8
  172. pymobiledevice3-4.27.7/.github/workflows/generate-executable.py +0 -63
  173. pymobiledevice3-4.27.7/.github/workflows/python-publish.yml +0 -29
  174. pymobiledevice3-4.27.7/.pre-commit-config.yaml +0 -15
  175. pymobiledevice3-4.27.7/pymobiledevice3/__main__.py +0 -290
  176. pymobiledevice3-4.27.7/pymobiledevice3/bonjour.py +0 -145
  177. pymobiledevice3-4.27.7/pymobiledevice3/cli/apps.py +0 -86
  178. pymobiledevice3-4.27.7/pymobiledevice3/cli/crash.py +0 -82
  179. pymobiledevice3-4.27.7/pymobiledevice3/cli/lockdown.py +0 -185
  180. pymobiledevice3-4.27.7/pymobiledevice3/cli/mounter.py +0 -182
  181. pymobiledevice3-4.27.7/pymobiledevice3/cli/power_assertion.py +0 -25
  182. pymobiledevice3-4.27.7/pymobiledevice3/cli/profile.py +0 -180
  183. pymobiledevice3-4.27.7/pymobiledevice3/cli/remote.py +0 -262
  184. pymobiledevice3-4.27.7/pymobiledevice3/cli/syslog.py +0 -187
  185. pymobiledevice3-4.27.7/pymobiledevice3/cli/usbmux.py +0 -68
  186. pymobiledevice3-4.27.7/pymobiledevice3/irecv_devices.py +0 -506
  187. pymobiledevice3-4.27.7/pymobiledevice3/remote/core_device/app_service.py +0 -127
  188. pymobiledevice3-4.27.7/pymobiledevice3/remote/core_device/core_device_service.py +0 -34
  189. pymobiledevice3-4.27.7/pymobiledevice3/remote/core_device/file_service.py +0 -88
  190. pymobiledevice3-4.27.7/pymobiledevice3/remote/xpc_message.py +0 -326
  191. pymobiledevice3-4.27.7/pymobiledevice3/restore/base_restore.py +0 -119
  192. pymobiledevice3-4.27.7/pymobiledevice3/restore/consts.py +0 -70
  193. pymobiledevice3-4.27.7/pymobiledevice3/restore/img4.py +0 -166
  194. pymobiledevice3-4.27.7/pymobiledevice3/restore/restore_options.py +0 -218
  195. pymobiledevice3-4.27.7/pymobiledevice3/restore/tss.py +0 -804
  196. pymobiledevice3-4.27.7/pymobiledevice3/services/afc.py +0 -981
  197. pymobiledevice3-4.27.7/pymobiledevice3/services/device_link.py +0 -207
  198. pymobiledevice3-4.27.7/pymobiledevice3/services/diagnostics.py +0 -1035
  199. pymobiledevice3-4.27.7/pymobiledevice3/services/dvt/instruments/core_profile_session_tap.py +0 -687
  200. pymobiledevice3-4.27.7/pymobiledevice3/services/misagent.py +0 -55
  201. pymobiledevice3-4.27.7/pymobiledevice3/services/mobile_config.py +0 -405
  202. pymobiledevice3-4.27.7/pymobiledevice3/services/mobilebackup2.py +0 -384
  203. pymobiledevice3-4.27.7/pymobiledevice3/services/os_trace.py +0 -182
  204. pymobiledevice3-4.27.7/pymobiledevice3/services/pcapd.py +0 -412
  205. pymobiledevice3-4.27.7/pymobiledevice3/services/remote_fetch_symbols.py +0 -46
  206. pymobiledevice3-4.27.7/pymobiledevice3/services/restore_service.py +0 -45
  207. pymobiledevice3-4.27.7/pymobiledevice3/services/screenshot.py +0 -29
  208. pymobiledevice3-4.27.7/pymobiledevice3/services/web_protocol/alert.py +0 -26
  209. pymobiledevice3-4.27.7/pymobiledevice3/services/web_protocol/automation_session.py +0 -399
  210. pymobiledevice3-4.27.7/pymobiledevice3/services/web_protocol/cdp_target.py +0 -680
  211. pymobiledevice3-4.27.7/pymobiledevice3/services/web_protocol/driver.py +0 -195
  212. pymobiledevice3-4.27.7/pymobiledevice3/services/web_protocol/element.py +0 -195
  213. pymobiledevice3-4.27.7/pymobiledevice3/services/web_protocol/inspector_session.py +0 -264
  214. pymobiledevice3-4.27.7/pymobiledevice3/services/web_protocol/selenium_api.py +0 -91
  215. pymobiledevice3-4.27.7/pymobiledevice3/services/web_protocol/switch_to.py +0 -67
  216. pymobiledevice3-4.27.7/pymobiledevice3/services/webinspector.py +0 -393
  217. pymobiledevice3-4.27.7/pymobiledevice3/tunneld/server.py +0 -487
  218. pymobiledevice3-4.27.7/tests/cli/test_cli.py +0 -45
  219. pymobiledevice3-4.27.7/tests/services/test_web_protocol/test_driver.py +0 -38
  220. pymobiledevice3-4.27.7/tests/services/test_web_protocol/test_element.py +0 -8
  221. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/.gitattributes +0 -0
  222. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/.github/FUNDING.yml +0 -0
  223. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  224. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  225. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  226. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/.github/pull_request_template.md +0 -0
  227. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/.github/workflows/codeql.yml +0 -0
  228. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/.github/workflows/markdown-lint.yml +0 -0
  229. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/.github/workflows/python-app.yml +0 -0
  230. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/.gitignore +0 -0
  231. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/CODE_OF_CONDUCT.md +0 -0
  232. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/CONTRIBUTING.md +0 -0
  233. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/LICENSE +0 -0
  234. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/README.md +0 -0
  235. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/example.gif +0 -0
  236. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/markdownlint-config.json +0 -0
  237. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/misc/DTServices-14.2.txt +0 -0
  238. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/misc/DTServices-14.5.txt +0 -0
  239. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/misc/RemoteXPC.md +0 -0
  240. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/misc/pyinstaller.md +0 -0
  241. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/misc/understanding_idevice_protocol_layers.md +0 -0
  242. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/misc/usbmux_sniff.sh +0 -0
  243. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/__init__.py +0 -0
  244. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/cli/__init__.py +0 -0
  245. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/osu/__init__.py +0 -0
  246. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/remote/__init__.py +0 -0
  247. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/remote/core_device/__init__.py +0 -0
  248. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/remote/module_imports.py +0 -0
  249. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/remote/remote_service.py +0 -0
  250. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/__init__.py +0 -0
  251. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/dsc_uuid_map.json +0 -0
  252. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/notifications.txt +0 -0
  253. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/webinspector/element_attribute.js +0 -0
  254. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/webinspector/element_clear.js +0 -0
  255. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/webinspector/enter_fullscreen.js +0 -0
  256. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/webinspector/find_nodes.js +0 -0
  257. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/webinspector/focus.js +0 -0
  258. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/webinspector/get_attribute.js +0 -0
  259. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/webinspector/is_displayed.js +0 -0
  260. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/webinspector/is_editable.js +0 -0
  261. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/resources/webinspector/is_enabled.js +0 -0
  262. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/restore/__init__.py +0 -0
  263. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/__init__.py +0 -0
  264. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/__init__.py +0 -0
  265. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/dvt/instruments/__init__.py +0 -0
  266. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/services/web_protocol/__init__.py +0 -0
  267. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3/tunneld/__init__.py +0 -0
  268. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3.egg-info/dependency_links.txt +0 -0
  269. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3.egg-info/entry_points.txt +0 -0
  270. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/pymobiledevice3.egg-info/top_level.txt +0 -0
  271. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/setup.cfg +0 -0
  272. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/__init__.py +0 -0
  273. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/cli/__init__.py +0 -0
  274. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/__init__.py +0 -0
  275. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/instruments/__init__.py +0 -0
  276. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_list_devices.py +0 -0
  277. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_lockdown.py +0 -0
  278. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_pcapd.py +0 -0
  279. {pymobiledevice3-4.27.7 → pymobiledevice3-6.1.4}/tests/services/test_web_protocol/__init__.py +0 -0
@@ -0,0 +1,67 @@
1
+ import logging
2
+ import os
3
+ import site
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ import coloredlogs
8
+ import PyInstaller.__main__
9
+
10
+ import pymobiledevice3.__main__
11
+ import pymobiledevice3.cli
12
+ import pymobiledevice3.resources
13
+
14
+ coloredlogs.install(level=logging.DEBUG)
15
+
16
+ ROOT = Path(__file__).parent.parent.parent
17
+ DEFAULT_OUTPUT = ROOT / Path("dist/__main__").with_suffix(".exe" if sys.platform == "win32" else "")
18
+ OUTPUT = (ROOT / "dist/pymobiledevice3").with_suffix(".exe" if sys.platform == "win32" else "")
19
+
20
+
21
+ def main() -> None:
22
+ site_packages_path = site.getsitepackages()[0]
23
+ resources_dir = Path(pymobiledevice3.resources.__file__).parent
24
+ pymobiledevice3_cli_path = Path(pymobiledevice3.cli.__file__).parent
25
+
26
+ hidden_imports = []
27
+
28
+ for module in pymobiledevice3_cli_path.iterdir():
29
+ if module.name.endswith(".py") and module.name != "__init__.py": # Avoid including the __init__.py
30
+ # Create the module name to be added to hidden imports
31
+ module_name = "pymobiledevice3.cli." + os.path.splitext(module.name)[0]
32
+ hidden_imports.append("--hidden-import=" + module_name)
33
+
34
+ pyinstaller_args = [
35
+ pymobiledevice3.__main__.__file__,
36
+ "--hidden-import=ipsw_parser",
37
+ "--hidden-import=zeroconf",
38
+ "--hidden-import=pyimg4",
39
+ "--hidden-import=zeroconf._utils.ipaddress",
40
+ "--hidden-import=zeroconf._handlers.answers",
41
+ "--hidden-import=readchar",
42
+ "--copy-metadata=pyimg4",
43
+ "--copy-metadata=readchar",
44
+ "--copy-metadata=apple_compress",
45
+ "--onefile",
46
+ ]
47
+ if sys.platform == "win32":
48
+ pyinstaller_args.extend([
49
+ "--add-binary",
50
+ f"{site_packages_path}/Lib/site-packages/pytun_pmd3/wintun/*;pytun_pmd3/wintun/bin",
51
+ "--add-binary",
52
+ f"{resources_dir}/webinspector;pymobiledevice3/resources/webinspector",
53
+ ])
54
+ else:
55
+ pyinstaller_args.extend([
56
+ "--add-binary",
57
+ f"{site_packages_path}/pytun_pmd3:pytun_pmd3",
58
+ "--add-binary",
59
+ f"{resources_dir}/webinspector:pymobiledevice3/resources/webinspector",
60
+ ])
61
+ pyinstaller_args.extend(hidden_imports)
62
+ PyInstaller.__main__.run(pyinstaller_args)
63
+ DEFAULT_OUTPUT.rename(OUTPUT)
64
+
65
+
66
+ if __name__ == "__main__":
67
+ main()
@@ -0,0 +1,27 @@
1
+ # This workflow builds and uploads the Python package to PyPI when a release is created
2
+
3
+ name: Upload Python Package
4
+
5
+ on:
6
+ release:
7
+ types: [ created ]
8
+
9
+ jobs:
10
+ deploy:
11
+ permissions:
12
+ id-token: write
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v5
18
+ with:
19
+ python-version: '3.12'
20
+ - name: Install uv
21
+ uses: astral-sh/setup-uv@v3
22
+ - name: Build distributions
23
+ run: uv build
24
+ - name: Publish to PyPI
25
+ uses: pypa/gh-action-pypi-publish@release/v1
26
+ with:
27
+ packages-dir: dist
@@ -0,0 +1,9 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ # Ruff version.
4
+ rev: v0.14.2
5
+ hooks:
6
+ # Run the linter.
7
+ - id: ruff-check
8
+ # Run the formatter.
9
+ - id: ruff-format
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pymobiledevice3
3
- Version: 4.27.7
3
+ Version: 6.1.4
4
4
  Summary: Pure python3 implementation for working with iDevices (iPhone, etc...)
5
5
  Author-email: doronz88 <doron88@gmail.com>, matan <matan1008@gmail.com>
6
6
  Maintainer-email: doronz88 <doron88@gmail.com>, matan <matan1008@gmail.com>
@@ -46,8 +46,7 @@ Requires-Dist: wsproto
46
46
  Requires-Dist: nest_asyncio>=1.5.5
47
47
  Requires-Dist: Pillow
48
48
  Requires-Dist: inquirer3>=0.6.0
49
- Requires-Dist: ipsw_parser>=1.3.4
50
- Requires-Dist: zeroconf>=0.132.2
49
+ Requires-Dist: ipsw_parser>=1.5.0
51
50
  Requires-Dist: ifaddr
52
51
  Requires-Dist: hyperframe
53
52
  Requires-Dist: srptools
@@ -7,8 +7,8 @@ import click
7
7
  from scapy.packet import Packet, Raw
8
8
  from scapy.sendrecv import sniff
9
9
 
10
- BPLIST_MAGIC = b'bplist'
11
- PLIST_MAGIC = b'<plist'
10
+ BPLIST_MAGIC = b"bplist"
11
+ PLIST_MAGIC = b"<plist"
12
12
 
13
13
 
14
14
  class PcapSniffer:
@@ -20,13 +20,13 @@ class PcapSniffer:
20
20
 
21
21
  if BPLIST_MAGIC in packet:
22
22
  try:
23
- plist = plistlib.loads(packet[packet.find(BPLIST_MAGIC):])
23
+ plist = plistlib.loads(packet[packet.find(BPLIST_MAGIC) :])
24
24
  self.report(plist)
25
25
  except plistlib.InvalidFileException:
26
26
  pass
27
27
  if PLIST_MAGIC in packet:
28
28
  try:
29
- plist = plistlib.loads(packet[packet.find(PLIST_MAGIC):])
29
+ plist = plistlib.loads(packet[packet.find(PLIST_MAGIC) :])
30
30
  self.report(plist)
31
31
  except xml.parsers.expat.ExpatError:
32
32
  pass
@@ -35,37 +35,37 @@ class PcapSniffer:
35
35
  try:
36
36
  print(plist)
37
37
  if self.file is not None:
38
- self.file.write('---\n')
38
+ self.file.write("---\n")
39
39
  self.file.write(pprint.pformat(plist))
40
- self.file.write('\n---\n')
40
+ self.file.write("\n---\n")
41
41
  except ValueError:
42
- print('failed to print plist')
42
+ print("failed to print plist")
43
43
 
44
44
 
45
45
  @click.group()
46
46
  def cli():
47
- """ Parse RemoteXPC traffic """
47
+ """Parse RemoteXPC traffic"""
48
48
  pass
49
49
 
50
50
 
51
51
  @cli.command()
52
- @click.argument('pcap', type=click.Path(exists=True, file_okay=True, dir_okay=False))
53
- @click.option('-o', '--out', type=click.File('wt'))
52
+ @click.argument("pcap", type=click.Path(exists=True, file_okay=True, dir_okay=False))
53
+ @click.option("-o", "--out", type=click.File("wt"))
54
54
  def offline(pcap: str, out: IO):
55
- """ Parse plists traffic from a .pcap file """
55
+ """Parse plists traffic from a .pcap file"""
56
56
  sniffer = PcapSniffer(out)
57
57
  for p in sniff(offline=pcap):
58
58
  sniffer.process_packet(p)
59
59
 
60
60
 
61
61
  @cli.command()
62
- @click.argument('iface')
63
- @click.option('-o', '--out', type=click.File('wt'))
62
+ @click.argument("iface")
63
+ @click.option("-o", "--out", type=click.File("wt"))
64
64
  def live(iface: str, out: IO):
65
- """ Parse plists live from a given network interface """
65
+ """Parse plists live from a given network interface"""
66
66
  sniffer = PcapSniffer(out)
67
67
  sniff(iface=iface, prn=sniffer.process_packet)
68
68
 
69
69
 
70
- if __name__ == '__main__':
70
+ if __name__ == "__main__":
71
71
  cli()
@@ -22,7 +22,7 @@ FRAME_HEADER_SIZE = 9
22
22
 
23
23
 
24
24
  def create_stream_key(src: str, sport: int, dst: str, dport: int) -> str:
25
- return f'{src}/{sport}//{dst}/{dport}'
25
+ return f"{src}/{sport}//{dst}/{dport}"
26
26
 
27
27
 
28
28
  class TCPStream:
@@ -37,7 +37,7 @@ class TCPStream:
37
37
  self.segments = {} # data segments to add later
38
38
 
39
39
  def __repr__(self) -> str:
40
- return f'Stream<{self.key}>'
40
+ return f"Stream<{self.key}>"
41
41
 
42
42
  def __len__(self) -> int:
43
43
  return len(self.data)
@@ -58,12 +58,12 @@ class TCPStream:
58
58
  return False
59
59
  else:
60
60
  # if this data is in order (has a place to be inserted)
61
- self.data[seq_offset:seq_offset + data_len] = data
61
+ self.data[seq_offset : seq_offset + data_len] = data
62
62
  # check if there are any waiting data segments to add
63
63
  for seq_offset in sorted(self.segments.keys()):
64
64
  if seq_offset <= len(self.data): # if we can add this segment to the stream
65
65
  segment_payload = self.segments[seq_offset]
66
- self.data[seq_offset:seq_offset + len(segment_payload)] = segment_payload
66
+ self.data[seq_offset : seq_offset + len(segment_payload)] = segment_payload
67
67
  self.segments.pop(seq_offset)
68
68
  else:
69
69
  break # short circuit because list is sorted
@@ -72,12 +72,12 @@ class TCPStream:
72
72
 
73
73
  class H2Stream(TCPStream):
74
74
  def pop_frames(self) -> list[Frame]:
75
- """ Pop all available H2Frames """
75
+ """Pop all available H2Frames"""
76
76
 
77
77
  # If self.data starts with the http/2 magic bytes, pop them off
78
78
  if self.data.startswith(HTTP2_MAGIC):
79
- logger.debug('HTTP/2 magic bytes')
80
- self.data = self.data[len(HTTP2_MAGIC):]
79
+ logger.debug("HTTP/2 magic bytes")
80
+ self.data = self.data[len(HTTP2_MAGIC) :]
81
81
  self.seq += len(HTTP2_MAGIC)
82
82
 
83
83
  frames = []
@@ -120,13 +120,14 @@ class RemoteXPCSniffer:
120
120
  tcp_pkt = pkt[TCP]
121
121
  stream_key = create_stream_key(net_pkt.src, tcp_pkt.sport, net_pkt.dst, tcp_pkt.dport)
122
122
  stream = self._h2_streams.setdefault(
123
- stream_key, H2Stream(net_pkt.src, tcp_pkt.sport, net_pkt.dst, tcp_pkt.dport))
123
+ stream_key, H2Stream(net_pkt.src, tcp_pkt.sport, net_pkt.dst, tcp_pkt.dport)
124
+ )
124
125
  stream_finished_assembling = stream.add(tcp_pkt)
125
126
  if stream_finished_assembling: # if we just added something in order
126
127
  self._process_stream(stream)
127
128
 
128
129
  def _handle_data_frame(self, stream: H2Stream, frame: DataFrame) -> None:
129
- previous_frame_data = self._previous_frame_data.get(stream.key, b'')
130
+ previous_frame_data = self._previous_frame_data.get(stream.key, b"")
130
131
  try:
131
132
  payload = XpcWrapper.parse(previous_frame_data + frame.data).message.payload
132
133
  if payload is None:
@@ -134,10 +135,11 @@ class RemoteXPCSniffer:
134
135
  xpc_message = decode_xpc_object(payload.obj)
135
136
  except ConstError: # if we don't know what this payload is
136
137
  logger.debug(
137
- f'New Data frame {stream.src}->{stream.dst} on HTTP/2 stream {frame.stream_id} TCP port {stream.dport}')
138
+ f"New Data frame {stream.src}->{stream.dst} on HTTP/2 stream {frame.stream_id} TCP port {stream.dport}"
139
+ )
138
140
  hexdump(frame.data[:64])
139
141
  if len(frame.data) > 64:
140
- logger.debug(f'... {len(frame.data)} bytes')
142
+ logger.debug(f"... {len(frame.data)} bytes")
141
143
  return
142
144
  except StreamError:
143
145
  self._previous_frame_data[stream.key] = previous_frame_data + frame.data
@@ -149,27 +151,26 @@ class RemoteXPCSniffer:
149
151
  if xpc_message is None:
150
152
  return
151
153
 
152
- logger.info(f'As Python Object (#{frame.stream_id}): {pformat(xpc_message)}')
154
+ logger.info(f"As Python Object (#{frame.stream_id}): {pformat(xpc_message)}")
153
155
 
154
156
  # print `pairingData` if exists, since it contains an inner struct
155
- if 'value' not in xpc_message:
157
+ if "value" not in xpc_message:
156
158
  return
157
- message = xpc_message['value']['message']
158
- if 'plain' not in message:
159
+ message = xpc_message["value"]["message"]
160
+ if "plain" not in message:
159
161
  return
160
- plain = message['plain']['_0']
161
- if 'event' not in plain:
162
+ plain = message["plain"]["_0"]
163
+ if "event" not in plain:
162
164
  return
163
- pairing_data = plain['event']['_0']['pairingData']['_0']['data']
165
+ pairing_data = plain["event"]["_0"]["pairingData"]["_0"]["data"]
164
166
  logger.info(PairingDataComponentTLVBuf.parse(pairing_data))
165
167
 
166
168
  def _handle_single_frame(self, stream: H2Stream, frame: Frame) -> None:
167
- logger.debug(f'New HTTP/2 frame: {stream.key} ({frame})')
169
+ logger.debug(f"New HTTP/2 frame: {stream.key} ({frame})")
168
170
  if isinstance(frame, HeadersFrame):
169
- logger.debug(
170
- f'{stream.src} opening stream {frame.stream_id} for communication on port {stream.dport}')
171
+ logger.debug(f"{stream.src} opening stream {frame.stream_id} for communication on port {stream.dport}")
171
172
  elif isinstance(frame, GoAwayFrame):
172
- logger.debug(f'{stream.src} closing stream {frame.stream_id} on port {stream.sport}')
173
+ logger.debug(f"{stream.src} closing stream {frame.stream_id} on port {stream.sport}")
173
174
  elif isinstance(frame, DataFrame):
174
175
  self._handle_data_frame(stream, frame)
175
176
 
@@ -180,27 +181,27 @@ class RemoteXPCSniffer:
180
181
 
181
182
  @click.group()
182
183
  def cli():
183
- """ Parse RemoteXPC traffic """
184
+ """Parse RemoteXPC traffic"""
184
185
  pass
185
186
 
186
187
 
187
188
  @cli.command()
188
- @click.argument('file', type=click.Path(exists=True, file_okay=True, dir_okay=False))
189
+ @click.argument("file", type=click.Path(exists=True, file_okay=True, dir_okay=False))
189
190
  def offline(file: str):
190
- """ Parse RemoteXPC traffic from a .pcap file """
191
+ """Parse RemoteXPC traffic from a .pcap file"""
191
192
  sniffer = RemoteXPCSniffer()
192
193
  for p in sniff(offline=file):
193
194
  sniffer.process_packet(p)
194
195
 
195
196
 
196
197
  @cli.command()
197
- @click.argument('iface')
198
+ @click.argument("iface")
198
199
  def live(iface: str):
199
- """ Parse RemoteXPC live from a given network interface """
200
+ """Parse RemoteXPC live from a given network interface"""
200
201
  sniffer = RemoteXPCSniffer()
201
202
  sniff(iface=iface, prn=sniffer.process_packet)
202
203
 
203
204
 
204
- if __name__ == '__main__':
205
+ if __name__ == "__main__":
205
206
  coloredlogs.install(level=logging.DEBUG)
206
207
  cli()