Lev Walkin | f15320b | 2004-06-03 03:38:44 +0000 | [diff] [blame] | 1 | #undef NDEBUG |
| 2 | #include <stdio.h> |
| 3 | #include <stdlib.h> |
| 4 | #include <sys/types.h> |
| 5 | #include <string.h> |
| 6 | #include <assert.h> |
| 7 | |
| 8 | #include <Programming.h> |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 9 | #include <SeqWithMandatory.h> |
| 10 | #include <SeqWithOptional.h> |
Lev Walkin | f15320b | 2004-06-03 03:38:44 +0000 | [diff] [blame] | 11 | |
| 12 | int |
| 13 | main(int ac, char **av) { |
| 14 | Programming_t p; |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 15 | SeqWithMandatory_t swm; |
| 16 | SeqWithOptional_t *swo = 0; |
| 17 | Error_t *err; |
| 18 | asn_enc_rval_t erv; |
| 19 | asn_dec_rval_t drv; |
| 20 | char buf[128]; |
Lev Walkin | f15320b | 2004-06-03 03:38:44 +0000 | [diff] [blame] | 21 | |
Lev Walkin | d9bd775 | 2004-06-05 08:17:50 +0000 | [diff] [blame] | 22 | (void)ac; /* Unused argument */ |
| 23 | (void)av; /* Unused argument */ |
| 24 | |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 25 | /* |
| 26 | * No plans to fill Programming_t up: |
| 27 | * just checking whether it compiles or not. |
| 28 | */ |
Lev Walkin | f15320b | 2004-06-03 03:38:44 +0000 | [diff] [blame] | 29 | memset(&p, 0, sizeof(p)); |
| 30 | |
| 31 | /* |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 32 | * Construct a dummy sequence: |
| 33 | * SeqWithMandatory ::= { |
| 34 | * seqOfMan [0] EXPLICIT SEQUENCE OF Error |
| 35 | * } |
Lev Walkin | f15320b | 2004-06-03 03:38:44 +0000 | [diff] [blame] | 36 | */ |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 37 | err = calloc(1, sizeof *err); |
| 38 | memset(&swm, 0, sizeof swm); |
| 39 | OCTET_STRING_fromBuf(&swm.someString, "Oley", 4); |
| 40 | ASN_SEQUENCE_ADD(&swm.seqOfMan, err); |
| 41 | |
| 42 | /* |
| 43 | * Encode the sequence. |
| 44 | */ |
| 45 | erv = der_encode_to_buffer(&asn_DEF_SeqWithMandatory, |
Lev Walkin | c46b7cb | 2006-08-18 02:27:55 +0000 | [diff] [blame] | 46 | &swm, buf, sizeof buf); |
| 47 | assert(erv.encoded > 0); |
| 48 | buf[erv.encoded] = '\0'; |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 49 | |
| 50 | /* |
| 51 | * Try to decode it using a compatible type. |
| 52 | */ |
| 53 | drv = ber_decode(0, &asn_DEF_SeqWithOptional, (void **)&swo, |
Lev Walkin | c46b7cb | 2006-08-18 02:27:55 +0000 | [diff] [blame] | 54 | buf, erv.encoded); |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 55 | assert(drv.code == RC_OK); |
Lev Walkin | fb2a30b | 2014-01-14 02:11:37 -0800 | [diff] [blame] | 56 | assert((ssize_t)drv.consumed == erv.encoded); |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 57 | assert(swo->seqOfOpt != 0); |
| 58 | |
| 59 | xer_fprint(stderr, &asn_DEF_SeqWithOptional, swo); |
| 60 | swo->seqOfOpt = 0; |
| 61 | |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 62 | erv = der_encode_to_buffer(&asn_DEF_SeqWithOptional, |
Lev Walkin | c46b7cb | 2006-08-18 02:27:55 +0000 | [diff] [blame] | 63 | swo, buf, sizeof buf); |
| 64 | assert(erv.encoded > 0); |
| 65 | buf[erv.encoded] = '\0'; |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 66 | |
| 67 | swo = 0; |
| 68 | drv = ber_decode(0, &asn_DEF_SeqWithMandatory, (void **)&swo, |
Lev Walkin | c46b7cb | 2006-08-18 02:27:55 +0000 | [diff] [blame] | 69 | buf, erv.encoded); |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 70 | assert(drv.code != RC_OK); |
| 71 | swo = 0; |
| 72 | drv = ber_decode(0, &asn_DEF_SeqWithOptional, (void **)&swo, |
Lev Walkin | c46b7cb | 2006-08-18 02:27:55 +0000 | [diff] [blame] | 73 | buf, erv.encoded); |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 74 | assert(drv.code == RC_OK); |
Lev Walkin | fb2a30b | 2014-01-14 02:11:37 -0800 | [diff] [blame] | 75 | assert((ssize_t)drv.consumed == erv.encoded); |
Lev Walkin | 650da77 | 2006-06-17 03:30:43 +0000 | [diff] [blame] | 76 | assert(swo->seqOfOpt == 0); |
| 77 | |
| 78 | xer_fprint(stderr, &asn_DEF_SeqWithOptional, swo); |
| 79 | |
| 80 | printf("Finished\n"); |
Lev Walkin | f15320b | 2004-06-03 03:38:44 +0000 | [diff] [blame] | 81 | |
| 82 | return 0; |
| 83 | } |