mirror of https://gerrit.osmocom.org/asn1c
testing optional component of a sequence
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1112 59561ff5-6e30-0410-9f3c-9617f08c8826
This commit is contained in:
parent
5566ec4503
commit
23dbb2f347
|
@ -6,19 +6,78 @@
|
|||
#include <assert.h>
|
||||
|
||||
#include <Programming.h>
|
||||
#include <SeqWithMandatory.h>
|
||||
#include <SeqWithOptional.h>
|
||||
|
||||
int
|
||||
main(int ac, char **av) {
|
||||
Programming_t p;
|
||||
SeqWithMandatory_t swm;
|
||||
SeqWithOptional_t *swo = 0;
|
||||
Error_t *err;
|
||||
asn_enc_rval_t erv;
|
||||
asn_dec_rval_t drv;
|
||||
char buf[128];
|
||||
size_t bufsize = sizeof(buf);
|
||||
|
||||
(void)ac; /* Unused argument */
|
||||
(void)av; /* Unused argument */
|
||||
|
||||
/*
|
||||
* No plans to fill Programming_t up:
|
||||
* just checking whether it compiles or not.
|
||||
*/
|
||||
memset(&p, 0, sizeof(p));
|
||||
|
||||
/*
|
||||
* No plans to fill it up: just checking whether it compiles or not.
|
||||
* Construct a dummy sequence:
|
||||
* SeqWithMandatory ::= {
|
||||
* seqOfMan [0] EXPLICIT SEQUENCE OF Error
|
||||
* }
|
||||
*/
|
||||
err = calloc(1, sizeof *err);
|
||||
memset(&swm, 0, sizeof swm);
|
||||
OCTET_STRING_fromBuf(&swm.someString, "Oley", 4);
|
||||
ASN_SEQUENCE_ADD(&swm.seqOfMan, err);
|
||||
|
||||
/*
|
||||
* Encode the sequence.
|
||||
*/
|
||||
erv = der_encode_to_buffer(&asn_DEF_SeqWithMandatory,
|
||||
&swm, buf, &bufsize);
|
||||
assert(erv.encoded == bufsize);
|
||||
|
||||
/*
|
||||
* Try to decode it using a compatible type.
|
||||
*/
|
||||
drv = ber_decode(0, &asn_DEF_SeqWithOptional, (void **)&swo,
|
||||
buf, bufsize);
|
||||
assert(drv.code == RC_OK);
|
||||
assert(drv.consumed == bufsize);
|
||||
assert(swo->seqOfOpt != 0);
|
||||
|
||||
xer_fprint(stderr, &asn_DEF_SeqWithOptional, swo);
|
||||
swo->seqOfOpt = 0;
|
||||
|
||||
bufsize = sizeof(buf);
|
||||
erv = der_encode_to_buffer(&asn_DEF_SeqWithOptional,
|
||||
swo, buf, &bufsize);
|
||||
assert(erv.encoded == bufsize);
|
||||
|
||||
swo = 0;
|
||||
drv = ber_decode(0, &asn_DEF_SeqWithMandatory, (void **)&swo,
|
||||
buf, bufsize);
|
||||
assert(drv.code != RC_OK);
|
||||
swo = 0;
|
||||
drv = ber_decode(0, &asn_DEF_SeqWithOptional, (void **)&swo,
|
||||
buf, bufsize);
|
||||
assert(drv.code == RC_OK);
|
||||
assert(drv.consumed == bufsize);
|
||||
assert(swo->seqOfOpt == 0);
|
||||
|
||||
xer_fprint(stderr, &asn_DEF_SeqWithOptional, swo);
|
||||
|
||||
printf("Finished\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -21,4 +21,14 @@ BEGIN
|
|||
|
||||
maxSize INTEGER ::= 10
|
||||
|
||||
SeqWithMandatory ::= SEQUENCE {
|
||||
someString UTF8String,
|
||||
seqOfMan [0] EXPLICIT SEQUENCE OF Error
|
||||
}
|
||||
|
||||
SeqWithOptional ::= SEQUENCE {
|
||||
someString UTF8String,
|
||||
seqOfOpt [0] EXPLICIT SEQUENCE OF Error OPTIONAL
|
||||
}
|
||||
|
||||
END
|
||||
|
|
Loading…
Reference in New Issue