2 * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved.
4 * The contents of this file constitute Original Code as defined in and are
5 * subject to the Apple Public Source License Version 1.2 (the 'License').
6 * You may not use this file except in compliance with the License. Please obtain
7 * a copy of the License at http://www.apple.com/publicsource and read it before
10 * This Original Code and all software distributed under the License are
11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
15 * specific language governing rights and limitations under the License.
22 * "ASN-USEFUL" ASN.1 module encode/decode/print/free C src.
24 * This file was generated by snacc on Thu Jun 8 12:35:27 2000
26 * UBC snacc written by Mike Sample
28 * NOTE: This is a machine generated file - editing not recommended
34 #include "asn-useful.h"
37 AsnLen BEncUTF8String
PARAMS ((b
, v
),
42 l
= BEncUTF8StringContent (b
, v
);
43 l
+= BEncDefLen (b
, l
);
44 l
+= BEncTag1 (b
, UNIV
, PRIM
, 12);
46 } /* BEncUTF8String */
48 void BDecUTF8String
PARAMS ((b
, result
, bytesDecoded
, env
),
50 UTF8String
*result _AND_
51 AsnLen
*bytesDecoded _AND_
57 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
58 MAKE_TAG_ID (UNIV
, PRIM
, 12))&&
59 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, 12)))
61 Asn1Error ("BDecUTF8String: ERROR - wrong tag\n");
64 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
65 BDecUTF8StringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
66 } /* BDecUTF8String */
68 AsnLen BEncNumericString
PARAMS ((b
, v
),
73 l
= BEncNumericStringContent (b
, v
);
74 l
+= BEncDefLen (b
, l
);
75 l
+= BEncTag1 (b
, UNIV
, PRIM
, NUMERICSTRING_TAG_CODE
);
77 } /* BEncNumericString */
79 void BDecNumericString
PARAMS ((b
, result
, bytesDecoded
, env
),
81 NumericString
*result _AND_
82 AsnLen
*bytesDecoded _AND_
88 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
89 MAKE_TAG_ID (UNIV
, PRIM
, NUMERICSTRING_TAG_CODE
))&&
90 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, NUMERICSTRING_TAG_CODE
)))
92 Asn1Error ("BDecNumericString: ERROR - wrong tag\n");
95 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
96 BDecNumericStringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
97 } /* BDecNumericString */
99 AsnLen BEncPrintableString
PARAMS ((b
, v
),
104 l
= BEncPrintableStringContent (b
, v
);
105 l
+= BEncDefLen (b
, l
);
106 l
+= BEncTag1 (b
, UNIV
, PRIM
, PRINTABLESTRING_TAG_CODE
);
108 } /* BEncPrintableString */
110 void BDecPrintableString
PARAMS ((b
, result
, bytesDecoded
, env
),
112 PrintableString
*result _AND_
113 AsnLen
*bytesDecoded _AND_
119 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
120 MAKE_TAG_ID (UNIV
, PRIM
, PRINTABLESTRING_TAG_CODE
))&&
121 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, PRINTABLESTRING_TAG_CODE
)))
123 Asn1Error ("BDecPrintableString: ERROR - wrong tag\n");
126 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
127 BDecPrintableStringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
128 } /* BDecPrintableString */
130 AsnLen BEncTeletexString
PARAMS ((b
, v
),
135 l
= BEncTeletexStringContent (b
, v
);
136 l
+= BEncDefLen (b
, l
);
137 l
+= BEncTag1 (b
, UNIV
, PRIM
, TELETEXSTRING_TAG_CODE
);
139 } /* BEncTeletexString */
141 void BDecTeletexString
PARAMS ((b
, result
, bytesDecoded
, env
),
143 TeletexString
*result _AND_
144 AsnLen
*bytesDecoded _AND_
150 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
151 MAKE_TAG_ID (UNIV
, PRIM
, TELETEXSTRING_TAG_CODE
))&&
152 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, TELETEXSTRING_TAG_CODE
)))
154 Asn1Error ("BDecTeletexString: ERROR - wrong tag\n");
157 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
158 BDecTeletexStringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
159 } /* BDecTeletexString */
161 AsnLen BEncT61String
PARAMS ((b
, v
),
166 l
= BEncT61StringContent (b
, v
);
167 l
+= BEncDefLen (b
, l
);
168 l
+= BEncTag1 (b
, UNIV
, PRIM
, TELETEXSTRING_TAG_CODE
);
170 } /* BEncT61String */
172 void BDecT61String
PARAMS ((b
, result
, bytesDecoded
, env
),
174 T61String
*result _AND_
175 AsnLen
*bytesDecoded _AND_
181 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
182 MAKE_TAG_ID (UNIV
, PRIM
, TELETEXSTRING_TAG_CODE
))&&
183 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, TELETEXSTRING_TAG_CODE
)))
185 Asn1Error ("BDecT61String: ERROR - wrong tag\n");
188 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
189 BDecT61StringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
190 } /* BDecT61String */
192 AsnLen BEncVideotexString
PARAMS ((b
, v
),
197 l
= BEncVideotexStringContent (b
, v
);
198 l
+= BEncDefLen (b
, l
);
199 l
+= BEncTag1 (b
, UNIV
, PRIM
, VIDEOTEXSTRING_TAG_CODE
);
201 } /* BEncVideotexString */
203 void BDecVideotexString
PARAMS ((b
, result
, bytesDecoded
, env
),
205 VideotexString
*result _AND_
206 AsnLen
*bytesDecoded _AND_
212 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
213 MAKE_TAG_ID (UNIV
, PRIM
, VIDEOTEXSTRING_TAG_CODE
))&&
214 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, VIDEOTEXSTRING_TAG_CODE
)))
216 Asn1Error ("BDecVideotexString: ERROR - wrong tag\n");
219 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
220 BDecVideotexStringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
221 } /* BDecVideotexString */
223 AsnLen BEncIA5String
PARAMS ((b
, v
),
228 l
= BEncIA5StringContent (b
, v
);
229 l
+= BEncDefLen (b
, l
);
230 l
+= BEncTag1 (b
, UNIV
, PRIM
, IA5STRING_TAG_CODE
);
232 } /* BEncIA5String */
234 void BDecIA5String
PARAMS ((b
, result
, bytesDecoded
, env
),
236 IA5String
*result _AND_
237 AsnLen
*bytesDecoded _AND_
243 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
244 MAKE_TAG_ID (UNIV
, PRIM
, IA5STRING_TAG_CODE
))&&
245 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, IA5STRING_TAG_CODE
)))
247 Asn1Error ("BDecIA5String: ERROR - wrong tag\n");
250 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
251 BDecIA5StringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
252 } /* BDecIA5String */
254 AsnLen BEncGraphicString
PARAMS ((b
, v
),
259 l
= BEncGraphicStringContent (b
, v
);
260 l
+= BEncDefLen (b
, l
);
261 l
+= BEncTag1 (b
, UNIV
, PRIM
, GRAPHICSTRING_TAG_CODE
);
263 } /* BEncGraphicString */
265 void BDecGraphicString
PARAMS ((b
, result
, bytesDecoded
, env
),
267 GraphicString
*result _AND_
268 AsnLen
*bytesDecoded _AND_
274 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
275 MAKE_TAG_ID (UNIV
, PRIM
, GRAPHICSTRING_TAG_CODE
))&&
276 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, GRAPHICSTRING_TAG_CODE
)))
278 Asn1Error ("BDecGraphicString: ERROR - wrong tag\n");
281 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
282 BDecGraphicStringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
283 } /* BDecGraphicString */
285 AsnLen BEncVisibleString
PARAMS ((b
, v
),
290 l
= BEncVisibleStringContent (b
, v
);
291 l
+= BEncDefLen (b
, l
);
292 l
+= BEncTag1 (b
, UNIV
, PRIM
, VISIBLESTRING_TAG_CODE
);
294 } /* BEncVisibleString */
296 void BDecVisibleString
PARAMS ((b
, result
, bytesDecoded
, env
),
298 VisibleString
*result _AND_
299 AsnLen
*bytesDecoded _AND_
305 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
306 MAKE_TAG_ID (UNIV
, PRIM
, VISIBLESTRING_TAG_CODE
))&&
307 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, VISIBLESTRING_TAG_CODE
)))
309 Asn1Error ("BDecVisibleString: ERROR - wrong tag\n");
312 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
313 BDecVisibleStringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
314 } /* BDecVisibleString */
316 AsnLen BEncISO646String
PARAMS ((b
, v
),
321 l
= BEncISO646StringContent (b
, v
);
322 l
+= BEncDefLen (b
, l
);
323 l
+= BEncTag1 (b
, UNIV
, PRIM
, VISIBLESTRING_TAG_CODE
);
325 } /* BEncISO646String */
327 void BDecISO646String
PARAMS ((b
, result
, bytesDecoded
, env
),
329 ISO646String
*result _AND_
330 AsnLen
*bytesDecoded _AND_
336 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
337 MAKE_TAG_ID (UNIV
, PRIM
, VISIBLESTRING_TAG_CODE
))&&
338 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, VISIBLESTRING_TAG_CODE
)))
340 Asn1Error ("BDecISO646String: ERROR - wrong tag\n");
343 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
344 BDecISO646StringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
345 } /* BDecISO646String */
347 AsnLen BEncGeneralString
PARAMS ((b
, v
),
352 l
= BEncGeneralStringContent (b
, v
);
353 l
+= BEncDefLen (b
, l
);
354 l
+= BEncTag1 (b
, UNIV
, PRIM
, GENERALSTRING_TAG_CODE
);
356 } /* BEncGeneralString */
358 void BDecGeneralString
PARAMS ((b
, result
, bytesDecoded
, env
),
360 GeneralString
*result _AND_
361 AsnLen
*bytesDecoded _AND_
367 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
368 MAKE_TAG_ID (UNIV
, PRIM
, GENERALSTRING_TAG_CODE
))&&
369 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, GENERALSTRING_TAG_CODE
)))
371 Asn1Error ("BDecGeneralString: ERROR - wrong tag\n");
374 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
375 BDecGeneralStringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
376 } /* BDecGeneralString */
378 AsnLen BEncUTCTime
PARAMS ((b
, v
),
383 l
= BEncUTCTimeContent (b
, v
);
384 l
+= BEncDefLen (b
, l
);
385 l
+= BEncTag1 (b
, UNIV
, PRIM
, UTCTIME_TAG_CODE
);
389 void BDecUTCTime
PARAMS ((b
, result
, bytesDecoded
, env
),
391 UTCTime
*result _AND_
392 AsnLen
*bytesDecoded _AND_
398 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
399 MAKE_TAG_ID (UNIV
, PRIM
, UTCTIME_TAG_CODE
))&&
400 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, UTCTIME_TAG_CODE
)))
402 Asn1Error ("BDecUTCTime: ERROR - wrong tag\n");
405 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
406 BDecUTCTimeContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
409 AsnLen BEncGeneralizedTime
PARAMS ((b
, v
),
414 l
= BEncGeneralizedTimeContent (b
, v
);
415 l
+= BEncDefLen (b
, l
);
416 l
+= BEncTag1 (b
, UNIV
, PRIM
, GENERALIZEDTIME_TAG_CODE
);
418 } /* BEncGeneralizedTime */
420 void BDecGeneralizedTime
PARAMS ((b
, result
, bytesDecoded
, env
),
422 GeneralizedTime
*result _AND_
423 AsnLen
*bytesDecoded _AND_
429 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
430 MAKE_TAG_ID (UNIV
, PRIM
, GENERALIZEDTIME_TAG_CODE
))&&
431 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, GENERALIZEDTIME_TAG_CODE
)))
433 Asn1Error ("BDecGeneralizedTime: ERROR - wrong tag\n");
436 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
437 BDecGeneralizedTimeContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
438 } /* BDecGeneralizedTime */
440 AsnLen BEncUniversalString
PARAMS ((b
, v
),
445 l
= BEncUniversalStringContent (b
, v
);
446 l
+= BEncDefLen (b
, l
);
447 l
+= BEncTag1 (b
, UNIV
, PRIM
, UNIVERSALSTRING_TAG_CODE
);
449 } /* BEncUniversalString */
451 void BDecUniversalString
PARAMS ((b
, result
, bytesDecoded
, env
),
453 UniversalString
*result _AND_
454 AsnLen
*bytesDecoded _AND_
460 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
461 MAKE_TAG_ID (UNIV
, PRIM
, UNIVERSALSTRING_TAG_CODE
))&&
462 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, UNIVERSALSTRING_TAG_CODE
)))
464 Asn1Error ("BDecUniversalString: ERROR - wrong tag\n");
467 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
468 BDecUniversalStringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
469 } /* BDecUniversalString */
471 AsnLen BEncBMPString
PARAMS ((b
, v
),
476 l
= BEncBMPStringContent (b
, v
);
477 l
+= BEncDefLen (b
, l
);
478 l
+= BEncTag1 (b
, UNIV
, PRIM
, BMPSTRING_TAG_CODE
);
480 } /* BEncBMPString */
482 void BDecBMPString
PARAMS ((b
, result
, bytesDecoded
, env
),
484 BMPString
*result _AND_
485 AsnLen
*bytesDecoded _AND_
491 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
492 MAKE_TAG_ID (UNIV
, PRIM
, BMPSTRING_TAG_CODE
))&&
493 (tag
!= MAKE_TAG_ID (UNIV
, CONS
, BMPSTRING_TAG_CODE
)))
495 Asn1Error ("BDecBMPString: ERROR - wrong tag\n");
498 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
499 BDecBMPStringContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
500 } /* BDecBMPString */
503 BEncEXTERNALChoiceContent
PARAMS ((b
, v
),
514 case EXTERNALCHOICE_SINGLE_ASN1_TYPE
:
516 itemLen
= BEncAsnOctsContent (b
, (v
->a
.single_ASN1_type
));
517 itemLen
+= BEncDefLen (b
, itemLen
);
518 itemLen
+= BEncTag1 (b
, UNIV
, PRIM
, 4);
519 itemLen
+= BEncConsLen (b
, itemLen
);
520 itemLen
+= BEncTag1 (b
, CNTX
, CONS
, 0);
526 case EXTERNALCHOICE_OCTET_ALIGNED
:
527 itemLen
= BEncAsnOctsContent (b
, (v
->a
.octet_aligned
));
528 itemLen
+= BEncDefLen (b
, itemLen
);
529 itemLen
+= BEncTag1 (b
, CNTX
, PRIM
, 1);
535 case EXTERNALCHOICE_ARBITRARY
:
536 itemLen
= BEncAsnBitsContent (b
, (v
->a
.arbitrary
));
537 itemLen
+= BEncDefLen (b
, itemLen
);
538 itemLen
+= BEncTag1 (b
, CNTX
, PRIM
, 2);
547 } /* BEncEXTERNALChoiceContent */
550 BDecEXTERNALChoiceContent
PARAMS ((b
, tagId0
, elmtLen0
, v
, bytesDecoded
, env
),
553 AsnLen elmtLen0 _AND_
554 EXTERNALChoice
*v _AND_
555 AsnLen
*bytesDecoded _AND_
559 AsnLen totalElmtsLen1
= 0;
562 int mandatoryElmtCount1
= 0;
563 AsnLen totalElmtsLen2
= 0;
570 case MAKE_TAG_ID (CNTX
, CONS
, 0):
571 tagId1
= BDecTag (b
, &totalElmtsLen1
, env
);
572 if ((tagId1
!= MAKE_TAG_ID (UNIV
, PRIM
, OCTETSTRING_TAG_CODE
)) &&
573 (tagId1
!= MAKE_TAG_ID (UNIV
, CONS
, OCTETSTRING_TAG_CODE
)))
575 Asn1Error ("Unexpected Tag\n");
579 elmtLen1
= BDecLen (b
, &totalElmtsLen1
, env
);
580 (v
->choiceId
) = EXTERNALCHOICE_SINGLE_ASN1_TYPE
;
581 (v
->a
.single_ASN1_type
) = (AsnOcts
*) Asn1Alloc (sizeof (AsnOcts
));
582 CheckAsn1Alloc ((v
->a
.single_ASN1_type
), env
);
583 BDecAsnOctsContent (b
, tagId1
, elmtLen1
, (v
->a
.single_ASN1_type
), &totalElmtsLen1
, env
);
584 if (elmtLen0
== INDEFINITE_LEN
)
585 BDecEoc (b
, &totalElmtsLen1
, env
);
588 case MAKE_TAG_ID (CNTX
, PRIM
, 1):
589 case MAKE_TAG_ID (CNTX
, CONS
, 1):
590 (v
->choiceId
) = EXTERNALCHOICE_OCTET_ALIGNED
;
591 (v
->a
.octet_aligned
) = (AsnOcts
*) Asn1Alloc (sizeof (AsnOcts
));
592 CheckAsn1Alloc ((v
->a
.octet_aligned
), env
);
593 BDecAsnOctsContent (b
, tagId0
, elmtLen0
, (v
->a
.octet_aligned
), &totalElmtsLen1
, env
);
596 case MAKE_TAG_ID (CNTX
, PRIM
, 2):
597 case MAKE_TAG_ID (CNTX
, CONS
, 2):
598 (v
->choiceId
) = EXTERNALCHOICE_ARBITRARY
;
599 (v
->a
.arbitrary
) = (AsnBits
*) Asn1Alloc (sizeof (AsnBits
));
600 CheckAsn1Alloc ((v
->a
.arbitrary
), env
);
601 BDecAsnBitsContent (b
, tagId0
, elmtLen0
, (v
->a
.arbitrary
), &totalElmtsLen1
, env
);
605 Asn1Error ("ERROR - unexpected tag in CHOICE\n");
609 (*bytesDecoded
) += totalElmtsLen1
;
610 } /* BDecEXTERNALChoiceContent */
613 PrintEXTERNALChoice
PARAMS ((f
, v
, indent
),
615 EXTERNALChoice
*v _AND_
616 unsigned short int indent
)
620 case EXTERNALCHOICE_SINGLE_ASN1_TYPE
:
621 fprintf (f
,"single-ASN1-type ");
622 PrintAsnOcts (f
, (v
->a
.single_ASN1_type
), indent
+ stdIndentG
);
625 case EXTERNALCHOICE_OCTET_ALIGNED
:
626 fprintf (f
,"octet-aligned ");
627 PrintAsnOcts (f
, (v
->a
.octet_aligned
), indent
+ stdIndentG
);
630 case EXTERNALCHOICE_ARBITRARY
:
631 fprintf (f
,"arbitrary ");
632 PrintAsnBits (f
, (v
->a
.arbitrary
), indent
+ stdIndentG
);
636 } /* PrintEXTERNALChoice */
639 FreeEXTERNALChoice
PARAMS ((v
),
647 case EXTERNALCHOICE_SINGLE_ASN1_TYPE
:
648 FreeAsnOcts ((v
->a
.single_ASN1_type
));
649 Asn1Free ((v
->a
.single_ASN1_type
));
653 case EXTERNALCHOICE_OCTET_ALIGNED
:
654 FreeAsnOcts ((v
->a
.octet_aligned
));
655 Asn1Free ((v
->a
.octet_aligned
));
659 case EXTERNALCHOICE_ARBITRARY
:
660 FreeAsnBits ((v
->a
.arbitrary
));
661 Asn1Free ((v
->a
.arbitrary
));
666 } /* FreeEXTERNALChoice */
671 AsnLen BEncEXTERNAL
PARAMS ((b
, v
),
677 l
= BEncEXTERNALContent (b
, v
);
678 l
+= BEncConsLen (b
, l
);
679 l
+= BEncTag1 (b
, UNIV
, CONS
, EXTERNAL_TAG_CODE
);
683 void BDecEXTERNAL
PARAMS ((b
, result
, bytesDecoded
, env
),
685 EXTERNAL
*result _AND_
686 AsnLen
*bytesDecoded _AND_
692 if (((tag
= BDecTag (b
, bytesDecoded
, env
)) !=
693 MAKE_TAG_ID (UNIV
, CONS
, EXTERNAL_TAG_CODE
)))
695 Asn1Error ("BDecEXTERNAL: ERROR - wrong tag\n");
698 elmtLen1
= BDecLen (b
, bytesDecoded
, env
);
699 BDecEXTERNALContent (b
, tag
, elmtLen1
, result
, bytesDecoded
, env
);
703 BEncEXTERNALContent
PARAMS ((b
, v
),
712 itemLen
= BEncEXTERNALChoiceContent (b
, (v
->encoding
));
716 if (ASNOCTS_PRESENT ((&v
->data_value_descriptor
)))
718 itemLen
= BEncObjectDescriptorContent (b
, (&v
->data_value_descriptor
));
719 itemLen
+= BEncDefLen (b
, itemLen
);
720 itemLen
+= BEncTag1 (b
, UNIV
, PRIM
, 7);
725 if (NOT_NULL ((v
->indirect_reference
)))
727 itemLen
= BEncAsnIntContent (b
, (v
->indirect_reference
));
728 BEncDefLenTo127 (b
, itemLen
);
730 itemLen
+= BEncTag1 (b
, UNIV
, PRIM
, 2);
735 if (ASNOID_PRESENT ((&v
->direct_reference
)))
737 itemLen
= BEncAsnOidContent (b
, (&v
->direct_reference
));
738 itemLen
+= BEncDefLen (b
, itemLen
);
739 itemLen
+= BEncTag1 (b
, UNIV
, PRIM
, 6);
746 } /* BEncEXTERNALContent */
749 BDecEXTERNALContent
PARAMS ((b
, tagId0
, elmtLen0
, v
, bytesDecoded
, env
),
752 AsnLen elmtLen0 _AND_
754 AsnLen
*bytesDecoded _AND_
758 AsnLen totalElmtsLen1
= 0;
761 int mandatoryElmtCount1
= 0;
762 AsnLen totalElmtsLen2
= 0;
767 tagId1
= BDecTag (b
, &totalElmtsLen1
, env
);
769 if (((tagId1
== MAKE_TAG_ID (UNIV
, PRIM
, OID_TAG_CODE
))))
771 elmtLen1
= BDecLen (b
, &totalElmtsLen1
, env
);
772 BDecAsnOidContent (b
, tagId1
, elmtLen1
, (&v
->direct_reference
), &totalElmtsLen1
, env
);
773 tagId1
= BDecTag (b
, &totalElmtsLen1
, env
);
777 if (((tagId1
== MAKE_TAG_ID (UNIV
, PRIM
, INTEGER_TAG_CODE
))))
779 elmtLen1
= BDecLen (b
, &totalElmtsLen1
, env
);
780 (v
->indirect_reference
) = (AsnInt
*) Asn1Alloc (sizeof (AsnInt
));
781 CheckAsn1Alloc ((v
->indirect_reference
), env
);
782 BDecAsnIntContent (b
, tagId1
, elmtLen1
, (v
->indirect_reference
), &totalElmtsLen1
, env
);
783 tagId1
= BDecTag (b
, &totalElmtsLen1
, env
);
787 if (((tagId1
== MAKE_TAG_ID (UNIV
, PRIM
, OD_TAG_CODE
)) ||
788 (tagId1
== MAKE_TAG_ID (UNIV
, CONS
, OD_TAG_CODE
))))
790 elmtLen1
= BDecLen (b
, &totalElmtsLen1
, env
);
791 BDecObjectDescriptorContent (b
, tagId1
, elmtLen1
, (&v
->data_value_descriptor
), &totalElmtsLen1
, env
);
792 tagId1
= BDecTag (b
, &totalElmtsLen1
, env
);
796 if (((tagId1
== MAKE_TAG_ID (CNTX
, CONS
, 0)) ||
797 (tagId1
== MAKE_TAG_ID (CNTX
, PRIM
, 1))||
798 (tagId1
== MAKE_TAG_ID (CNTX
, CONS
, 1)) ||
799 (tagId1
== MAKE_TAG_ID (CNTX
, PRIM
, 2))||
800 (tagId1
== MAKE_TAG_ID (CNTX
, CONS
, 2))))
802 elmtLen1
= BDecLen (b
, &totalElmtsLen1
, env
);
803 (v
->encoding
) = (EXTERNALChoice
*) Asn1Alloc (sizeof (EXTERNALChoice
));
804 CheckAsn1Alloc ((v
->encoding
), env
);
805 BDecEXTERNALChoiceContent (b
, tagId1
, elmtLen1
, (v
->encoding
), &totalElmtsLen1
, env
);
807 if (elmtLen0
== INDEFINITE_LEN
)
808 BDecEoc (b
, &totalElmtsLen1
, env
);
809 else if (totalElmtsLen1
!= elmtLen0
)
819 (*bytesDecoded
) += totalElmtsLen1
;
820 } /* BDecEXTERNALContent */
823 PrintEXTERNAL
PARAMS ((f
, v
, indent
),
826 unsigned short int indent
)
831 fprintf (f
,"{ -- SEQUENCE --\n");
833 if (ASNOID_PRESENT ((&v
->direct_reference
)))
835 Indent (f
, indent
+ stdIndentG
);
836 fprintf (f
,"direct-reference ");
837 PrintAsnOid (f
, (&v
->direct_reference
), indent
+ stdIndentG
);
840 if (NOT_NULL ((v
->indirect_reference
)))
842 Indent (f
, indent
+ stdIndentG
);
843 fprintf (f
,"indirect-reference ");
844 PrintAsnInt (f
, (v
->indirect_reference
), indent
+ stdIndentG
);
847 if (ASNOCTS_PRESENT ((&v
->data_value_descriptor
)))
849 Indent (f
, indent
+ stdIndentG
);
850 fprintf (f
,"data-value-descriptor ");
851 PrintObjectDescriptor (f
, (&v
->data_value_descriptor
), indent
+ stdIndentG
);
854 Indent (f
, indent
+ stdIndentG
);
855 fprintf (f
,"encoding ");
856 PrintEXTERNALChoice (f
, (v
->encoding
), indent
+ stdIndentG
);
860 } /* PrintEXTERNAL */
863 FreeEXTERNAL
PARAMS ((v
),
869 if (ASNOID_PRESENT ((&v
->direct_reference
)))
871 FreeAsnOid ((&v
->direct_reference
));
874 if (NOT_NULL ((v
->indirect_reference
)))
876 FreeAsnInt ((v
->indirect_reference
));
877 Asn1Free ((v
->indirect_reference
));
880 if (ASNOCTS_PRESENT ((&v
->data_value_descriptor
)))
882 FreeObjectDescriptor ((&v
->data_value_descriptor
));
885 FreeEXTERNALChoice ((v
->encoding
));
886 Asn1Free ((v
->encoding
));