From 1411d05e4cd73db4e9cf7402d9998ce4f7e1ad0e Mon Sep 17 00:00:00 2001 From: Lev Walkin <vlm@lionet.info> Date: Wed, 2 Feb 2005 11:06:38 +0000 Subject: [PATCH] fixes --- doc/asn1c-usage.html | 60 ++++++++++++++++++++++++------------------- doc/asn1c-usage.lyx | 21 +++++++++++++++ doc/asn1c-usage.pdf | Bin 130885 -> 131129 bytes 3 files changed, 54 insertions(+), 27 deletions(-) diff --git a/doc/asn1c-usage.html b/doc/asn1c-usage.html index ef399deb..2a9f7964 100644 --- a/doc/asn1c-usage.html +++ b/doc/asn1c-usage.html @@ -8,7 +8,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds <HEAD> <TITLE>Using the Open Source ASN.1 Compiler</TITLE> <META NAME="description" CONTENT="Using the Open Source ASN.1 Compiler"> -<META NAME="ASN.1, asn1c, compiler, BER, DER, XER\"> +<META NAME="keywords" CONTENT="ASN.1, asn1c, compiler, BER, DER, XER"> @@ -586,7 +586,7 @@ language structures and surrounding maintenance code. For example, the C structure which may be created by compiler to represent the simple <I>Rectangle</I> specification defined earlier in this document, may look like this<A NAME="tex2html2" - HREF="#foot801"><SUP>2.2</SUP></A>: + HREF="#foot803"><SUP>2.2</SUP></A>: <P> @@ -612,8 +612,8 @@ Quick start</A> <P> After building and installing the compiler, the <I>asn1c</I><A NAME="tex2html4" - HREF="#foot802"><SUP>3.1</SUP></A> command may be used to compile the ASN.1 specification<A NAME="tex2html5" - HREF="#foot803"><SUP>3.2</SUP></A>: + HREF="#foot804"><SUP>3.1</SUP></A> command may be used to compile the ASN.1 specification<A NAME="tex2html5" + HREF="#foot805"><SUP>3.2</SUP></A>: <P> @@ -679,7 +679,7 @@ the compiler's behavior. <P> <BR><P></P> -<DIV ALIGN="CENTER"><A NAME="806"></A> +<DIV ALIGN="CENTER"><A NAME="808"></A> <TABLE> <CAPTION><STRONG><A NAME=Table1>Table 1:</A></STRONG> The list of asn1c command line options</CAPTION> @@ -823,7 +823,7 @@ be possible to compile everything with the single instruction: <BLOCKQUOTE><PRE> cc -o rectangle *.c # It could be <I>that</I> simple<A NAME="tex2html7" - HREF="#foot809"><SUP>4.1</SUP></A> + HREF="#foot811"><SUP>4.1</SUP></A> </PRE> </BLOCKQUOTE> @@ -874,37 +874,37 @@ There are several generic functions available: <DD>This is the generic <I>restartable</I><A NAME="tex2html8" HREF="#foot253"><SUP>4.2</SUP></A> BER decoder (Basic Encoding Rules). This decoder would create and/or fill the target structure for you. Please refer to Section -[<A HREF="#sub:Decoding-BER">Decoding-BER</A>]. +[<A HREF="#sub:Decoding-BER">Decoding BER</A>]. </DD> <DT><STRONG>der_encoder</STRONG></DT> <DD>This is the generic DER encoder (Distinguished Encoding Rules). This encoder will take the target structure and encode it -into a series of bytes. Please refer to Section [<A HREF="#sub:Encoding-DER">Encoding-DER</A>]. +into a series of bytes. Please refer to Section [<A HREF="#sub:Encoding-DER">Encoding DER</A>]. </DD> <DT><STRONG>xer_encoder</STRONG></DT> <DD>This is the generic XER encoder (XML Encoding Rules). This encoder will take the target structure and represent it as an -XML (text) document. Please refer to Section [<A HREF="#sub:Encoding-XER">Encoding-XER</A>]. +XML (text) document. Please refer to Section [<A HREF="#sub:Encoding-XER">Encoding XER</A>]. </DD> <DT><STRONG>check_constraints</STRONG></DT> <DD>Check that the contents of the target structure are semantically valid and constrained to appropriate implicit or -explicit subtype constraints. Please refer to Section sub:Validating-the-target. +explicit subtype constraints. Please refer to Section <A HREF="#sub:Validating-the-target">Validating the target</A>. </DD> <DT><STRONG>print_struct</STRONG></DT> <DD>This function convert the contents of the passed target structure into human readable form. This form is not formal and cannot be converted back into the structure, but it may turn out to be useful -for debugging or quick-n-dirty printing. Please refer to Section [<A HREF="#sub:Printing-the-target">Printing-the-target</A>]. +for debugging or quick-n-dirty printing. Please refer to Section [<A HREF="#sub:Printing-the-target">Printing the target</A>]. </DD> <DT><STRONG>free_struct</STRONG></DT> <DD>This is a generic disposal which frees the target structure. -Please refer to Section [<A HREF="#sub:Freeing-the-target">Freeing-the-target</A>]. +Please refer to Section [<A HREF="#sub:Freeing-the-target">Freeing the target</A>]. </DD> </DL> check_constraints Check that the contents of the target structure are semantically valid and constrained to appropriate implicit or -explicit subtype constraints. Please refer to Section sub:Validating-the-target. +explicit subtype constraints. Please refer to Section <A HREF="#sub:Validating-the-target">Validating the target</A>. <P> Each of the above function takes the type descriptor (<I>asn_DEF_...</I>) @@ -958,7 +958,7 @@ decoded into the structure by the time something goes wrong. Restartable decoding is a little bit trickier: you need to provide the old target structure pointer (which might be already half-decoded) and react on RC_WMORE return code. This will be explained later in -Section sub:Decoding-BER +Section <A HREF="#sub:Decoding-BER">Decoding BER</A> <P> @@ -1132,7 +1132,7 @@ The XER stands for XML Encoding Rules, where XML, in turn, is eXtensible Markup Language, a text-based format for information exchange. The encoder routine API comes in two flavors: stdio-based and callback-based. With the callback-based encoder, the encoding process is very similar -to the DER one, described in Section sub:Encoding-DER. The +to the DER one, described in Section <A HREF="#sub:Encoding-DER">Encoding DER</A>. The following example uses the definition of write_stream() from up there. <P> @@ -1144,7 +1144,7 @@ following example uses the definition of write_stream() from up there. * NOTE: Do not copy this code verbatim! * If the stdio output is necessary, * use the xer_fprint() procedure instead. - * See Section sub:Printing-the-target. + * See Section <A HREF="#sub:Printing-the-target">Printing the target</A>. */ int print_as_XML(FILE *ostream, Rectangle_t *rect) { @@ -1162,7 +1162,7 @@ Please look into xer_encoder.h for the precise definition of xer_encode() and related types. <P> -See Section [<A HREF="#sub:Printing-the-target">Printing-the-target</A>] for the example of stdio-based +See Section [<A HREF="#sub:Printing-the-target">Printing the target</A>] for the example of stdio-based XML encoder and other pretty-printing suggestions. <P> @@ -1226,7 +1226,7 @@ call: xer_fprint(stdout, &asn_DEF_Rectangle, rect); </PRE> </BLOCKQUOTE> -See Section sub:Encoding-XER for XML-related details. +See Section <A HREF="#sub:Encoding-XER">Encoding XER</A> for XML-related details. <P> @@ -1617,10 +1617,10 @@ END <LI>Compile the file according to procedures shown in the previous chapter. </LI> <LI>Modify the Rectangle type processing routine (you can start with the -main() routine shown in the Section sec:A-Rectangle-Decoder) +main() routine shown in the Section <A HREF="#sec:A-Rectangle-Decoder">A Rectangle Decoder</A>) by placing the following snippet of code <I>before</I> encoding and/or <I>after</I> decoding the Rectangle type<A NAME="tex2html10" - HREF="#foot874"><SUP>6.1</SUP></A>: + HREF="#foot876"><SUP>6.1</SUP></A>: <P> @@ -1648,15 +1648,21 @@ by placing the following snippet of code <I>before</I> encoding and/or </LI> <LI>Compile the resulting C code as shown in the previous chapters. </LI> +<LI>Try to test the constraints checking code by assigning integer value +101 to the <B>.height</B> member of the Rectangle structure, or +a negative value to the <B>.width</B> member. In either case, the +program should print ''Constraint validation failed'' message, followed +by the short explanation why validation did not succeed. +</LI> <LI>Done. </LI> </OL> <H2><A NAME="SECTION05000000000000000000"> Bibliography</A> </H2><DL COMPACT><DD><P></P><DT><A NAME="ASN1C">ASN1C</A> -<DD>The Open Source ASN.1 Compiler. <A HREF=http://lionet.info/>http://lionet.info/</A>asn1c +<DD>The Open Source ASN.1 Compiler. <A HREF=http://lionet.info/asn1c>http://lionet.info/asn1c</A> <P></P><DT><A NAME="AONL">AONL</A> -<DD>Online ASN.1 Compiler. <A HREF=http://lionet.info/asn1c/>http://lionet.info/asn1c/</A>asn1c.cgi +<DD>Online ASN.1 Compiler. <A HREF=http://lionet.info/asn1c/asn1c.cgi>http://lionet.info/asn1c/asn1c.cgi</A> <P></P><DT><A NAME="Dub00">Dub00</A> <DD>Olivier Dubuisson -- <I>ASN.1 Communication between heterogeneous systems</I> -- Morgan Kaufmann Publishers, 2000. <A HREF=http://asn1.elibel.tm.fr/en/book/>http://asn1.elibel.tm.fr/en/book/</A>. @@ -1674,7 +1680,7 @@ ISBN:0-12-6333361-0. not a definitive factor. </DD> -<DT><A NAME="foot801">... this</A><A +<DT><A NAME="foot803">... this</A><A HREF="asn1c-usage.html#tex2html2"><SUP>2.2</SUP></A></DT> <DD><I>-fnative-types</I> compiler option is used to produce basic C <I>int</I> types instead of infinite width INTEGER_t structures. See <A HREF=#Table1>Table 1</A>. @@ -1686,19 +1692,19 @@ types instead of infinite width INTEGER_t structures. See <A HREF=#Table1>Table text (XML) based. </DD> -<DT><A NAME="foot802">...asn1c</A><A +<DT><A NAME="foot804">...asn1c</A><A HREF="asn1c-usage.html#tex2html4"><SUP>3.1</SUP></A></DT> <DD>The 1 symbol in asn<B>1</B>c is a digit, not an ''ell'' letter. </DD> -<DT><A NAME="foot803">... specification</A><A +<DT><A NAME="foot805">... specification</A><A HREF="asn1c-usage.html#tex2html5"><SUP>3.2</SUP></A></DT> <DD>This is probably <B>not</B> what you want to try out right now - read through the rest of this chapter to find out about <B>-P</B> and <B>-R</B> options. </DD> -<DT><A NAME="foot809">...that simple</A><A +<DT><A NAME="foot811">...that simple</A><A HREF="asn1c-usage.html#tex2html7"><SUP>4.1</SUP></A></DT> <DD>Provided that you've also created a .c file with the <I>int main()</I> routine. @@ -1717,7 +1723,7 @@ buffer to continue decoding. which aren't important for the size determination. </DD> -<DT><A NAME="foot874">... type</A><A +<DT><A NAME="foot876">... type</A><A HREF="asn1c-usage.html#tex2html10"><SUP>6.1</SUP></A></DT> <DD>Placing the constraint checking code <I>before</I> encoding helps to make sure you know the data is correct and within constraints before diff --git a/doc/asn1c-usage.lyx b/doc/asn1c-usage.lyx index 044d3438..af199f4d 100644 --- a/doc/asn1c-usage.lyx +++ b/doc/asn1c-usage.lyx @@ -3931,6 +3931,27 @@ n Compile the resulting C code as shown in the previous chapters. \layout Enumerate +Try to test the constraints checking code by assigning integer value 101 + to the +\series bold +.height +\series default + member of the Rectangle structure, or a negative value to the +\series bold +.width +\series default + member. + In either case, the program should print +\begin_inset Quotes sld +\end_inset + +Constraint validation failed +\begin_inset Quotes srd +\end_inset + + message, followed by the short explanation why validation did not succeed. +\layout Enumerate + Done. \layout Bibliography \bibitem [ASN1C]{ASN1C} diff --git a/doc/asn1c-usage.pdf b/doc/asn1c-usage.pdf index 4fd5cf78a899c701ced54e03f975ee55d6904e22..8a8b85fb3fe68145bf540c9767628ea2bb5a99f9 100644 GIT binary patch delta 9463 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 Ip(gDA0@DV|6#xJL delta 9222 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 PO?WsCCM>L?qYC?9(szI8 -- GitLab