unlock: finalize Unlocker 3-capability contract
Rename the trait to a generic, drive-neutral capability contract so future unlockers don't conform to LibreDrive specifics: - unlock(...) -> unlock_drive(...) (the one required capability) - read_vid(...) -> read_volume_id(...) (no-op default) - add set_max_read_speed(...) (no-op default) The trait doc now states the contract in one place: unlockers are optional drive-capability providers; the AACS layer is the always-present baseline and falls back to the full cert handshake when no unlocker matches. Implement only the capabilities your drive supports. Registry: route_unlock now calls unlock_drive; unlocker_read_vid renamed to unlocker_read_volume_id; add unlocker_set_max_read_speed (mirrors route_unlock resolution, first matching unlocker, no-op if none match). drive::init calls it on a matched drive in the post-unlock path; a speed-set failure is logged and does not fail the rip. encrypt.rs handshake updated to the new VID helper. Tests updated for the renames; added a set_max_read_speed routing test (match invokes, no-match is a safe no-op).
This commit is contained in:
+1
-1
@@ -76,7 +76,7 @@ impl Disc {
|
||||
// DriveId first releases the immutable borrow before we hand the
|
||||
// mutable transport to the registry.
|
||||
let drive_id = session.drive_id.clone();
|
||||
match crate::unlock::unlocker_read_vid(session.scsi_mut(), &drive_id) {
|
||||
match crate::unlock::unlocker_read_volume_id(session.scsi_mut(), &drive_id) {
|
||||
Ok(Some(volume_id)) => {
|
||||
tracing::debug!(
|
||||
target: "freemkv::disc",
|
||||
|
||||
Reference in New Issue
Block a user