#include #include #include #include #include "ppport.h" #include #include #include #include #include "perl_gpgme_data.h" #define PERL_GPGME_CALL_BOOT(name) \ { \ EXTERN_C XS(name); \ _perl_gpgme_call_xs (aTHX_ name, cv, mark); \ } #ifdef PERL_IMPLICIT_CONTEXT #define dPERL_GPGME_CALLBACK_MARSHAL_SP \ SV **sp; #define PERL_GPGME_MARSHAL_INIT(cb) \ PERL_SET_CONTEXT (cb->priv); \ SPAGAIN; #else #define dPERL_GPGME_CALLBACK_MARSHAL_SP \ dSP; #define PERL_GPGME_MARSHAL_INIT(cb) \ /* nothing to do */ #endif typedef gpgme_ctx_t perl_gpgme_ctx_or_null_t; typedef struct perl_gpgme_status_code_map_St { gpgme_status_code_t status; const char *string; } perl_gpgme_status_code_map_t; typedef enum { PERL_GPGME_CALLBACK_PARAM_TYPE_STR, PERL_GPGME_CALLBACK_PARAM_TYPE_INT, PERL_GPGME_CALLBACK_PARAM_TYPE_CHAR, PERL_GPGME_CALLBACK_PARAM_TYPE_STATUS } perl_gpgme_callback_param_type_t; typedef enum { PERL_GPGME_CALLBACK_RETVAL_TYPE_STR } perl_gpgme_callback_retval_type_t; typedef void * perl_gpgme_callback_retval_t; typedef struct perl_gpgme_callback_St { SV *func; SV *data; SV *obj; int n_params; perl_gpgme_callback_param_type_t *param_types; int n_retvals; perl_gpgme_callback_retval_type_t *retval_types; void *priv; } perl_gpgme_callback_t; void _perl_gpgme_call_xs (pTHX_ void (*subaddr) (pTHX_ CV *cv), CV *cv, SV **mark); SV *perl_gpgme_new_sv_from_ptr (void *ptr, const char *class); void *perl_gpgme_get_ptr_from_sv (SV *sv, const char *class); MAGIC *perl_gpgme_get_magic_from_sv (SV *sv, const char *class); void perl_gpgme_assert_error (gpgme_error_t err); perl_gpgme_callback_t *perl_gpgme_callback_new (SV *func, SV *data, SV *obj, int n_params, perl_gpgme_callback_param_type_t param_types[], int n_retvals, perl_gpgme_callback_retval_type_t retval_types[]); void perl_gpgme_callback_destroy (perl_gpgme_callback_t *cb); void perl_gpgme_callback_invoke (perl_gpgme_callback_t *cb, perl_gpgme_callback_retval_t *retvals, ...); SV *perl_gpgme_protocol_to_string (gpgme_protocol_t protocol); void perl_gpgme_hv_store (HV *hv, const char *key, I32 key_len, SV *val); SV *perl_gpgme_hashref_from_engine_info (gpgme_engine_info_t info); SV *perl_gpgme_hashref_from_subkey (gpgme_subkey_t subkey); SV *perl_gpgme_hashref_from_uid (gpgme_user_id_t uid); SV *perl_gpgme_avref_from_notation_flags (gpgme_sig_notation_flags_t flags); SV *perl_gpgme_validity_to_string (gpgme_validity_t validity); SV *perl_gpgme_array_ref_from_signatures (gpgme_key_sig_t sig); SV *perl_gpgme_hashref_from_signature (gpgme_key_sig_t sig); SV *perl_gpgme_array_ref_from_notations (gpgme_sig_notation_t notations); SV *perl_gpgme_hashref_from_notation (gpgme_sig_notation_t notation); SV *perl_gpgme_hashref_from_verify_result (gpgme_verify_result_t result); SV *perl_gpgme_array_ref_from_verify_signatures (gpgme_signature_t sigs); SV *perl_gpgme_hashref_from_verify_signature (gpgme_signature_t sig); SV *perl_gpgme_sigsum_to_string (gpgme_sigsum_t summary); SV *perl_gpgme_hash_algo_to_string (gpgme_hash_algo_t algo); SV *perl_gpgme_hashref_from_trust_item (gpgme_trust_item_t item); SV *perl_gpgme_sv_from_status_code (gpgme_status_code_t status); SV *perl_gpgme_genkey_result_to_sv (gpgme_genkey_result_t result);