Remove cpp 17 features and implement Rust into CPP

This commit is contained in:
Jackson Coxson
2025-08-29 14:19:28 -06:00
parent 4fde7cf06b
commit 1169408da1
41 changed files with 1638 additions and 1212 deletions

View File

@@ -4,73 +4,80 @@
#include <idevice++/provider.hpp>
#include <idevice++/usbmuxd.hpp>
#include <iostream>
#include <optional>
#include <plist/plist++.h>
int main() {
idevice_init_logger(Debug, Disabled, NULL);
IdeviceFFI::FfiError e;
std::optional<IdeviceFFI::UsbmuxdConnection> u =
IdeviceFFI::UsbmuxdConnection::default_new(0, e);
if (!u) {
auto u_res = IdeviceFFI::UsbmuxdConnection::default_new(0);
if_let_err(u_res, e, {
std::cerr << "failed to connect to usbmuxd";
std::cerr << e.message;
return 1;
}
});
auto& u = u_res.unwrap();
auto devices = u->get_devices(e);
if (!devices) {
auto devices_res = u.get_devices();
if_let_err(devices_res, e, {
std::cerr << "failed to get devices from usbmuxd";
std::cerr << e.message;
return 1;
}
if (devices->empty()) {
});
auto devices = std::move(devices_res).unwrap();
if (devices.empty()) {
std::cerr << "no devices connected";
std::cerr << e.message;
return 1;
}
auto& dev = (*devices)[0];
auto& dev = (devices)[0];
auto udid = dev.get_udid();
if (!udid) {
if (udid.is_none()) {
std::cerr << "no udid\n";
return 1;
}
auto id = dev.get_id();
if (!id) {
if (id.is_none()) {
std::cerr << "no id\n";
return 1;
}
IdeviceFFI::UsbmuxdAddr addr = IdeviceFFI::UsbmuxdAddr::default_new();
auto prov =
IdeviceFFI::Provider::usbmuxd_new(std::move(addr), /*tag*/ 0, *udid, *id, "reeeeeeeee", e);
if (!prov) {
IdeviceFFI::UsbmuxdAddr addr = IdeviceFFI::UsbmuxdAddr::default_new();
auto prov_res = IdeviceFFI::Provider::usbmuxd_new(
std::move(addr), /*tag*/ 0, udid.unwrap(), id.unwrap(), "reeeeeeeee");
if_let_err(prov_res, e, {
std::cerr << "provider failed: " << e.message << "\n";
return 1;
}
});
auto& prov = prov_res.unwrap();
auto client = IdeviceFFI::Lockdown::connect(*prov, e);
if (!client) {
auto client_res = IdeviceFFI::Lockdown::connect(prov);
if_let_err(client_res, e, {
std::cerr << "lockdown connect failed: " << e.message << "\n";
return 1;
}
});
auto& client = client_res.unwrap();
auto pf = prov->get_pairing_file(e);
if (!pf) {
auto pf = prov.get_pairing_file();
if_let_err(pf, e, {
std::cerr << "failed to get pairing file: " << e.message << "\n";
return 1;
}
client->start_session(*pf, e);
});
client.start_session(pf.unwrap());
auto values = client->get_value(NULL, NULL, e);
if (!values) {
std::cerr << "get values failed: " << e.message << "\n";
return 1;
}
PList::Dictionary res = PList::Dictionary(*values);
std::cout << res.ToXml();
auto values = client.get_value(NULL, NULL);
match_result(
values,
ok_val,
{
PList::Dictionary res = PList::Dictionary(ok_val);
std::cout << res.ToXml();
},
e,
{
std::cerr << "get values failed: " << e.message << "\n";
return 1;
});
}