Newer
Older
/*
* Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
* From ASN.1 module "IEEE1609dot2BaseTypes"
* found in "../asn1/1609Dot2-ASN1/asn1c/IEEE1609dot2BaseTypes.asn"
* `asn1c -S ../../asn1c/skeletons -fcompound-names -no-gen-PER -gen-autotools -pdu=EtsiTs103097Data -pdu=EnrolmentRequestMessage -pdu=EnrolmentResponseMessage -pdu=AuthorizationRequestMessage -pdu=AuthorizationRequestMessageWithPop -pdu=AuthorizationResponseMessage -pdu=CertificateRevocationListMessage -pdu=TlmCertificateTrustListMessage -pdu=RcaCertificateTrustListMessage -pdu=AuthorizationValidationRequestMessage -pdu=AuthorizationValidationResponseMessage -pdu=CaCertificateRequestMessage`
*/
#include "Time64.h"
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
int
Time64_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
asn_app_constraint_failed_f *ctfailcb, void *app_key) {
const Uint64_t *st = (const Uint64_t *)sptr;
long value;
if(!sptr) {
ASN__CTFAIL(app_key, td, sptr,
"%s: value not given (%s:%d)",
td->name, __FILE__, __LINE__);
return -1;
}
if(asn_INTEGER2long(st, &value)) {
ASN__CTFAIL(app_key, td, sptr,
"%s: value too large (%s:%d)",
td->name, __FILE__, __LINE__);
return -1;
}
if((value >= 0 && value <= 18446744073709551615)) {
/* Constraint check succeeded */
return 0;
} else {
ASN__CTFAIL(app_key, td, sptr,
"%s: constraint failed (%s:%d)",
td->name, __FILE__, __LINE__);
return -1;
}
}
/*
* This type is implemented using Uint64,
* so here we adjust the DEF accordingly.
*/
static asn_oer_constraints_t asn_OER_type_Time64_constr_1 CC_NOTUSED = {
{ 8, 1 } /* (0..18446744073709551615) */,
-1};
static const ber_tlv_tag_t asn_DEF_Time64_tags_1[] = {
(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
};
asn_TYPE_operation_t asn_OP_Time64 = {
INTEGER_free,
Time64_print,
INTEGER_compare,
ber_decode_primitive,
INTEGER_encode_der,
INTEGER_decode_xer,
INTEGER_encode_xer,
#ifdef ASN_DISABLE_OER_SUPPORT
0,
0,
#else
INTEGER_decode_oer, /* OER decoder */
INTEGER_encode_oer, /* Canonical OER encoder */
#endif /* ASN_DISABLE_OER_SUPPORT */
#ifdef ASN_DISABLE_PER_SUPPORT
0,
0,
#else
INTEGER_decode_uper, /* Unaligned PER decoder */
INTEGER_encode_uper, /* Unaligned PER encoder */
#endif /* ASN_DISABLE_PER_SUPPORT */
INTEGER_random_fill,
0 /* Use generic outmost tag fetcher */
};
asn_TYPE_descriptor_t asn_DEF_Time64 = {
"Time64",
"Time64",
asn_DEF_Time64_tags_1,
sizeof(asn_DEF_Time64_tags_1)
/sizeof(asn_DEF_Time64_tags_1[0]), /* 1 */
asn_DEF_Time64_tags_1, /* Same as above */
sizeof(asn_DEF_Time64_tags_1)
/sizeof(asn_DEF_Time64_tags_1[0]), /* 1 */
{ &asn_OER_type_Time64_constr_1, 0, Time64_constraint },
0, 0, /* No members */
0 /* No specifics */
};
int Time64_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
asn_app_consume_bytes_f *cb, void *app_key) {
const asn_INTEGER_specifics_t *specs =
(const asn_INTEGER_specifics_t *)td->specifics;
const INTEGER_t *st = (const INTEGER_t *)sptr;
int ret = INTEGER_print(td, sptr, ilevel, cb, app_key);
if (ret == 0){
if (st && st->buf){
intmax_t value;
if (specs && specs->field_unsigned)
ret = asn_INTEGER2umax(st, (uintmax_t *)&value);
else
ret = asn_INTEGER2imax(st, &value);
if (ret == 0) {
const char * s = stritsdate32(value);
if (cb(" -- ", 4, app_key) < 0) return -1;
if (cb(s, strlen(s), app_key) < 0) return -1;
}
}
}
return ret;
}