use crate::ffi::arrays::*;
use crate::ffi::ipc::req::PermissionSet;
use crate::ffi::MDataInfo;
use ffi_utils::vec_from_raw_parts;
use std::ffi::CString;
use std::os::raw::c_char;
use std::ptr;
#[repr(C)]
#[derive(Clone)]
pub struct AppKeys {
pub full_id: *const u8,
pub full_id_len: usize,
pub enc_key: SymSecretKey,
pub enc_public_key: AsymPublicKey,
pub enc_secret_key: *const u8,
pub enc_secret_key_len: usize,
}
impl Drop for AppKeys {
fn drop(&mut self) {
unsafe {
let _ = vec_from_raw_parts(self.full_id as *mut u8, self.full_id_len);
let _ = vec_from_raw_parts(self.enc_secret_key as *mut u8, self.enc_secret_key_len);
}
}
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct AccessContInfo {
pub id: XorNameArray,
pub tag: u64,
pub nonce: SymNonce,
}
#[repr(C)]
pub struct ContainerInfo {
pub name: *const c_char,
pub mdata_info: MDataInfo,
pub permissions: PermissionSet,
}
impl Drop for ContainerInfo {
fn drop(&mut self) {
unsafe {
let _ = CString::from_raw(self.name as *mut _);
}
}
}
#[repr(C)]
pub struct AccessContainerEntry {
pub containers: *const ContainerInfo,
pub containers_len: usize,
}
impl Drop for AccessContainerEntry {
fn drop(&mut self) {
unsafe {
let _ = vec_from_raw_parts(self.containers as *mut ContainerInfo, self.containers_len);
}
}
}
#[repr(C)]
pub struct AuthGranted {
pub app_keys: AppKeys,
pub access_container_info: AccessContInfo,
pub access_container_entry: AccessContainerEntry,
pub bootstrap_config: *const u8,
pub bootstrap_config_len: usize,
}
impl Drop for AuthGranted {
fn drop(&mut self) {
unsafe {
let _ = vec_from_raw_parts(self.bootstrap_config as *mut u8, self.bootstrap_config_len);
}
}
}
#[repr(C)]
pub struct AppAccess {
pub sign_key: BlsPublicKey,
pub permissions: PermissionSet,
pub name: *const c_char,
pub app_id: *const c_char,
}
impl Drop for AppAccess {
fn drop(&mut self) {
unsafe {
if !self.name.is_null() {
let _ = CString::from_raw(self.name as *mut _);
}
if !self.app_id.is_null() {
let _ = CString::from_raw(self.app_id as *mut _);
}
}
}
}
#[repr(C)]
pub struct MetadataResponse {
pub name: *const c_char,
pub description: *const c_char,
pub xor_name: XorNameArray,
pub type_tag: u64,
}
impl MetadataResponse {
pub fn invalid() -> Self {
Self {
name: ptr::null(),
description: ptr::null(),
xor_name: Default::default(),
type_tag: 0,
}
}
}
impl Drop for MetadataResponse {
fn drop(&mut self) {
unsafe {
if !self.name.is_null() {
let _ = CString::from_raw(self.name as *mut _);
}
if !self.description.is_null() {
let _ = CString::from_raw(self.description as *mut _);
}
}
}
}
#[repr(C)]
#[derive(Debug)]
pub struct MDataKey {
pub key: *const u8,
pub key_len: usize,
}
impl Drop for MDataKey {
#[allow(unsafe_code)]
fn drop(&mut self) {
let _ = unsafe { vec_from_raw_parts(self.key as *mut u8, self.key_len) };
}
}
#[repr(C)]
#[derive(Debug)]
pub struct MDataValue {
pub content: *const u8,
pub content_len: usize,
pub entry_version: u64,
}
impl Drop for MDataValue {
#[allow(unsafe_code)]
fn drop(&mut self) {
let _ = unsafe { vec_from_raw_parts(self.content as *mut u8, self.content_len) };
}
}
#[repr(C)]
#[derive(Debug)]
pub struct MDataEntry {
pub key: MDataKey,
pub value: MDataValue,
}