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