Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Havar
asn1c
Commits
c2350118
Commit
c2350118
authored
Mar 29, 2005
by
Lev Walkin
Browse files
proper XER encoding of native enumerated type
parent
84109519
Changes
3
Hide whitespace changes
Inline
Side-by-side
skeletons/INTEGER.c
View file @
c2350118
...
...
@@ -6,7 +6,6 @@
#include <asn_internal.h>
#include <INTEGER.h>
#include <asn_codecs_prim.h>
/* Encoder and decoder of a primitive type */
#include <assert.h>
#include <errno.h>
/*
...
...
@@ -93,8 +92,7 @@ INTEGER_encode_der(asn_TYPE_descriptor_t *td, void *sptr,
return
der_encode_primitive
(
td
,
sptr
,
tag_mode
,
tag
,
cb
,
app_key
);
}
static
const
asn_INTEGER_enum_map_t
*
INTEGER__map_value2enum
(
asn_INTEGER_specifics_t
*
specs
,
long
value
);
static
const
asn_INTEGER_enum_map_t
*
INTEGER__map_enum2value
(
asn_INTEGER_specifics_t
*
specs
,
const
char
*
lstart
,
const
char
*
lstop
);
static
const
asn_INTEGER_enum_map_t
*
INTEGER_map_enum2value
(
asn_INTEGER_specifics_t
*
specs
,
const
char
*
lstart
,
const
char
*
lstop
);
/*
* INTEGER specific human-readable output.
...
...
@@ -139,7 +137,7 @@ INTEGER__dump(asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_by
accum
=
(
accum
<<
8
)
|
*
buf
;
}
el
=
INTEGER_
_
map_value2enum
(
specs
,
accum
);
el
=
INTEGER_map_value2enum
(
specs
,
accum
);
if
(
el
)
{
scrsize
=
el
->
enum_len
+
32
;
scr
=
(
char
*
)
alloca
(
scrsize
);
...
...
@@ -240,7 +238,7 @@ INTEGER__compar_enum2value(const void *kp, const void *am) {
}
static
const
asn_INTEGER_enum_map_t
*
INTEGER_
_
map_enum2value
(
asn_INTEGER_specifics_t
*
specs
,
const
char
*
lstart
,
const
char
*
lstop
)
{
INTEGER_map_enum2value
(
asn_INTEGER_specifics_t
*
specs
,
const
char
*
lstart
,
const
char
*
lstop
)
{
asn_INTEGER_enum_map_t
*
el_found
;
int
count
=
specs
?
specs
->
map_count
:
0
;
struct
e2v_key
key
;
...
...
@@ -287,8 +285,8 @@ INTEGER__compar_value2enum(const void *kp, const void *am) {
else
return
1
;
}
static
const
asn_INTEGER_enum_map_t
*
INTEGER_
_
map_value2enum
(
asn_INTEGER_specifics_t
*
specs
,
long
value
)
{
const
asn_INTEGER_enum_map_t
*
INTEGER_map_value2enum
(
asn_INTEGER_specifics_t
*
specs
,
long
value
)
{
int
count
=
specs
?
specs
->
map_count
:
0
;
if
(
!
count
)
return
0
;
return
(
asn_INTEGER_enum_map_t
*
)
bsearch
(
&
value
,
specs
->
value2enum
,
...
...
@@ -366,7 +364,7 @@ INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chun
case
0x3c
:
/* '<' */
if
(
state
==
ST_SKIPSPACE
)
{
const
asn_INTEGER_enum_map_t
*
el
;
el
=
INTEGER_
_
map_enum2value
(
el
=
INTEGER_map_enum2value
(
(
asn_INTEGER_specifics_t
*
)
td
->
specifics
,
lstart
,
lstop
);
if
(
el
)
{
...
...
skeletons/NativeEnumerated.c
View file @
c2350118
...
...
@@ -27,7 +27,7 @@ asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = {
NativeInteger_decode_ber
,
NativeInteger_encode_der
,
NativeInteger_decode_xer
,
Native
Integer
_encode_xer
,
Native
Enumerated
_encode_xer
,
0
,
/* Use generic outmost tag fetcher */
asn_DEF_NativeEnumerated_tags
,
sizeof
(
asn_DEF_NativeEnumerated_tags
)
/
sizeof
(
asn_DEF_NativeEnumerated_tags
[
0
]),
...
...
@@ -37,3 +37,35 @@ asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = {
0
/* No specifics */
};
asn_enc_rval_t
NativeEnumerated_encode_xer
(
asn_TYPE_descriptor_t
*
td
,
void
*
sptr
,
int
ilevel
,
enum
xer_encoder_flags_e
flags
,
asn_app_consume_bytes_f
*
cb
,
void
*
app_key
)
{
asn_INTEGER_specifics_t
*
specs
=
(
asn_INTEGER_specifics_t
*
)
td
->
specifics
;
asn_enc_rval_t
er
;
const
long
*
native
=
(
const
long
*
)
sptr
;
const
asn_INTEGER_enum_map_t
*
el
;
(
void
)
ilevel
;
(
void
)
flags
;
if
(
!
native
)
_ASN_ENCODE_FAILED
;
el
=
INTEGER_map_value2enum
(
specs
,
*
native
);
if
(
el
)
{
size_t
srcsize
=
el
->
enum_len
+
5
;
char
*
src
=
(
char
*
)
alloca
(
srcsize
);
er
.
encoded
=
snprintf
(
src
,
srcsize
,
"<%s/>"
,
el
->
enum_name
);
assert
(
er
.
encoded
>
0
&&
(
size_t
)
er
.
encoded
<
srcsize
);
if
(
cb
(
src
,
er
.
encoded
,
app_key
)
<
0
)
_ASN_ENCODE_FAILED
;
return
er
;
}
else
{
ASN_DEBUG
(
"ASN.1 forbids dealing with "
"unknown value of ENUMERATED type"
);
_ASN_ENCODE_FAILED
;
}
return
er
;
}
skeletons/NativeEnumerated.h
View file @
c2350118
/*-
* Copyright (c) 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
* Copyright (c) 2004
, 2005
Lev Walkin <vlm@lionet.info>. All rights reserved.
* Redistribution and modifications are permitted subject to BSD license.
*/
/*
...
...
@@ -16,4 +16,6 @@
extern
asn_TYPE_descriptor_t
asn_DEF_NativeEnumerated
;
xer_type_encoder_f
NativeEnumerated_encode_xer
;
#endif
/* _NativeEnumerated_H_ */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment