/*-
 * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
 * Redistribution and modifications are permitted subject to BSD license.
 */
#ifndef	_BER_DECODER_H_
#define	_BER_DECODER_H_

#include <asn_application.h>

struct asn1_TYPE_descriptor_s;	/* Forward declaration */

/*
 * This structure describes the return value common across the
 * various BER decoders.
 * 
 * Please note that the number of consumed bytes is ALWAYS meaningful,
 * even if code!=RC_OK. This is so to indicate the number of successfully
 * decoded bytes, hence provide a possibility, to fail with more diagnostics
 * (i.e., print the offending remainder of the buffer).
 */
enum ber_dec_rval_code_e {
	RC_OK,		/* Decoded successfully */
	RC_WMORE,	/* More data expected, call again */
	RC_FAIL,	/* Failure to decode data */
};
typedef struct ber_dec_rval_s {
	enum ber_dec_rval_code_e code;	/* Result code */
	size_t consumed;		/* Number of bytes consumed */
} ber_dec_rval_t;

/*
 * A context for decoding BER across buffer boundaries.
 */
typedef struct ber_dec_ctx_s {
	int phase;	/* Decoding phase */
	int step;	/* Elementary step of a phase */
	ber_tlv_len_t left;	/* Number of bytes left, -1 for indefinite */
	void *ptr;	/* Decoder-specific stuff */
} ber_dec_ctx_t;

/*
 * The BER decoder of any type.
 * This function may be invoked directly from the application.
 */
ber_dec_rval_t ber_decode(struct asn1_TYPE_descriptor_s *type_descriptor,
	void **struct_ptr,	/* Pointer to a target structure's pointer */
	void *buffer,		/* Data to be decoded */
	size_t size		/* Size of that buffer */
	);

/*
 * Type of generic function which decodes the byte stream into the structure.
 */
typedef ber_dec_rval_t (ber_type_decoder_f)(
		struct asn1_TYPE_descriptor_s *type_descriptor,
		void **type_structure, void *buf_ptr, size_t size,
		int tag_mode);

/*******************************
 * INTERNALLY USEFUL FUNCTIONS *
 *******************************/

/*
 * Check that all tags correspond to the type definition (as given in head).
 * On return, last_length would contain either a non-negative length of the
 * value part of the last TLV, or the negative number of expected
 * "end of content" sequences. The number may only be negative if the
 * head->last_tag_form is non-zero.
 */
ber_dec_rval_t ber_check_tags(struct asn1_TYPE_descriptor_s *type_dsc,
		ber_dec_ctx_t *opt_ctx,	/* saved context */
		void *ptr, size_t size,
		int tag_mode,		/* {-1,0,1}: IMPLICIT, no, EXPLICIT */
		ber_tlv_len_t *last_length,
		int *opt_tlv_form);

#endif	/* _BER_DECODER_H_ */
