Annotation of 43BSDReno/contrib/isode-beta/dsap/x500as/sa-dec.py, revision 1.1

1.1     ! root        1: -- sa-dec.py - Seleted Attributes 
        !             2: 
        !             3: -- $Header: /f/osi/dsap/x500as/RCS/sa-dec.py,v 7.0 89/11/23 21:50:49 mrose Rel $
        !             4: --
        !             5: --
        !             6: -- $Log:       sa-dec.py,v $
        !             7: -- Revision 7.0  89/11/23  21:50:49  mrose
        !             8: -- Release 6.0
        !             9: -- 
        !            10: 
        !            11: --
        !            12: --                               NOTICE
        !            13: --
        !            14: --    Acquisition, use, and distribution of this module and related
        !            15: --    materials are subject to the restrictions of a license agreement.
        !            16: --    Consult the Preface in the User's Manual for the full terms of
        !            17: --    this agreement.
        !            18: --
        !            19: --
        !            20: 
        !            21: 
        !            22: SA
        !            23:        {
        !            24:        joint-iso-ccitt
        !            25:        ds(5)
        !            26:        modules(1)
        !            27:        selectedAttributeTypes(5)
        !            28:        }
        !            29: 
        !            30: DEFINITIONS ::=
        !            31: 
        !            32: %{
        !            33: #include <stdio.h>
        !            34: #include "quipu/util.h"
        !            35: #include "quipu/entry.h"
        !            36: 
        !            37: extern  LLog    * log_dsap;
        !            38: 
        !            39: #define decode_UNIV_PrintableString parse_UNIV_PrintableString
        !            40: #define decode_UNIV_TeletexString   parse_UNIV_TeletexString
        !            41: #define decode_UNIV_OctetString     parse_UNIV_OctetString
        !            42: #define decode_UNIV_IA5String      parse_UNIV_IA5String
        !            43: #define decode_UNIV_T61String      parse_UNIV_T61String
        !            44: 
        !            45: %}
        !            46: 
        !            47: PREFIXES encode decode print
        !            48: 
        !            49: BEGIN
        !            50: 
        !            51: IMPORTS
        !            52:        AttributeType
        !            53:                FROM IF
        !            54:                        {
        !            55:                        joint-iso-ccitt
        !            56:                        ds(5)
        !            57:                        modules(1)
        !            58:                        informationFramework(1)
        !            59:                        };
        !            60: 
        !            61: DECODER decode
        !            62: 
        !            63: FacsimileTelephoneNumber [[P struct fax *]]
        !            64:         ::=
        !            65:         %{
        !            66:                 DLOG(log_dsap, LLOG_PDUS, ("About to decode FacsimileTelephoneNumber"));
        !            67:                parm -> bits = NULLPE;
        !            68:         %}
        !            69:         SEQUENCE
        !            70:         {
        !            71:        telephoneNumber
        !            72:                PrintableString [[s  parm->number]]
        !            73:                %{
        !            74:                        if ( strlen (parm->number) > UB_TELEPHONE_NUMBER) {
        !            75:                                advise (NULLCP, "fax/phone number too long");
        !            76:                                return NOTOK;
        !            77:                        }
        !            78:                %},
        !            79:        parameters
        !            80:                BIT STRING
        !            81:                %{
        !            82:                    if ((parm -> bits = pe_cpy ($$)) == NULLPE) {
        !            83:                        advise (NULLCP, "out of memory");
        !            84:                        return NOTOK;
        !            85:                    }
        !            86:                %}
        !            87:                OPTIONAL
        !            88:         }
        !            89:         %{
        !            90:                 DLOG(log_dsap, LLOG_PDUS, ("Done decode FacsimileTelephoneNumber"));
        !            91:         %}
        !            92: 
        !            93: PostalAddress [[P struct postaddr **]]
        !            94: %{
        !            95: struct postaddr ** tmp;
        !            96: int pa_count;
        !            97: %}
        !            98:        ::=
        !            99:         %{
        !           100:                 DLOG(log_dsap, LLOG_PDUS, ("About to decode PostalAddress"));
        !           101:                (*parm) = (struct postaddr *) NULL;
        !           102:                tmp = parm;
        !           103:         %}
        !           104:        SEQUENCE OF 
        !           105:                %{
        !           106:                (*tmp) = (struct postaddr *) smalloc (sizeof (struct postaddr));
        !           107:                pa_count = 0;
        !           108:                %}
        !           109:        CHOICE 
        !           110:                {
        !           111:                T61String [[s (*tmp)->addrcomp]]
        !           112:                        %{ 
        !           113:                        pa_count++;
        !           114:                        (*tmp)->addrtype = 1;
        !           115:                        if ( strlen ((*tmp)->addrcomp) > UB_POSTAL_STRING) {
        !           116:                                advise (NULLCP, "postal string too long");
        !           117:                                return NOTOK;
        !           118:                        }
        !           119:                        %} ,
        !           120:                PrintableString [[s (*tmp)->addrcomp]]
        !           121:                        %{ 
        !           122:                        pa_count++;
        !           123:                        (*tmp)->addrtype = 2;
        !           124:                        if ( strlen ((*tmp)->addrcomp) > UB_POSTAL_STRING) {
        !           125:                                advise (NULLCP, "postal string too long");
        !           126:                                return NOTOK;
        !           127:                        }
        !           128:                        %}
        !           129:                }
        !           130:                %{      
        !           131:                        tmp = & ((*tmp)->pa_next);
        !           132:                %}
        !           133: 
        !           134:         %{
        !           135:                if (pa_count > UB_POSTAL_LINE) {
        !           136:                        advise (NULLCP, "too many addr components");
        !           137:                        return NOTOK;
        !           138:                }
        !           139:                (*tmp) = (struct postaddr *) NULL;
        !           140:                 DLOG(log_dsap, LLOG_PDUS, ("Done decode PostalAddress"));
        !           141:         %}
        !           142: 
        !           143: TelexNumber [[P struct telex *]]
        !           144:        ::=
        !           145:         %{
        !           146:                 DLOG(log_dsap, LLOG_PDUS, ("About to decode TeletexTerminalIdentifier"));
        !           147:         %}
        !           148:        SEQUENCE
        !           149:        {
        !           150:                telexNumber     PrintableString [[s parm->telexnumber]]
        !           151:                %{
        !           152:                        if ( strlen (parm->telexnumber) > UB_TELEX_NUMBER) {
        !           153:                                advise (NULLCP, "telex number too long");
        !           154:                                return NOTOK;
        !           155:                        }
        !           156:                %},
        !           157:                countryCode     PrintableString [[s parm->countrycode]]
        !           158:                %{
        !           159:                        if ( strlen (parm->countrycode) > UB_COUNTRY_CODE) {
        !           160:                                advise (NULLCP, "countrycode too long");
        !           161:                                return NOTOK;
        !           162:                        }
        !           163:                %},
        !           164:                answerback      PrintableString [[s parm->answerback]]
        !           165:                %{
        !           166:                        if ( strlen (parm->answerback) > UB_ANSWERBACK) {
        !           167:                                advise (NULLCP, "answerback number too long");
        !           168:                                return NOTOK;
        !           169:                        }
        !           170:                %}
        !           171:        }
        !           172:         %{
        !           173:                 DLOG(log_dsap, LLOG_PDUS, ("Done decode FacsimileTelephoneNumber"));
        !           174:         %}
        !           175: 
        !           176: TeletexTerminalIdentifier [[P struct teletex *]]
        !           177:        ::=
        !           178:         %{
        !           179:                 DLOG(log_dsap, LLOG_PDUS, ("About to decode TeletexTerminalIdentifier"));
        !           180:         %}
        !           181:        SEQUENCE
        !           182:        {
        !           183:        teletexTerminal
        !           184:                PrintableString [[s  parm->terminal]]
        !           185:                %{
        !           186:                        if ( strlen (parm->terminal) > UB_TELETEX_TERMINAL_ID) {
        !           187:                                advise (NULLCP, "teletex string too long");
        !           188:                                return NOTOK;
        !           189:                        }
        !           190:                %},
        !           191:        parameters
        !           192:                SET {
        !           193:                graphic-character-sets [0] TeletexString
        !           194:                        [[s parm->graphic]]  OPTIONAL ,
        !           195:                control-character-sets [1] TeletexString
        !           196:                        [[s parm->control]]  OPTIONAL,
        !           197:                page-formats [2] OCTET STRING 
        !           198:                        [[s parm->page]] OPTIONAL,
        !           199:                miscellaneous-terminal-capabilities [3] TeletexString 
        !           200:                        [[s parm->misc]] OPTIONAL,
        !           201:                private-use [4] OCTET STRING 
        !           202:                        [[s parm->t_private]] OPTIONAL
        !           203:                } 
        !           204:                OPTIONAL
        !           205:        }
        !           206:         %{
        !           207:                 DLOG(log_dsap, LLOG_PDUS, ("Done decode TeletexTerminalIdentifier"));
        !           208:         %}
        !           209: 
        !           210: PreferredDeliveryMethod [[P struct pref_deliv **]]
        !           211: %{
        !           212: struct pref_deliv ** tmp;
        !           213: %}
        !           214:        ::=
        !           215:         %{
        !           216:                 DLOG(log_dsap, LLOG_PDUS, ("About to decode PreferredDeliveryMethod"));
        !           217:                (*parm) = (struct pref_deliv *) NULL;
        !           218:                tmp = parm;
        !           219:         %}
        !           220:        SEQUENCE OF 
        !           221:                %{
        !           222:                (*tmp) = (struct pref_deliv *) smalloc (sizeof (struct pref_deliv));
        !           223:                %}
        !           224:        INTEGER [[i (*tmp)->deliv ]]
        !           225:        {
        !           226:        any-delivery-method     (0),
        !           227:        mhs-delivery            (1),
        !           228:        physical-delivery       (2),
        !           229:        telex-delivery          (3),
        !           230:        teletex-delivery        (4),
        !           231:        g3-facsimilie-delivery  (5),
        !           232:        g4-facsimilie-delivery  (6),
        !           233:        ia5-terminal-delivery   (7),
        !           234:        videotex-delivery       (8),
        !           235:        telephone-delivery      (9)
        !           236:        }
        !           237:        %{
        !           238:                tmp = & ((*tmp)->pd_next);
        !           239:        %}
        !           240: 
        !           241:         %{
        !           242:                 DLOG(log_dsap, LLOG_PDUS, ("Done decode PreferredDeliveryMethod"));
        !           243:                (*tmp) = (struct pref_deliv *) NULL;
        !           244:         %}
        !           245:        
        !           246: 
        !           247: CriteriaItem [[P struct CriteriaItem **]]
        !           248:     ::=
        !           249:     %{
        !           250:         if ((*(parm) = (struct CriteriaItem *)
        !           251:                 calloc (1, sizeof **(parm))) == ((struct CriteriaItem *) 0)) {
        !           252:             advise (NULLCP, "out of memory");
        !           253:             return NOTOK;
        !           254:         }
        !           255:     %}
        !           256:           CHOICE
        !           257:                 {
        !           258:                     equality[0]
        !           259:                         AttributeType
        !           260:                         [[p &(*parm) -> attrib]]
        !           261:                         %{ (*parm) -> offset = choice_equality; %},
        !           262: 
        !           263:                     substrings[1]
        !           264:                         AttributeType
        !           265:                         [[p &(*parm) -> attrib]]
        !           266:                         %{ (*parm) -> offset = choice_substrings; %},
        !           267: 
        !           268:                     greaterOrEqual[2]
        !           269:                         AttributeType
        !           270:                         [[p &(*parm) -> attrib]]
        !           271:                         %{ (*parm) -> offset = choice_greaterOrEqual; %},
        !           272: 
        !           273:                     lessOrEqual[3]
        !           274:                         AttributeType
        !           275:                         [[p &(*parm) -> attrib]]
        !           276:                         %{ (*parm) -> offset = choice_lessOrEqual; %},
        !           277: 
        !           278:                     approximateMatch[4]
        !           279:                         AttributeType
        !           280:                         [[p &(*parm) -> attrib]]
        !           281:                         %{ (*parm) -> offset = choice_approximateMatch; %}
        !           282:         }
        !           283: 
        !           284: 
        !           285: Criteria [[P struct Criteria **]]
        !           286:     %{
        !           287:        struct and_or_set **and_or_set;
        !           288:     %}
        !           289:     ::=
        !           290:     %{
        !           291:         if ((*parm = (struct Criteria *)
        !           292:                 calloc (1, sizeof **parm)) == ((struct Criteria *) 0)) {
        !           293:             advise (NULLCP, "out of memory");
        !           294:             return NOTOK;
        !           295:         }
        !           296:         and_or_set = &((*parm) -> un.and_or);
        !           297:     %}
        !           298:         CHOICE
        !           299:             %{
        !           300:                 and_or_set = &((*parm) -> un.and_or);
        !           301:             %}
        !           302:         {
        !           303:             type[0]
        !           304:                 CriteriaItem
        !           305:                 [[p &((*parm) -> un.type)]]
        !           306:                 %{ (*parm) -> offset = Criteria_type; %},
        !           307: 
        !           308:             and[1]
        !           309:                 SET OF
        !           310:                     %{
        !           311:                         if ((*(and_or_set) = (struct and_or_set *)
        !           312:                                 calloc (1, sizeof **(and_or_set))) == ((struct and_or_set *) 0)) {
        !           313:                             advise (NULLCP, "out of memory");
        !           314:                             return NOTOK;
        !           315:                         }
        !           316:                     %}
        !           317:                     Criteria
        !           318:                     [[p &((*and_or_set) -> and_or_comp)]]
        !           319:                     %{ and_or_set = &((*and_or_set) -> and_or_next); (*parm) -> offset = Criteria_and; %},
        !           320: 
        !           321:             or[2]
        !           322:                 SET OF
        !           323:                     %{
        !           324:                         if ((*(and_or_set) = (struct and_or_set *)
        !           325:                                 calloc (1, sizeof **(and_or_set))) == ((struct and_or_set *) 0)) {
        !           326:                             advise (NULLCP, "out of memory");
        !           327:                             return NOTOK;
        !           328:                         }
        !           329:                     %}
        !           330:                     Criteria
        !           331:                     [[p &((*and_or_set) -> and_or_comp)]]
        !           332:                     %{ and_or_set = &((*and_or_set) -> and_or_next); (*parm) -> offset = Criteria_or; %},
        !           333: 
        !           334:             not[3]
        !           335:                 Criteria
        !           336:                 [[p &((*parm) -> un.not)]]
        !           337:                 %{ (*parm) -> offset = Criteria_not; %}
        !           338:         }
        !           339: 
        !           340: 
        !           341: Guide [[ P struct Guide **]]
        !           342:     ::=
        !           343:     %{ 
        !           344:        *parm = (struct Guide *) smalloc (sizeof (struct Guide )); 
        !           345:        (*parm)->objectClass = NULLOID;
        !           346:     %}
        !           347: 
        !           348:     SET {
        !           349:         objectClass [0]
        !           350:             OBJECT IDENTIFIER
        !           351:             [[O ((*parm) -> objectClass)]]
        !           352:             OPTIONAL,
        !           353:        criteria [1]
        !           354:                Criteria [[p &((*parm) -> criteria)]]
        !           355:     }
        !           356: 
        !           357: 
        !           358: END

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.