Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
doronz88 committed Jul 16, 2023
1 parent 055eeec commit 1acddf1
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 11 deletions.
7 changes: 5 additions & 2 deletions pymobiledevice3/remote/remote_service_discovery.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,11 @@ def connect(self) -> None:
self.peer_info = self.service.receive_response()

def connect_to_service(self, name: str) -> RemoteXPCConnection:
service_port = int(self.peer_info['Services'][name]['Port'])
service = RemoteXPCConnection((self.service.address[0], service_port))
service = self.peer_info['Services'][name]
service_port = int(service['Port'])
service_properties = service.get('Properties', {})
service_version = service_properties.get('ServiceVersion')
service = RemoteXPCConnection((self.service.address[0], service_port), service_version)
service.connect()
return service

Expand Down
31 changes: 22 additions & 9 deletions pymobiledevice3/remote/remotexpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@


class RemoteXPCConnection:
def __init__(self, address: Tuple[str, int]):
def __init__(self, address: Tuple[str, int], service_version: int = 2):
self.address = address
self.service_version = service_version
self.sock: Optional[socket.socket] = None
self.next_message_id = 0
self.peer_info = None
Expand Down Expand Up @@ -72,14 +73,26 @@ def _do_handshake(self) -> None:
self._send_frame(WindowUpdateFrame(stream_id=0, window_increment=DEFAULT_WIN_SIZE_INCR))
self._send_frame(HeadersFrame(stream_id=1, flags=['END_HEADERS']))

# send first actual requests
self.send_request({})
self._send_frame(DataFrame(stream_id=1, data=XpcWrapper.build({'size': 0, 'flags': 0x0201, 'payload': None})))
self.next_message_id += 1
self._send_frame(HeadersFrame(stream_id=3, flags=['END_HEADERS']))
self._send_frame(
DataFrame(stream_id=3, data=XpcWrapper.build({'size': 0, 'flags': 0x00400001, 'payload': None})))
self.next_message_id += 1
if self.service_version == 2:
# send first actual requests
self.send_request({})
self._send_frame(
DataFrame(stream_id=1, data=XpcWrapper.build({'size': 0, 'flags': 0x0201, 'payload': None})))
self.next_message_id += 1
self._send_frame(HeadersFrame(stream_id=3, flags=['END_HEADERS']))
self._send_frame(
DataFrame(stream_id=3, data=XpcWrapper.build({'size': 0, 'flags': 0x00400001, 'payload': None})))
self.next_message_id += 1
else:
# send first actual requests
self.send_request({})
self._send_frame(
DataFrame(stream_id=1, data=XpcWrapper.build({'size': 0, 'flags': 0x0201, 'payload': None})))
self.next_message_id += 1
self._send_frame(HeadersFrame(stream_id=3, flags=['END_HEADERS']))
self._send_frame(
DataFrame(stream_id=3, data=XpcWrapper.build({'size': 0, 'flags': 0x00400001, 'payload': None})))
self.next_message_id += 1

assert isinstance(self._receive_frame(), SettingsFrame)

Expand Down

0 comments on commit 1acddf1

Please sign in to comment.