+++ /dev/null
-/*-
- * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
- * Redistribution and modifications are permitted subject to BSD license.
- */
-/*
- * Application-level ASN.1 callbacks.
- */
-#ifndef ASN_APPLICATION_H
-#define ASN_APPLICATION_H
-
-#include "asn_system.h" /* for platform-dependent types */
-#include "asn_codecs.h" /* for ASN.1 codecs specifics */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * A selection of ASN.1 Transfer Syntaxes to use with generalized
- * encoders and decoders declared further in this .h file.
- */
-enum asn_transfer_syntax {
- /* Avoid appearance of a default transfer syntax. */
- ATS_INVALID = 0,
- /* Plaintext output (not conforming to any standard), for debugging. */
- ATS_NONSTANDARD_PLAINTEXT,
- /* Returns a randomly generated structure. */
- ATS_RANDOM,
- /*
- * X.690:
- * BER: Basic Encoding Rules.
- * DER: Distinguished Encoding Rules.
- * CER: Canonical Encoding Rules.
- * DER and CER are more strict variants of BER.
- */
- ATS_BER,
- ATS_DER,
- ATS_CER, /* Only decoding is supported */
- /*
- * X.696:
- * OER: Octet Encoding Rules.
- * CANONICAL-OER is a more strict variant of BASIC-OER.
- */
- ATS_BASIC_OER,
- ATS_CANONICAL_OER,
- /*
- * X.691:
- * PER: Packed Encoding Rules.
- * CANONICAL-PER is a more strict variant of BASIC-PER.
- * NOTE: Produces or consumes a complete encoding (X.691 (08/2015) #11.1).
- */
- ATS_UNALIGNED_BASIC_PER,
- ATS_UNALIGNED_CANONICAL_PER,
- ATS_ALIGNED_BASIC_PER,
- ATS_ALIGNED_CANONICAL_PER,
- /*
- * X.693:
- * XER: XML Encoding Rules.
- * CANONICAL-XER is a more strict variant of BASIC-XER.
- */
- ATS_BASIC_XER,
- ATS_CANONICAL_XER
-};
-
-/*
- * A generic encoder for any supported transfer syntax.
- * RETURN VALUES:
- * The (.encoded) field of the return value is REDEFINED to mean the following:
- * >=0: The computed size of the encoded data. Can exceed the (buffer_size).
- * -1: Error encoding the structure. See the error code in (errno):
- * EINVAL: Incorrect parameters to the function, such as NULLs.
- * ENOENT: Encoding transfer syntax is not defined (for this type).
- * EBADF: The structure has invalid form or content constraint failed.
- * The (.failed_type) and (.structure_ptr) MIGHT be set to the appropriate
- * values at the place of failure, if at all possible.
- * WARNING: The (.encoded) field of the return value can exceed the buffer_size.
- * This is similar to snprintf(3) contract which might return values
- * greater than the buffer size.
- */
-asn_enc_rval_t asn_encode_to_buffer(
- const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */
- enum asn_transfer_syntax,
- const struct asn_TYPE_descriptor_s *type_to_encode,
- const void *structure_to_encode, void *buffer, size_t buffer_size);
-
-/*
- * A variant of asn_encode_to_buffer() with automatically allocated buffer.
- * RETURN VALUES:
- * On success, returns a newly allocated (.buffer) containing the whole message.
- * The message size is returned in (.result.encoded).
- * On failure:
- * (.buffer) is NULL,
- * (.result.encoded) as in asn_encode_to_buffer(),
- * The errno codes as in asn_encode_to_buffer(), plus the following:
- * ENOMEM: Memory allocation failed due to system or internal limits.
- * The user is responsible for freeing the (.buffer).
- */
-typedef struct asn_encode_to_new_buffer_result_s {
- void *buffer; /* NULL if failed to encode. */
- asn_enc_rval_t result;
-} asn_encode_to_new_buffer_result_t;
-asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer(
- const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */
- enum asn_transfer_syntax,
- const struct asn_TYPE_descriptor_s *type_to_encode,
- const void *structure_to_encode);
-
-
-/*
- * Generic type of an application-defined callback to return various
- * types of data to the application.
- * EXPECTED RETURN VALUES:
- * -1: Failed to consume bytes. Abort the mission.
- * Non-negative return values indicate success, and ignored.
- */
-typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size,
- void *application_specific_key);
-
-
-/*
- * A generic encoder for any supported transfer syntax.
- * Returns the comprehensive encoding result descriptor (see asn_codecs.h).
- * RETURN VALUES:
- * The negative (.encoded) field of the return values is accompanied with the
- * following error codes (errno):
- * EINVAL: Incorrect parameters to the function, such as NULLs.
- * ENOENT: Encoding transfer syntax is not defined (for this type).
- * EBADF: The structure has invalid form or content constraint failed.
- * EIO: The (callback) has returned negative value during encoding.
- */
-asn_enc_rval_t asn_encode(
- const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */
- enum asn_transfer_syntax,
- const struct asn_TYPE_descriptor_s *type_to_encode,
- const void *structure_to_encode,
- asn_app_consume_bytes_f *callback, void *callback_key);
-
-
-/*
- * A generic decoder for any supported transfer syntax.
- */
-asn_dec_rval_t asn_decode(
- const asn_codec_ctx_t *opt_codec_parameters, enum asn_transfer_syntax,
- const struct asn_TYPE_descriptor_s *type_to_decode,
- void **structure_ptr, /* Pointer to a target structure's pointer */
- const void *buffer, /* Data to be decoded */
- size_t size /* Size of that buffer */
-);
-
-
-/*
- * A callback of this type is called whenever constraint validation fails
- * on some ASN.1 type. See "constraints.h" for more details on constraint
- * validation.
- * This callback specifies a descriptor of the ASN.1 type which failed
- * the constraint check, as well as human readable message on what
- * particular constraint has failed.
- */
-typedef void (asn_app_constraint_failed_f)(void *application_specific_key,
- const struct asn_TYPE_descriptor_s *type_descriptor_which_failed,
- const void *structure_which_failed_ptr,
- const char *error_message_format, ...) CC_PRINTFLIKE(4, 5);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */
-
-#endif /* ASN_APPLICATION_H */