src
OBJECT_IDENTIFIER_rfill.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
*/
6
#include <
etsi_its_cam_ts_coding/asn_internal.h
>
7
#include <
etsi_its_cam_ts_coding/OBJECT_IDENTIFIER.h
>
8
9
/*
10
* Generate values from the list of interesting values, or just a random
11
* value up to the upper limit.
12
*/
13
static
asn_oid_arc_t
14
OBJECT_IDENTIFIER__biased_random_arc
(
asn_oid_arc_t
upper_bound) {
15
const
asn_oid_arc_t
values[] = {0, 1, 127, 128, 129, 254, 255, 256};
16
size_t
idx;
17
18
switch
(
asn_random_between
(0, 2)) {
19
case
0:
20
idx =
asn_random_between
(0,
sizeof
(values) /
sizeof
(values[0]) - 1);
21
if
(values[idx] < upper_bound) {
22
return
values[idx];
23
}
24
/* Fall through */
25
case
1:
26
return
asn_random_between
(0, upper_bound);
27
case
2:
28
default
:
29
return
upper_bound;
30
}
31
}
32
33
asn_random_fill_result_t
34
OBJECT_IDENTIFIER_random_fill
(
const
asn_TYPE_descriptor_t
*td,
void
**sptr,
35
const
asn_encoding_constraints_t
*constraints,
36
size_t
max_length) {
37
asn_random_fill_result_t
result_ok = {ARFILL_OK, 1};
38
asn_random_fill_result_t
result_failed = {ARFILL_FAILED, 0};
39
asn_random_fill_result_t
result_skipped = {ARFILL_SKIPPED, 0};
40
OBJECT_IDENTIFIER_t
*st;
41
asn_oid_arc_t
arcs[5];
42
size_t
arcs_len =
asn_random_between
(2, 5);
43
size_t
i;
44
45
(void)constraints;
46
47
if
(max_length < arcs_len)
return
result_skipped;
48
49
if
(*sptr) {
50
st = *sptr;
51
}
else
{
52
st =
CALLOC
(1,
sizeof
(*st));
53
}
54
55
arcs[0] =
asn_random_between
(0, 2);
56
arcs[1] =
OBJECT_IDENTIFIER__biased_random_arc
(
57
arcs[0] <= 1 ? 39 : (
ASN_OID_ARC_MAX
- 80));
58
for
(i = 2; i < arcs_len; i++) {
59
arcs[i] =
OBJECT_IDENTIFIER__biased_random_arc
(
ASN_OID_ARC_MAX
);
60
}
61
62
if
(
OBJECT_IDENTIFIER_set_arcs
(st, arcs, arcs_len)) {
63
if
(st != *sptr) {
64
ASN_STRUCT_FREE
(*td, st);
65
}
66
return
result_failed;
67
}
68
69
*sptr = st;
70
71
result_ok.
length
= st->
size
;
72
return
result_ok;
73
}
ASN_STRUCT_FREE
#define ASN_STRUCT_FREE(asn_DEF, ptr)
Definition:
constr_TYPE.h:102
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
ASN__PRIMITIVE_TYPE_s::size
size_t size
Definition:
asn_codecs_prim.h:16
asn_oid_arc_t
uint32_t asn_oid_arc_t
Definition:
OBJECT_IDENTIFIER.h:16
CALLOC
#define CALLOC(nmemb, size)
Definition:
asn_internal.h:37
asn_random_fill_result_s::length
size_t length
Definition:
asn_random_fill.h:30
OBJECT_IDENTIFIER.h
asn_TYPE_descriptor_s
Definition:
constr_TYPE.h:224
OBJECT_IDENTIFIER_random_fill
asn_random_fill_result_t OBJECT_IDENTIFIER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr, const asn_encoding_constraints_t *constraints, size_t max_length)
Definition:
OBJECT_IDENTIFIER_rfill.c:34
asn_random_fill_result_s
Definition:
asn_random_fill.h:24
OBJECT_IDENTIFIER__biased_random_arc
static asn_oid_arc_t OBJECT_IDENTIFIER__biased_random_arc(asn_oid_arc_t upper_bound)
Definition:
OBJECT_IDENTIFIER_rfill.c:14
asn_random_between
intmax_t asn_random_between(intmax_t min, intmax_t max)
Definition:
asn_random_fill.c:38
asn_encoding_constraints_s
Definition:
constr_TYPE.h:208
asn_internal.h
ASN_OID_ARC_MAX
#define ASN_OID_ARC_MAX
Definition:
OBJECT_IDENTIFIER.h:17
etsi_its_cam_ts_coding
Author(s): Jean-Pierre Busch
, Guido Küppers
, Lennart Reiher
autogenerated on Sun May 18 2025 02:21:23