|
|
1.1 ! root 1: % -*- LaTeX -*- (really SLiTeX) ! 2: ! 3: \begin{bwslide} ! 4: \ctitle {STATIC FACILITIES}\bf ! 5: ! 6: \begin{nrtc} ! 7: \item REMOTE OPERATIONS SPECIFICATION ! 8: ! 9: \item STUB GENERATOR ! 10: ! 11: \item STRUCTURE GENERATOR ! 12: ! 13: \item ELEMENT PARSER ! 14: \end{nrtc} ! 15: \end{bwslide} ! 16: ! 17: ! 18: %\begin{note}\em ! 19: %this part of the presentation corresponds to part~iii of The Applications ! 20: %Cookbook ! 21: % ! 22: %note that some of the facilities described herein are also useful for services ! 23: %which aren't ROS-based, e.g., ODIF ! 24: %\end{note} ! 25: ! 26: ! 27: \begin{bwslide} ! 28: \ctitle {STATIC FACILITIES\\ OVERVIEW} ! 29: ! 30: \vskip.15in ! 31: \diagram[p]{figureA-10} ! 32: \end{bwslide} ! 33: ! 34: ! 35: \begin{bwslide} ! 36: \ctitle {REMOTE OPERATIONS SPECIFICATION} ! 37: ! 38: \begin{nrtc} ! 39: \item A ``TYPICAL'' STANDARD FOR AN APPLICATION CONTAINS: ! 40: \begin{nrtc} ! 41: \item A SERVICE DEFINITION, AND ! 42: ! 43: \item A PROTOCOL SPECIFICATION ! 44: \end{nrtc} ! 45: ! 46: \item THE PROTOCOL SPECIFICATION CONTAINS A FORMAL DESCRIPTION OF THE REMOTE ! 47: OPERATIONS USED BY THE APPLICATION ! 48: \end{nrtc} ! 49: \end{bwslide} ! 50: ! 51: ! 52: \begin{bwslide} ! 53: \ctitle {EXAMPLE:\\ NETWORK MANAGEMENT} ! 54: ! 55: \begin{nrtc} ! 56: \item {}[ISO~9596/2] DEFINES A ``COMMON MANAGEMENT INFORMATION PROTOCOL'' ! 57: USED FOR NETWORK MANAGEMENT ! 58: ! 59: \item IT CONTAINS INFORMATION FOR BINDING AND OPERATIONS ! 60: ! 61: \item WE'LL LOOK AT A PORTION OF THE FORMAL DESCRIPTION ! 62: \end{nrtc} ! 63: \end{bwslide} ! 64: ! 65: ! 66: \begin{bwslide} ! 67: \ctitle {BINDING}\small ! 68: ! 69: \vskip.15in ! 70: \begin{tgrind} ! 71: \let\linebox=\relax ! 72: \input figureA-50\relax ! 73: \end{tgrind} ! 74: \end{bwslide} ! 75: ! 76: ! 77: \begin{bwslide} ! 78: \ctitle {OPERATIONS}\small ! 79: ! 80: \vskip.15in ! 81: \begin{tgrind} ! 82: \let\linebox=\relax ! 83: \input figureA-51\relax ! 84: \end{tgrind} ! 85: \end{bwslide} ! 86: ! 87: ! 88: \begin{bwslide} ! 89: \ctitle {OPERATIONS (cont.)}\small ! 90: ! 91: \vskip.15in ! 92: \begin{tgrind} ! 93: \let\linebox=\relax ! 94: \input figureA-52\relax ! 95: \end{tgrind} ! 96: \end{bwslide} ! 97: ! 98: ! 99: \begin{bwslide} ! 100: \ctitle {ERRORS}\small ! 101: ! 102: \vskip.15in ! 103: \begin{tgrind} ! 104: \let\linebox=\relax ! 105: \input figureA-53\relax ! 106: \end{tgrind} ! 107: \end{bwslide} ! 108: ! 109: ! 110: %\begin{bwslide} ! 111: %\part* {STUB GENERATOR}\bf ! 112: % ! 113: %\begin{nrtc} ! 114: %\item WHAT WE WOULD LIKE: MAGIC! ! 115: % ! 116: %\item WHAT WE REALLY GET: HARD WORK. ! 117: %\end{nrtc} ! 118: %\end{bwslide} ! 119: ! 120: ! 121: \begin{bwslide} ! 122: \ctitle {REMOTE PROCEDURE ``STUBS''} ! 123: ! 124: \begin{nrtc} ! 125: \item A PROCEDURE WHICH IS CALLED LOCALLY BUT EXECUTES REMOTELY ! 126: ! 127: \item IN OUR CONTEXT, A SYNCHRONOUS STUB: ! 128: \begin{nrtc} ! 129: \item INVOKES THE OPERATION ! 130: ! 131: \item AWAITS A RESPONSE ! 132: ! 133: \item RETURNS A RESULT OR ERROR ! 134: \end{nrtc} ! 135: ! 136: \item AN ASYNCHRONOUS STUB: ! 137: \begin{nrtc} ! 138: \item INVOKES THE OPERATION, AND EVENTUALLY ! 139: ! 140: \item DISPATCHES A RESULT OR ERROR HANDLER ! 141: \end{nrtc} ! 142: ! 143: \item WHAT TO DO ABOUT REJECTIONS, NETWORK PROBLEMS, ETC? ! 144: \end{nrtc} ! 145: \end{bwslide} ! 146: ! 147: ! 148: \begin{bwslide} ! 149: \ctitle {REMOTE OPERATIONS STUB-GENERATOR} ! 150: ! 151: \begin{nrtc} ! 152: ! 153: \item INPUT: ! 154: \begin{nrtc} ! 155: \item A RO SPEC ! 156: \end{nrtc} ! 157: ! 158: \item OUTPUT: ! 159: \begin{nrtc} ! 160: \item AN ASN.1 SPEC ! 161: ! 162: \item STUB DEFINITIONS FOR C ! 163: ! 164: \item C DATA STRUCTURES FOR RUN-TIME ENVIRONMENT ! 165: ! 166: \item STUB DEFINITIONS ! 167: \end{nrtc} ! 168: \end{nrtc} ! 169: \end{bwslide} ! 170: ! 171: ! 172: \begin{bwslide} ! 173: \ctitle {EXAMPLE:\\ NETWORK MANAGEMENT}\small ! 174: ! 175: \vskip.15in ! 176: \begin{verbatim} ! 177: % rosy cmip.ry ! 178: rosy 3.2 #17 (gonzo) of Fri Jan 8 13:42:05 PST 1988 ! 179: CMIP operations: m-EventReport m-ConfirmedEventReport m-LinkedReply ! 180: m-Confirmed-Get m-Set m-ConfirmedSet m-Action m-ConfirmedAction ! 181: ! 182: CMIP errors: noSuchObject accessDenied syncNotSupported invalidFilter ! 183: noSuchMgmtInfoId invalidMgmtInfoValue getListError setListError ! 184: noSuchAction processingFailure noSuchEventType ! 185: ! 186: CMIP types: EventReportArgument EventReportResult LinkedReplyArgument ! 187: GetArgument GetResult SetArgument SetResult ActionArgument ActionResult ! 188: NoSuchObject SyncNotSupported InvalidFilter NoSuchMgmtInfoId ! 189: InvalidMgmtInfoValue GetListError MISGetInfoStatus MgmtInfoIdError ! 190: SetListError MISSetInfoStatus MgmtInfoError ErrorStatus NoSuchAction ! 191: ProcessingFailure NoSuchEventType ObjectClass ObjectInstance CMISSync ! 192: CMISFilter FilterItem AccessControl EventTypeId EventInfo MgmtInfo ! 193: MgmtInfoId MgmtInfoValue ActionTypeId ActionInfo SpecificErrorInfo ! 194: \end{verbatim} ! 195: \end{bwslide} ! 196: ! 197: ! 198: \begin{bwslide} ! 199: \ctitle {EXAMPLE:\\ STUB DEFINITIONS FOR C}\small ! 200: ! 201: \vskip.15in ! 202: \begin{verbatim} ! 203: #define operation_CMIP_m__ConfirmedEventReport 1 ! 204: ! 205: #define stub_CMIP_m__ConfirmedEventReport(sd,id,in,rfx,efx,class,roi) \ ! 206: RyStub ((sd), table_CMIP_Operations, \ ! 207: operation_CMIP_m__ConfirmedEventReport, (id), \ ! 208: (caddr_t) (in), (rfx), (efx), (class), (roi)) ! 209: ! 210: #define op_CMIP_m__ConfirmedEventReport(sd,in,out,rsp,roi) \ ! 211: RyOperation ((sd), table_CMIP_Operations, \ ! 212: operation_CMIP_m__ConfirmedEventReport, \ ! 213: (caddr_t) (in), (out), (rsp), (roi)) ! 214: ! 215: #define error_CMIP_noSuchObject 1 ! 216: \end{verbatim} ! 217: \end{bwslide} ! 218: ! 219: ! 220: \begin{bwslide} ! 221: \ctitle {EXAMPLE:\\ C DATA STRUCTURES FOR\\ RUN-TIME ENVIRONMENT}\small ! 222: ! 223: \vskip.15in ! 224: \begin{verbatim} ! 225: struct RyOperation table_CMIP_Operations[] = { ! 226: ... ! 227: ! 228: /* OPERATION m-ConfirmedEventReport */ ! 229: "m-ConfirmedEventReport", operation_CMIP_m__ConfirmedEventReport, ! 230: encode_CMIP_m__ConfirmedEventReport_argument, ! 231: decode_CMIP_m__ConfirmedEventReport_argument, ! 232: 1, encode_CMIP_m__ConfirmedEventReport_result, ! 233: decode_CMIP_m__ConfirmedEventReport_result, ! 234: free_CMIP_m__ConfirmedEventReport_result, ! 235: errors_CMIP_m__ConfirmedEventReport, ! 236: ! 237: ... ! 238: ! 239: NULL ! 240: }; ! 241: \end{verbatim} ! 242: \end{bwslide} ! 243: ! 244: ! 245: \begin{bwslide} ! 246: \ctitle {EXAMPLE:\\ C DATA STRUCTURES FOR\\ RUN-TIME ENVIRONMENT\\ (cont.)} ! 247: \small ! 248: ! 249: \vskip.15in ! 250: \begin{verbatim} ! 251: static struct RyError *errors_CMIP_m__ConfirmedEventReport[] = { ! 252: &table_CMIP_Errors[0], ! 253: &table_CMIP_Errors[10], ! 254: &table_CMIP_Errors[1], ! 255: &table_CMIP_Errors[4], ! 256: &table_CMIP_Errors[5] ! 257: }; ! 258: \end{verbatim} ! 259: \end{bwslide} ! 260: ! 261: ! 262: \begin{bwslide} ! 263: \ctitle {EXAMPLE:\\ C DATA STRUCTURES FOR\\ RUN-TIME ENVIRONMENT\\ (cont.)} ! 264: \small ! 265: ! 266: \vskip.15in ! 267: \begin{verbatim} ! 268: struct RyError table_CMIP_Errors[] = { ! 269: /* ERROR noSuchObject */ ! 270: "noSuchObject", error_CMIP_noSuchObject, ! 271: encode_CMIP_noSuchObject_parameter, ! 272: decode_CMIP_noSuchObject_parameter, ! 273: free_CMIP_noSuchObject_parameter, ! 274: ! 275: ... ! 276: ! 277: NULL ! 278: }; ! 279: \end{verbatim} ! 280: \end{bwslide} ! 281: ! 282: ! 283: \begin{bwslide} ! 284: \ctitle {EXAMPLE:\\ STUB DEFINITIONS}\small ! 285: ! 286: \vskip.15in ! 287: \begin{verbatim} ! 288: int stub_CMIP_m__ConfirmedEventReport (sd, id, in, rfx, efx, class, roi) ! 289: int sd, ! 290: id, ! 291: class; ! 292: struct type_CMIP_EventReportArgument* in; ! 293: IFP rfx, ! 294: efx; ! 295: struct RoSAPindication *roi; ! 296: { ! 297: return RyStub (sd, table_CMIP_Operations, ! 298: operation_CMIP_m__ConfirmedEventReport, id, ! 299: (caddr_t) in, rfx, efx, class, roi); ! 300: } ! 301: \end{verbatim} ! 302: \end{bwslide} ! 303: ! 304: \begin{bwslide} ! 305: \ctitle {EXAMPLE:\\ STUB DEFINITIONS (cont.)}\small ! 306: ! 307: \vskip.15in ! 308: \begin{verbatim} ! 309: int op_CMIP_m__ConfirmedEventReport (sd, in, out, rsp, roi) ! 310: int sd; ! 311: struct type_CMIP_EventReportArgument* in; ! 312: caddr_t *out; ! 313: int *rsp; ! 314: struct RoSAPindication *roi; ! 315: { ! 316: return RyOperation (sd, table_CMIP_Operations, ! 317: operation_CMIP_m__ConfirmedEventReport, ! 318: (caddr_t) in, out, rsp, roi); ! 319: } ! 320: \end{verbatim} ! 321: \end{bwslide} ! 322: ! 323: %\begin{bwslide} ! 324: %\ctitle {ROSY LIMITATIONS} ! 325: % ! 326: %\begin{nrtc} ! 327: %\item SOMEWHAT LIMITED IN THE FRONT-END, CURRENTLY DOESN'T RECOGNIZE ! 328: % \begin{nrtc} ! 329: % \item \verb"BIND" AND \verb"UNBIND" MACROS ! 330: % ! 331: % \item \verb"OBJECT IDENTIFIER" NOTATION FOR OPERATION CODES ! 332: % \end{nrtc} ! 333: % ! 334: %\item IGNORES THE \verb"LINKED" CLAUSE IN OPERATIONS ! 335: %\end{nrtc} ! 336: %\end{bwslide} ! 337: ! 338: ! 339: %\begin{bwslide} ! 340: %\ctitle {STRUCTURE GENERATOR}\bf ! 341: % ! 342: %\begin{nrtc} ! 343: %\item WHAT WE WOULD LIKE: MAGIC! ! 344: % ! 345: %\item WHAT WE REALLY GET: HARD WORK. ! 346: %\end{nrtc} ! 347: %\end{bwslide} ! 348: ! 349: ! 350: \begin{bwslide} ! 351: \ctitle {SERIALIZING DATA STRUCTURES} ! 352: ! 353: \begin{nrtc} ! 354: \item {}[ISO~8825] (ASN.1 ENCODING) ! 355: SAYS HOW TO MAP THE ABSTRACT SYNTAX TO THE CONCRETE SYNTAX ! 356: ! 357: \item HOW TO MAP DATA STRUCTURES TO THE ABSTRACT SYNTAX? ! 358: \begin{nrtc} ! 359: \item \verb"struct { ... }" $\rightarrow$ \verb"EventReportArgument" ! 360: \end{nrtc} ! 361: \end{nrtc} ! 362: \end{bwslide} ! 363: ! 364: ! 365: \begin{bwslide} ! 366: \ctitle {A SOLUTION\\STRUCTURE GENERATOR} ! 367: ! 368: \begin{nrtc} ! 369: \item GENERATE C STRUCTURES DIRECTLY FROM ABSTRACT SYNTAX ! 370: ! 371: \item GENERATE TRANSLATOR TO DO THE MAPPING ! 372: \end{nrtc} ! 373: \end{bwslide} ! 374: ! 375: ! 376: \begin{bwslide} ! 377: \ctitle {SIMPLE TYPES} ! 378: ! 379: \begin{nrtc} ! 380: \item \verb"BOOLEAN" $\rightarrow$ \verb"char" ! 381: ! 382: \item \verb"INTEGER" $\rightarrow$ \verb"int" ! 383: \end{nrtc} ! 384: \end{bwslide} ! 385: ! 386: ! 387: \begin{bwslide} ! 388: \ctitle {SIMPLE TYPES (cont.)} ! 389: ! 390: \begin{nrtc} ! 391: \item FOR RANGE-LIMITED INTEGERs, ! 392: \begin{verbatim} ! 393: ErrorStatus ::= ! 394: INTEGER { ! 395: accessDenied(2), ! 396: noSuchMgmtInfoId(5), ! 397: invalidMgmtInfoValue(7) ! 398: } ! 399: \end{verbatim} ! 400: ! 401: SYMBOLIC VALUES ARE DEFINED AS WELL ! 402: \begin{verbatim} ! 403: struct type_CMIP_ErrorStatus { ! 404: int parm; ! 405: #define int_CMIP_ErrorStatus_accessDenied 2 ! 406: #define int_CMIP_ErrorStatus_noSuchMgmtInfoId 5 ! 407: #define int_CMIP_ErrorStatus_invalidMgmtInfoValue 7 ! 408: }; ! 409: \end{verbatim} ! 410: \end{nrtc} ! 411: \end{bwslide} ! 412: ! 413: ! 414: \begin{bwslide} ! 415: \ctitle {SIMPLE TYPES (cont.)} ! 416: ! 417: \begin{nrtc} ! 418: \item \verb"BIT STRING" $\rightarrow$ \verb"struct PElement" ! 419: \begin{verbatim} ! 420: BIT STRING { ! 421: eventReportInvoker(0), ! 422: ... ! 423: ! 424: #define bit_CMIP_FunctionalUnits_eventReportInvoker 0 ! 425: #define bits_CMIP_FunctionalUnits \ ! 426: "\020\01eventReportInvoker..." ! 427: \end{verbatim} ! 428: ! 429: \item \verb"OCTET STRING" $\rightarrow$ \verb"struct qbuf" ! 430: ! 431: \item \verb"OBJECT IDENTIFIER" $\rightarrow$ \verb"struct OIDentifier" ! 432: \end{nrtc} ! 433: \end{bwslide} ! 434: ! 435: ! 436: %\begin{bwslide} ! 437: %\ctitle {COMPLEX TYPES:\\ SEQUENCE OF} ! 438: % ! 439: %\begin{nrtc} ! 440: %\item A LINKED LIST ! 441: %\begin{verbatim} ! 442: %SEQUENCE OF ! 443: % MgmtInfoId ! 444: %\end{verbatim} ! 445: % ! 446: %WITH SOME GENERATED NAMES ! 447: %\begin{verbatim} ! 448: %struct element_CMIP_0 { ! 449: % struct type_CMIP_MgmtInfoId *element_CMIP_1; ! 450: % ! 451: % struct element_CMIP_0 *next; ! 452: %} *element_CMIP_0; ! 453: %\end{verbatim} ! 454: %\end{nrtc} ! 455: %\end{bwslide} ! 456: ! 457: ! 458: %\begin{bwslide} ! 459: %\ctitle {COMPLEX TYPES:\\ SEQUENCE} ! 460: % ! 461: %\begin{nrtc} ! 462: %\item A ``SIMPLE'' STRUCTURE ! 463: %\begin{verbatim} ! 464: %MgmtInfoIdError ::= ! 465: % SEQUENCE { ! 466: % errorStatus[0] ! 467: % IMPLICIT ErrorStatus, ! 468: % ! 469: % mgmtInfoId[1] ! 470: % MgmtInfoId ! 471: % } ! 472: %\end{verbatim} ! 473: % ! 474: %USING TAGS FOR NAMES, WHEN POSSIBLE ! 475: %\begin{verbatim} ! 476: %struct type_CMIP_MgmtInfoIdError { ! 477: % struct type_CMIP_ErrorStatus *errorStatus; ! 478: % ! 479: % struct type_CMIP_MgmtInfoId *mgmtInfoId; ! 480: %}; ! 481: %\end{verbatim} ! 482: % ! 483: %\item SETS ARE HANDLED ANALAGOUSLY ! 484: %\end{nrtc} ! 485: %\end{bwslide} ! 486: ! 487: ! 488: \begin{bwslide} ! 489: \ctitle {COMPLEX TYPES:\\ CHOICE} ! 490: ! 491: \begin{nrtc} ! 492: \item A STRUCTURE WITH A TAG AND A UNION ! 493: \begin{verbatim} ! 494: ObjectClass ::= ! 495: CHOICE { ! 496: globalForm[0] ! 497: IMPLICIT OBJECT IDENTIFIER, ! 498: ! 499: nonSpecificForm[1] ! 500: IMPLICIT OCTET STRING ! 501: } ! 502: \end{verbatim} ! 503: ! 504: e.g., ! 505: \begin{verbatim} ! 506: struct type_CMIP_ObjectClass { ! 507: int offset; ! 508: #define type_CMIP_ObjectClass_globalForm 1 ! 509: #define type_CMIP_ObjectClass_nonSpecificForm 2 ! 510: ! 511: union { ! 512: struct OIDentifier *globalForm; ! 513: struct qbuf *nonSpecificForm; ! 514: } un; ! 515: }; ! 516: \end{verbatim} ! 517: \end{nrtc} ! 518: \end{bwslide} ! 519: ! 520: ! 521: %\begin{bwslide} ! 522: %\ctitle {DEFAULT/OPTIONAL} ! 523: % ! 524: %\begin{nrtc} ! 525: %\item AN IDEAL FACILITY WOULD SUPPORT THE \verb"DEFAULT" AND ! 526: % \verb"OPTIONAL" CLAUSES FOR COMPLEX TYPES ! 527: % ! 528: %\item BUT, IMPLEMENTATION IS PROBLEMATIC: ! 529: % \begin{nrtc} ! 530: % \item NEED ASN.1 VALUE PARSING IN FRONT-END ! 531: % ! 532: % \item NEED EXTENSIVE SYMBOL TABLE SEMANTICS IN BACK-END ! 533: % \end{nrtc} ! 534: % ! 535: %\item SO, A SIMPLE APPROACH IS TAKEN ! 536: % \begin{nrtc} ! 537: % \item SCALARS ARE HANDLED DIRECTLY: ! 538: % \begin{nrtc} ! 539: % \item BOOLEANS, INTEGERS ! 540: % \end{nrtc} ! 541: % ! 542: % \item NON-SCALARS ARE EXAMINED FOR INEQUALITY TO \verb"NULL" ! 543: % \end{nrtc} ! 544: %\end{nrtc} ! 545: %\end{bwslide} ! 546: ! 547: ! 548: \begin{bwslide} ! 549: \ctitle {HEURISTICS} ! 550: ! 551: \begin{nrtc} ! 552: \item FOR CONSTRUCTED TYPES, IF ONLY ONE MEMBER,\\ PULL IT UP ! 553: \begin{verbatim} ! 554: TestInfoIdError ::= ! 555: SEQUENCE { ! 556: errorStatus[0] ! 557: IMPLICIT ErrorStatus ! 558: } ! 559: \end{verbatim} ! 560: \verb"TestInfoIdError" $\rightarrow$ \verb"struct type_CMIP_ErrorStatus" ! 561: ! 562: \item TRY TO USE TAGS WHENEVER POSSIBLE FOR STRUCTURE NAMES ! 563: \end{nrtc} ! 564: \end{bwslide} ! 565: ! 566: ! 567: \begin{bwslide} ! 568: \ctitle {STRUCTURE GENERATION} ! 569: ! 570: \begin{nrtc} ! 571: \item INPUT: ! 572: \begin{nrtc} ! 573: \item AN ASN.1 SPEC ! 574: \end{nrtc} ! 575: ! 576: \item OUTPUT: ! 577: \begin{nrtc} ! 578: \item AN AUGMENTED ASN.1 SPEC ! 579: ! 580: \item C STRUCTURE DEFINITIONS ! 581: ! 582: \item ``FREE'' ROUTINES ! 583: \end{nrtc} ! 584: \end{nrtc} ! 585: \end{bwslide} ! 586: ! 587: ! 588: \begin{bwslide} ! 589: \ctitle {EXAMPLE:\\ NETWORK MANAGEMENT}\small ! 590: ! 591: \vskip.15in ! 592: \begin{verbatim} ! 593: % posy -f -h -o cmip-asn.py cmip.py ! 594: posy 3.2 #15 (gonzo) of Fri Jan 8 12:03:11 PST 1988 ! 595: CMIP types: EventReportArgument EventReportResult LinkedReplyArgument ! 596: GetArgument GetResult SetArgument SetResult ActionArgument ActionResult ! 597: NoSuchObject SyncNotSupported InvalidFilter NoSuchMgmtInfoId ! 598: InvalidMgmtInfoValue GetListError MISGetInfoStatus MgmtInfoIdError ! 599: SetListError MISSetInfoStatus MgmtInfoError ErrorStatus NoSuchAction ! 600: ProcessingFailure NoSuchEventType ObjectClass ObjectInstance CMISSync ! 601: CMISFilter FilterItem AccessControl EventTypeId EventInfo MgmtInfo ! 602: MgmtInfoId MgmtInfoValue ActionTypeId ActionInfo SpecificErrorInfo ! 603: \end{verbatim} ! 604: \end{bwslide} ! 605: ! 606: ! 607: \begin{bwslide} ! 608: \ctitle {EXAMPLE:\\ C STRUCTURE DEFINITIONS}\small ! 609: ! 610: \vskip.15in ! 611: \begin{verbatim} ! 612: struct type_CMIP_EventReportArgument { ! 613: struct type_CMIP_ObjectClass *managedObjectClass; ! 614: ! 615: struct type_CMIP_ObjectInstance *managedObjectInstance; ! 616: ! 617: struct type_CMIP_EventTypeID *eventType; ! 618: ! 619: struct type_UNIV_GeneralizedTime *eventTime; ! 620: ! 621: struct type_CMIP_EventInfo *eventInfo; ! 622: }; ! 623: ! 624: #define type_CMIP_NoSuchObject OIDentifier ! 625: \end{verbatim} ! 626: \end{bwslide} ! 627: ! 628: ! 629: \begin{bwslide} ! 630: \ctitle {EXAMPLE:\\ ``FREE'' ROUTINES}\small ! 631: ! 632: \vskip.15in ! 633: \begin{verbatim} ! 634: free_CMIP_EventReportArgument (arg) ! 635: struct type_CMIP_EventReportArgument *arg; ! 636: { ! 637: if (arg == NULL) ! 638: return; ! 639: ! 640: if (arg -> managedObjectClass) ! 641: free_CMIP_ObjectClass (arg -> managedObjectClass), ! 642: arg -> managedObjectClass = NULL; ! 643: ! 644: ... ! 645: ! 646: if (arg) ! 647: free ((char *) arg); ! 648: } ! 649: ! 650: #define free_CMIP_NoSuchObject oid_free ! 651: \end{verbatim} ! 652: \end{bwslide} ! 653: ! 654: ! 655: %\begin{bwslide} ! 656: %\ctitle {POSY LIMITATIONS} ! 657: % ! 658: %\begin{nrtc} ! 659: %\item STEMS FROM A LACK OF INTELLIGENCE WHEN DEALING WITH COMPLEX ! 660: % ASN.1 VALUE NOTATION: ! 661: % \begin{nrtc} ! 662: % \item USES ``NULL INEQUALITY'' RULE FOR \verb"OPTIONAL" ! 663: % ! 664: % \item HANDLES \verb"DEFAULT" ONLY FOR SCALARS ! 665: % \end{nrtc} ! 666: %\end{nrtc} ! 667: %\end{bwslide} ! 668: ! 669: ! 670: \begin{bwslide} ! 671: \ctitle {ELEMENT PARSER}\bf ! 672: ! 673: \begin{nrtc} ! 674: \item WE NOW KNOW ABOUT ! 675: \begin{nrtc} ! 676: \item DATA STRUCTURES\ \ \verb"struct { ... }" ! 677: ! 678: \item ABSTRACT SYNTAX\ \ \verb"EventReportArgument" ! 679: ! 680: \item CONCRETE SYNTAX\ \ \verb"1f8a ..." ! 681: \end{nrtc} ! 682: ! 683: \item THE \emph{PRESENTATION ELEMENT} TIES THESE TOGETHER ! 684: \end{nrtc} ! 685: \end{bwslide} ! 686: ! 687: ! 688: \begin{bwslide} ! 689: \ctitle {PRESENTATION ELEMENTS} ! 690: ! 691: \begin{nrtc} ! 692: \item AN INTERNAL FORM FOR AN INSTANCE OF A TYPE DESCRIBED BY ABSTRACT ! 693: SYNTAX ! 694: ! 695: \item CAN REPRESENT ANY ASN.1 TYPE AS EITHER ! 696: \begin{nrtc} ! 697: \item A STRING OF OCTETS OR BITS ! 698: ! 699: \item A LINKED-LIST OF PRESENTATION ELEMENTS ! 700: \end{nrtc} ! 701: ! 702: \item THE CONCEPUTAL MAPPING IS: ! 703: \begin{nrtc} ! 704: \item \verb"struct { ... }" $\rightarrow$ \verb"EventReportArgument" ! 705: \end{nrtc} ! 706: ! 707: \item THE ACTUAL MAPPING IS: ! 708: \begin{nrtc} ! 709: \item \verb"struct { ... }" $\rightarrow$ \verb"struct PElement" ! 710: \end{nrtc} ! 711: \end{nrtc} ! 712: \end{bwslide} ! 713: ! 714: ! 715: \begin{bwslide} ! 716: \ctitle {PRESENTATION ELEMENT PARSER} ! 717: ! 718: \begin{nrtc} ! 719: \item INPUT: ! 720: \begin{nrtc} ! 721: \item AN AUGMENTED ASN.1 SPEC ! 722: \end{nrtc} ! 723: ! 724: \item OUTPUT: ! 725: \begin{nrtc} ! 726: \item AN ENCODER ! 727: ! 728: \item A DECODER ! 729: ! 730: \item A PRETTY-PRINTER ! 731: \end{nrtc} ! 732: \end{nrtc} ! 733: \end{bwslide} ! 734: ! 735: ! 736: \begin{bwslide} ! 737: \ctitle {EXAMPLE:\\ NETWORK MANAGEMENT}\small ! 738: ! 739: \vskip.15in ! 740: \begin{verbatim} ! 741: % pepy cmip-asn.py ! 742: pepy 3.2 #15 (gonzo) of Fri Jan 8 12:03:11 PST 1988 ! 743: CMIP encode none none: EventReportArgument EventReportResult ! 744: LinkedReplyArgument GetArgument GetResult SetArgument SetResult ! 745: ActionArgument ActionResult NoSuchObject SyncNotSupported InvalidFilter ! 746: NoSuchMgmtInfoId InvalidMgmtInfoValue GetListError MISGetInfoStatus ! 747: MgmtInfoIdError SetListError MISSetInfoStatus MgmtInfoError ErrorStatus ! 748: NoSuchAction ProcessingFailure NoSuchEventType ObjectClass ObjectInstance ! 749: CMISSync CMISFilter FilterItem AccessControl EventTypeId EventInfo ! 750: MgmtInfo MgmtInfoId MgmtInfoValue ActionTypeId ActionInfo ! 751: SpecificErrorInfo ! 752: ! 753: CMIP none decode none: EventReportArgument EventReportResult ! 754: LinkedReplyArgument GetArgument GetResult SetArgument SetResult ! 755: ActionArgument ActionResult NoSuchObject SyncNotSupported InvalidFilter ! 756: NoSuchMgmtInfoId InvalidMgmtInfoValue GetListError MISGetInfoStatus ! 757: MgmtInfoIdError SetListError MISSetInfoStatus MgmtInfoError ErrorStatus ! 758: NoSuchAction ProcessingFailure NoSuchEventType ObjectClass ObjectInstance ! 759: CMISSync CMISFilter FilterItem AccessControl EventTypeId EventInfo ! 760: MgmtInfo MgmtInfoId MgmtInfoValue ActionTypeId ActionInfo ! 761: SpecificErrorInfo ! 762: \end{verbatim} ! 763: \end{bwslide} ! 764: ! 765: ! 766: \begin{bwslide} ! 767: \ctitle {STATIC FACILITIES:\\ REVIEW} ! 768: ! 769: \vskip.15in ! 770: \diagram[p]{figureA-10} ! 771: \end{bwslide}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.