From d043915a29e73635f532c9e4184f64b70a8a4595 Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Wed, 2 Oct 2024 01:00:04 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20impl=C3=A9mentation=20partielle=20de=20?= =?UTF-8?q?la=20fonction=20get=5Fconfig=20et=20de=20ses=20erreurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/fsv/src/ssv/errors_ssv.rs | 6 ++++++ crates/fsv/src/ssv/mod.rs | 35 ++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/crates/fsv/src/ssv/errors_ssv.rs b/crates/fsv/src/ssv/errors_ssv.rs index 350dcd2..6c32fd4 100644 --- a/crates/fsv/src/ssv/errors_ssv.rs +++ b/crates/fsv/src/ssv/errors_ssv.rs @@ -14,6 +14,12 @@ pub enum SSVErrorCodes { CPSInvalid = 0xF004, #[error("La Carte du Professionnel de Santé est retirée du lecteur.")] CPSRemoved = 0xF005, + /// - Sécurisation d'une série de lots en cours. + /// - Pour les fonctions TLA (sauf Identifier TLA) : Cette erreur survient lorsque le simulateur TLA est en mode 1.50. + /// - Lire Date Lecteur, Mettre à jour Date Lecteur, Lire Droits Vitale : Cette erreur peut survenir lorsque le Logiciel Lecteur ne connaît pas la fonction sollicitée, c'est-à-dire si la version du Logiciel Lecteur est antérieure à 2.00. + /// - Décharger Données Bénéficiaires : cette erreur peut survenir pour signaler que le + #[error("F022: Erreur commune à plusieurs fonctions.")] + F022 = 0xF022, #[error("Message du lecteur incohérent. Débrancher et rebrancher le lecteur.")] PCSCInconsistentMessage = 0xF0FF, #[error("Le nom de lecteur fourni ne correspond à aucun lecteur reconnu.")] diff --git a/crates/fsv/src/ssv/mod.rs b/crates/fsv/src/ssv/mod.rs index fdd8d55..d611c4c 100644 --- a/crates/fsv/src/ssv/mod.rs +++ b/crates/fsv/src/ssv/mod.rs @@ -116,6 +116,35 @@ impl SSV { unsafe { libc::free(out_buffer_ptr) }; Ok(()) } + + /// # Get the configuration of the SSV library + /// Implement: SSV_LireConfig + pub fn get_config(&self) -> Result<(), Error> { + let mut buffer_ptr: *mut libc::c_void = ptr::null_mut(); + let mut size: libc::size_t = 0; + + let result = match &self.library { + SsvLibraryVersion::V1_40_13(library) => { + unsafe { library.ssv_lire_config(&mut buffer_ptr, &mut size) }? + }, + SsvLibraryVersion::V1_40_14(library) => { + unsafe { library.ssv_lire_config(&mut buffer_ptr, &mut size) }? + }, + }; + + if result != 0 { + // Free memory + unsafe { libc::free(buffer_ptr) }; + let error = SSVErrorCodes::from(result); + return Err(Error::SSVError(error)); + } + // Print 10 bytes of the buffer + let buffer = unsafe { std::slice::from_raw_parts(buffer_ptr as *const u8, 10) }; + println!("{:?}", buffer); + // Free memory + unsafe { libc::free(buffer_ptr) }; + Ok(()) + } } #[cfg(test)] @@ -171,7 +200,9 @@ mod tests { } #[test] - fn test_ssv() { - assert_eq!("ssv", "ssv"); + fn test_get_config() -> Result<()> { + let lib = setup::init()?; + lib.get_config()?; + Ok(()) } }