// Jackson Coxson #pragma once #include #include #include #include #include namespace IdeviceFFI { class FfiError; class PairingFile; // has: IdevicePairingFile* raw() const; void // release_on_success(); class UsbmuxdAddr; // has: UsbmuxdAddrHandle* raw() const; void // release_on_success(); using ProviderPtr = std::unique_ptr>; class Provider { public: static Result tcp_new(const idevice_sockaddr* ip, PairingFile&& pairing, const std::string& label); static Result usbmuxd_new(UsbmuxdAddr&& addr, uint32_t tag, const std::string& udid, uint32_t device_id, const std::string& label); ~Provider() noexcept = default; Provider(Provider&&) noexcept = default; Provider& operator=(Provider&&) noexcept = default; Provider(const Provider&) = delete; Provider& operator=(const Provider&) = delete; Result get_pairing_file(); IdeviceProviderHandle* raw() const noexcept { return handle_.get(); } static Provider adopt(IdeviceProviderHandle* h) noexcept { return Provider(h); } IdeviceProviderHandle* release() noexcept { return handle_.release(); } private: explicit Provider(IdeviceProviderHandle* h) noexcept : handle_(h) {} ProviderPtr handle_{}; }; } // namespace IdeviceFFI