feat: implémentation partielle de la fonction get_config et de ses erreurs

This commit is contained in:
Florian Briand 2024-10-02 01:00:04 +02:00
parent 6b55a8f976
commit 45124db739
Signed by: florian_briand
GPG Key ID: CC981B9E6B98E70B
2 changed files with 40 additions and 0 deletions

View File

@ -14,6 +14,12 @@ pub enum SSVErrorCodes {
CPSInvalid = 0xF004, CPSInvalid = 0xF004,
#[error("La Carte du Professionnel de Santé est retirée du lecteur.")] #[error("La Carte du Professionnel de Santé est retirée du lecteur.")]
CPSRemoved = 0xF005, 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.")] #[error("Message du lecteur incohérent. Débrancher et rebrancher le lecteur.")]
PCSCInconsistentMessage = 0xF0FF, PCSCInconsistentMessage = 0xF0FF,
#[error("Le nom de lecteur fourni ne correspond à aucun lecteur reconnu.")] #[error("Le nom de lecteur fourni ne correspond à aucun lecteur reconnu.")]

View File

@ -116,6 +116,33 @@ impl SSV {
unsafe { libc::free(out_buffer_ptr) }; unsafe { libc::free(out_buffer_ptr) };
Ok(()) Ok(())
} }
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)] #[cfg(test)]
@ -170,6 +197,13 @@ mod tests {
Ok(()) Ok(())
} }
#[test]
fn test_get_config() -> Result<()> {
let lib = setup::init()?;
lib.get_config()?;
Ok(())
}
#[test] #[test]
fn test_ssv() { fn test_ssv() {
assert_eq!("ssv", "ssv"); assert_eq!("ssv", "ssv");