9 #include <UserIdentifier.h>
11 static unsigned char buf[4096];
12 static int buf_offset;
15 _buf_writer(const void *buffer, size_t size, void *app_key) {
16 unsigned char *b, *bend;
18 assert(buf_offset + size < sizeof(buf));
19 memcpy(buf + buf_offset, buffer, size);
25 printf("]:%zd\n", size);
31 save_object(void *bs, asn_TYPE_descriptor_t *td) {
32 asn_enc_rval_t rval; /* Return value */
35 rval = der_encode(td, bs, _buf_writer, 0);
36 if (rval.encoded == -1) {
38 "Cannot encode %s: %s\n",
39 rval.failed_type->name, strerror(errno));
40 assert(rval.encoded != -1);
44 buf[buf_offset++] = 123; /* Finalize with garbage */
46 asn_fprint(stderr, td, bs);
47 xer_fprint(stderr, td, bs);
50 for(i = 0; i < buf_offset; i++)
51 printf(" %02x", buf[i]);
58 load_object(void *bs, asn_TYPE_descriptor_t *td) {
61 fprintf(stderr, "\nLOADING OBJECT OF SIZE %d\n", buf_offset);
63 rval = ber_decode(0, td, (void **)&bs, buf, buf_offset);
64 assert(rval.code == RC_OK);
66 asn_fprint(stderr, td, bs);
67 xer_fprint(stderr, td, bs);
69 return (rval.code == RC_OK)?0:-1;
74 asn_TYPE_descriptor_t *td = &asn_DEF_UserIdentifier;
75 UserIdentifier_t user;
76 UserIdentifier_t user_new;
79 memset(&user, 0, sizeof user);
80 memset(&user_new, 0, sizeof user_new);
82 user.present = UserIdentifier_PR_phoneNumber;
84 &user.choice.phoneNumber,
87 /* Save->Load must succeed */
88 save_object(&user, td);
89 ret = load_object(&user_new, td);
91 assert(user_new.present == UserIdentifier_PR_phoneNumber);
97 ASN_STRUCT_RESET(asn_DEF_UserIdentifier, &user);
98 ASN_STRUCT_RESET(asn_DEF_UserIdentifier, &user_new);