OBJECT_IDENTIFIER_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 #define CQUOTE 0x22
10 
11 static enum jer_pbd_rval
13  const void *chunk_buf, size_t chunk_size) {
15  const char *chunk_end = (const char *)chunk_buf + chunk_size;
16  const char *p = (const char *)chunk_buf;
17  const char *endptr;
18  asn_oid_arc_t s_arcs[10];
19  asn_oid_arc_t *arcs = s_arcs;
20  ssize_t num_arcs;
21  ssize_t ret;
22 
23  (void)td;
24 
25  /* Strip quotes */
26  for (; p < chunk_end; ++p) {
27  if (*p == CQUOTE) {
28  ++p;
29  break;
30  }
31  }
32  --chunk_end;
33  for (; chunk_end >= p; --chunk_end) {
34  if (*chunk_end == CQUOTE)
35  break;
36  }
37  if (chunk_end - p < 0)
38  return JPBD_BROKEN_ENCODING;
39  chunk_size = chunk_end - p;
40  chunk_buf = p;
41 
43  (const char *)chunk_buf, chunk_size, arcs,
44  sizeof(s_arcs) / sizeof(s_arcs[0]), &endptr);
45  if(num_arcs < 0) {
46  /* Expecting more than zero arcs */
47  return JPBD_BROKEN_ENCODING;
48  } else if(num_arcs == 0) {
49  return JPBD_NOT_BODY_IGNORE;
50  }
51  (void)chunk_end;
52  assert(endptr == chunk_end);
53 
54  if((size_t)num_arcs > sizeof(s_arcs)/sizeof(s_arcs[0])) {
55  arcs = (asn_oid_arc_t *)MALLOC(num_arcs * sizeof(asn_oid_arc_t));
56  if(!arcs) return JPBD_SYSTEM_FAILURE;
57  ret = OBJECT_IDENTIFIER_parse_arcs((const char *)chunk_buf, chunk_size,
58  arcs, num_arcs, &endptr);
59  if(ret != num_arcs)
60  return JPBD_SYSTEM_FAILURE; /* assert?.. */
61  }
62 
63  /*
64  * Convert arcs into BER representation.
65  */
66  ret = OBJECT_IDENTIFIER_set_arcs(st, arcs, num_arcs);
67  if(arcs != s_arcs) FREEMEM(arcs);
68 
70 }
71 
74  const asn_TYPE_descriptor_t *td,
75  const asn_jer_constraints_t *constraints,
76  void **sptr, const void *buf_ptr,
77  size_t size) {
78  return jer_decode_primitive(opt_codec_ctx, td,
79  sptr, sizeof(OBJECT_IDENTIFIER_t),
80  buf_ptr, size, OBJECT_IDENTIFIER__jer_body_decode);
81 }
82 
85  const asn_jer_constraints_t *constraints,
86  const void *sptr, int ilevel,
87  enum jer_encoder_flags_e flags,
88  asn_app_consume_bytes_f *cb, void *app_key) {
89  const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr;
90  asn_enc_rval_t er = {0,0,0};
91  ssize_t oid_encoded = 0;
92 
93  (void)ilevel;
94  (void)flags;
95 
96  if(!st || !st->buf) {
98  }
99 
100  ASN__CALLBACK("\"", 1);
101  oid_encoded = OBJECT_IDENTIFIER__dump_body(st, cb, app_key);
102  if(oid_encoded < 0) goto cb_failed;
103  er.encoded += oid_encoded;
104  ASN__CALLBACK("\"", 1);
105 
106  ASN__ENCODED_OK(er);
107 
108 cb_failed:
110 }
JPBD_BODY_CONSUMED
@ JPBD_BODY_CONSUMED
Definition: asn_codecs_prim.h:61
OBJECT_IDENTIFIER_set_arcs
int OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *oid, const asn_oid_arc_t *arcs, size_t arcs_count)
Definition: OBJECT_IDENTIFIER.c:333
ASN__PRIMITIVE_TYPE_s
Definition: asn_codecs_prim.h:14
OBJECT_IDENTIFIER__jer_body_decode
static enum jer_pbd_rval OBJECT_IDENTIFIER__jer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size)
Definition: OBJECT_IDENTIFIER_jer.c:12
OBJECT_IDENTIFIER_parse_arcs
ssize_t OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, ssize_t oid_txt_length, asn_oid_arc_t *arcs, size_t arcs_count, const char **opt_oid_text_end)
Definition: OBJECT_IDENTIFIER.c:421
jer_pbd_rval
jer_pbd_rval
Definition: asn_codecs_prim.h:56
JPBD_SYSTEM_FAILURE
@ JPBD_SYSTEM_FAILURE
Definition: asn_codecs_prim.h:57
ASN__ENCODED_OK
#define ASN__ENCODED_OK(rval)
Definition: asn_codecs.h:67
asn_jer_constraints_s
Definition: jer_support.h:18
asn_oid_arc_t
uint32_t asn_oid_arc_t
Definition: OBJECT_IDENTIFIER.h:16
JPBD_NOT_BODY_IGNORE
@ JPBD_NOT_BODY_IGNORE
Definition: asn_codecs_prim.h:60
asn_enc_rval_s
Definition: asn_codecs.h:41
jer_encoder_flags_e
jer_encoder_flags_e
Definition: jer_encoder.h:20
CQUOTE
#define CQUOTE
Definition: OBJECT_IDENTIFIER_jer.c:9
ASN__CALLBACK
#define ASN__CALLBACK(buf, size)
Definition: asn_internal.h:108
FREEMEM
#define FREEMEM(ptr)
Definition: asn_internal.h:40
OBJECT_IDENTIFIER.h
ASN__ENCODE_FAILED
#define ASN__ENCODE_FAILED
Definition: asn_codecs.h:59
asn_TYPE_descriptor_s
Definition: constr_TYPE.h:224
ASN__PRIMITIVE_TYPE_s::buf
uint8_t * buf
Definition: asn_codecs_prim.h:15
jer_decode_primitive
asn_dec_rval_t jer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, size_t struct_size, const void *buf_ptr, size_t size, jer_primitive_body_decoder_f *prim_body_decoder)
Definition: asn_codecs_prim_jer.c:118
MALLOC
#define MALLOC(size)
Definition: asn_internal.h:38
JPBD_BROKEN_ENCODING
@ JPBD_BROKEN_ENCODING
Definition: asn_codecs_prim.h:59
OBJECT_IDENTIFIER_decode_jer
asn_dec_rval_t OBJECT_IDENTIFIER_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: OBJECT_IDENTIFIER_jer.c:73
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_codec_ctx_s
Definition: asn_codecs.h:23
asn_dec_rval_s
Definition: asn_codecs.h:86
OBJECT_IDENTIFIER__dump_body
ssize_t OBJECT_IDENTIFIER__dump_body(const OBJECT_IDENTIFIER_t *st, asn_app_consume_bytes_f *cb, void *app_key)
Definition: OBJECT_IDENTIFIER.c:188
asn_enc_rval_s::encoded
ssize_t encoded
Definition: asn_codecs.h:47
OBJECT_IDENTIFIER_encode_jer
asn_enc_rval_t OBJECT_IDENTIFIER_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: OBJECT_IDENTIFIER_jer.c:84


etsi_its_denm_coding
Author(s): Jean-Pierre Busch , Guido Küppers , Lennart Reiher
autogenerated on Sun May 18 2025 02:23:48