SIM-115: update simulator to use latest E2SM KPM version 3
[sim/e2-interface.git] / e2sim / asn1c / NULL_ber.c
1 /*
2  * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
3  * All rights reserved.
4  * Redistribution and modifications are permitted subject to BSD license.
5  */
6 #include <asn_internal.h>
7 #include <NULL.h>
8
9 /*
10  * Decode NULL type.
11  */
12 asn_dec_rval_t
13 NULL_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
14                 const asn_TYPE_descriptor_t *td, void **bool_value,
15                 const void *buf_ptr, size_t size, int tag_mode) {
16     NULL_t *st = (NULL_t *)*bool_value;
17     asn_dec_rval_t rval;
18     ber_tlv_len_t length;
19
20     if(st == NULL) {
21         st = (NULL_t *)(*bool_value = CALLOC(1, sizeof(*st)));
22         if(st == NULL) {
23             rval.code = RC_FAIL;
24             rval.consumed = 0;
25             return rval;
26         }
27     }
28
29     ASN_DEBUG("Decoding %s as NULL (tm=%d)", td->name, tag_mode);
30
31     /*
32      * Check tags.
33      */
34     rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, tag_mode, 0,
35                           &length, 0);
36     if(rval.code != RC_OK) {
37         return rval;
38     }
39
40     // X.690-201508, #8.8.2, length shall be zero.
41     if(length != 0) {
42         ASN_DEBUG("Decoding %s as NULL failed: too much data", td->name);
43         rval.code = RC_FAIL;
44         rval.consumed = 0;
45         return rval;
46     }
47
48     return rval;
49 }
50
51 asn_enc_rval_t
52 NULL_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode,
53                 ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) {
54     asn_enc_rval_t erval = {0,0,0};
55
56     erval.encoded = der_write_tags(td, 0, tag_mode, 0, tag, cb, app_key);
57     if(erval.encoded == -1) {
58         erval.failed_type = td;
59         erval.structure_ptr = ptr;
60     }
61
62     ASN__ENCODED_OK(erval);
63 }