Implement SavePairRecord

This commit is contained in:
Jackson Coxson
2025-09-03 19:26:11 -06:00
parent d463a53f04
commit ca56575c6c
2 changed files with 34 additions and 5 deletions

View File

@@ -335,6 +335,32 @@ impl UsbmuxdConnection {
}
}
/// Tells usbmuxd to save the pairing record in its storage
///
/// # Arguments
/// * `device_id` - usbmuxd device ID
/// * `udid` - the device UDID/serial
/// * `pair_record` - a serialized plist of the pair record
pub async fn save_pair_record(
&mut self,
device_id: u32,
udid: &str,
pair_record: Vec<u8>,
) -> Result<(), IdeviceError> {
let req = crate::plist!(dict {
"MessageType": "SavePairRecord",
"PairRecordData": pair_record,
"DeviceID": device_id,
"PairRecordID": udid,
});
self.write_plist(req).await?;
let res = self.read_plist().await?;
match res.get("Number").and_then(|x| x.as_unsigned_integer()) {
Some(0) => Ok(()),
_ => Err(IdeviceError::UnexpectedResponse),
}
}
/// Writes a PLIST message to usbmuxd
async fn write_plist(&mut self, req: plist::Dictionary) -> Result<(), IdeviceError> {
let raw = raw_packet::RawPacket::new(

View File

@@ -74,10 +74,13 @@ async fn main() {
.expect("Pairing file test failed");
// Add the UDID (jitterbug spec)
pairing_file.udid = Some(dev.udid);
pairing_file.udid = Some(dev.udid.clone());
let pairing_file = pairing_file.serialize().expect("failed to serialize");
println!(
"{}",
String::from_utf8(pairing_file.serialize().unwrap()).unwrap()
);
println!("{}", String::from_utf8(pairing_file.clone()).unwrap());
// Save with usbmuxd
u.save_pair_record(dev.device_id, &dev.udid, pairing_file)
.await
.expect("no save");
}