NativeEnumerated_jer.c
Go to the documentation of this file.
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  */
8 
9 /*
10  * Decode the chunk of JSON text encoding ENUMERATED.
11  */
14  const asn_TYPE_descriptor_t *td,
15  const asn_jer_constraints_t *constraints, void **sptr,
16  const void *buf_ptr, size_t size) {
17  const asn_INTEGER_specifics_t *specs =
19  asn_dec_rval_t rval;
20  INTEGER_t st;
21  void *st_ptr = (void *)&st;
22  long *native = (long *)*sptr;
23 
24  if(!native) {
25  native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
26  if(!native) ASN__DECODE_FAILED;
27  }
28 
29  memset(&st, 0, sizeof(st));
30  rval = ENUMERATED_decode_jer(opt_codec_ctx, td, constraints, &st_ptr, buf_ptr, size);
31  if(rval.code == RC_OK) {
32  long l;
33  if((specs&&specs->field_unsigned)
34  ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */
35  : asn_INTEGER2long(&st, &l)) {
36  rval.code = RC_FAIL;
37  rval.consumed = 0;
38  } else {
39  *native = l;
40  }
41  } else {
42  /*
43  * Cannot restart from the middle;
44  * there is no place to save state in the native type.
45  * Request a continuation from the very beginning.
46  */
47  rval.consumed = 0;
48  }
50  return rval;
51 }
52 
55  const asn_jer_constraints_t *constraints,
56  const void *sptr, int ilevel, enum jer_encoder_flags_e flags,
57  asn_app_consume_bytes_f *cb, void *app_key) {
58  const asn_INTEGER_specifics_t *specs =
60  asn_enc_rval_t er = {0,0,0};
61  const long *native = (const long *)sptr;
62  const asn_INTEGER_enum_map_t *el;
63 
64  (void)ilevel;
65  (void)flags;
66 
67  if(!native) ASN__ENCODE_FAILED;
68 
69  el = INTEGER_map_value2enum(specs, *native);
70  if(el) {
71  er.encoded =
72  asn__format_to_callback(cb, app_key, "\"%s\"", el->enum_name);
73  if(er.encoded < 0) ASN__ENCODE_FAILED;
74  ASN__ENCODED_OK(er);
75  } else {
76  ASN_DEBUG(
77  "ASN.1 forbids dealing with "
78  "unknown value of ENUMERATED type");
80  }
81 }
ASN__PRIMITIVE_TYPE_s
Definition: asn_codecs_prim.h:14
INTEGER_map_value2enum
const asn_INTEGER_enum_map_t * INTEGER_map_value2enum(const asn_INTEGER_specifics_t *specs, long value)
Definition: INTEGER.c:190
ASN__ENCODED_OK
#define ASN__ENCODED_OK(rval)
Definition: asn_codecs.h:67
asn_jer_constraints_s
Definition: jer_support.h:18
asn_enc_rval_s
Definition: asn_codecs.h:41
jer_encoder_flags_e
jer_encoder_flags_e
Definition: jer_encoder.h:20
NativeEnumerated.h
CALLOC
#define CALLOC(nmemb, size)
Definition: asn_internal.h:37
NativeEnumerated_decode_jer
asn_dec_rval_t NativeEnumerated_decode_jer(const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td, const asn_jer_constraints_t *constraints, void **sptr, const void *buf_ptr, size_t size)
Definition: NativeEnumerated_jer.c:13
asn_DEF_INTEGER
asn_TYPE_descriptor_t asn_DEF_INTEGER
Definition: INTEGER.c:75
ASN__ENCODE_FAILED
#define ASN__ENCODE_FAILED
Definition: asn_codecs.h:59
asn_TYPE_descriptor_s
Definition: constr_TYPE.h:224
ENUMERATED_decode_jer
jer_type_decoder_f ENUMERATED_decode_jer
Definition: ENUMERATED.h:41
asn_TYPE_descriptor_s::specifics
const void * specifics
Definition: constr_TYPE.h:259
asn_INTEGER_specifics_s
Definition: INTEGER.h:28
RC_OK
@ RC_OK
Definition: asn_codecs.h:82
asn_INTEGER_enum_map_s::enum_name
const char * enum_name
Definition: INTEGER.h:24
asn_app_consume_bytes_f
int() asn_app_consume_bytes_f(const void *buffer, size_t size, void *application_specific_key)
Definition: asn_application.h:124
asn_internal.h
asn__format_to_callback
ssize_t asn__format_to_callback(int(*cb)(const void *, size_t, void *key), void *key, const char *fmt,...)
Definition: asn_internal.c:4
asn_codec_ctx_s
Definition: asn_codecs.h:23
asn_dec_rval_s
Definition: asn_codecs.h:86
ASN__DECODE_FAILED
#define ASN__DECODE_FAILED
Definition: asn_codecs.h:90
NativeEnumerated_encode_jer
asn_enc_rval_t NativeEnumerated_encode_jer(const asn_TYPE_descriptor_t *td, const asn_jer_constraints_t *constraints, const void *sptr, int ilevel, enum jer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key)
Definition: NativeEnumerated_jer.c:54
asn_INTEGER2ulong
int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l)
Definition: INTEGER.c:399
asn_INTEGER_specifics_s::field_unsigned
int field_unsigned
Definition: INTEGER.h:35
ASN_STRUCT_FREE_CONTENTS_ONLY
#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr)
Definition: constr_TYPE.h:123
asn_INTEGER2long
int asn_INTEGER2long(const INTEGER_t *i, long *l)
Definition: INTEGER.c:384
RC_FAIL
@ RC_FAIL
Definition: asn_codecs.h:84
asn_INTEGER_enum_map_s
Definition: INTEGER.h:21


etsi_its_cpm_ts_coding
Author(s): Jean-Pierre Busch , Guido Küppers , Lennart Reiher
autogenerated on Sun May 18 2025 02:22:38