Annotation of 43BSDReno/contrib/isode-beta/ftam/ftamgroup2.c, revision 1.1.1.1

1.1       root        1: /* ftamgroup2.c - FPM: respond to a grouped transaction */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/ftam/RCS/ftamgroup2.c,v 7.0 89/11/23 21:53:39 mrose Rel $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/ftam/RCS/ftamgroup2.c,v 7.0 89/11/23 21:53:39 mrose Rel $
                      9:  *
                     10:  *
                     11:  * $Log:       ftamgroup2.c,v $
                     12:  * Revision 7.0  89/11/23  21:53:39  mrose
                     13:  * Release 6.0
                     14:  * 
                     15:  */
                     16: 
                     17: /*
                     18:  *                               NOTICE
                     19:  *
                     20:  *    Acquisition, use, and distribution of this module and related
                     21:  *    materials are subject to the restrictions of a license agreement.
                     22:  *    Consult the Preface in the User's Manual for the full terms of
                     23:  *    this agreement.
                     24:  *
                     25:  */
                     26: 
                     27: 
                     28: /* LINTLIBRARY */
                     29: 
                     30: #include <stdio.h>
                     31: #include <signal.h>
                     32: #include "fpkt.h"
                     33: 
                     34: /*    F-{MANAGE,BULK-{BEGIN,END}}.RESPONSE (group) */
                     35: 
                     36: int     FManageResponse (sd, ftg, fti)
                     37: int     sd;
                     38: struct FTAMgroup   *ftg;
                     39: struct FTAMindication  *fti;
                     40: {
                     41:     return FGroupResponse (sd, ftg, FTI_MANAGEMENT, FSB_INITIALIZED, fti);
                     42: }
                     43: 
                     44: 
                     45: int     FBulkBeginResponse (sd, ftg, fti)
                     46: int     sd;
                     47: struct FTAMgroup   *ftg;
                     48: struct FTAMindication  *fti;
                     49: {
                     50:     return FGroupResponse (sd, ftg, FTI_BULKBEGIN, FSB_DATAIDLE, fti);
                     51: }
                     52: 
                     53: 
                     54: int     FBulkEndResponse (sd, ftg, fti)
                     55: int     sd;
                     56: struct FTAMgroup   *ftg;
                     57: struct FTAMindication  *fti;
                     58: {
                     59:     return FGroupResponse (sd, ftg, FTI_BULKEND, FSB_INITIALIZED, fti);
                     60: }
                     61: 
                     62: /*    F-GROUP.RESPONSE (group) */
                     63: 
                     64: static int  FGroupResponse (sd, ftg, type, state, fti)
                     65: int     sd;
                     66: struct FTAMgroup   *ftg;
                     67: int    type,
                     68:        state;
                     69: struct FTAMindication  *fti;
                     70: {
                     71:     SBV            smask;
                     72:     int            result;
                     73:     register struct ftamblk *fsb;
                     74: 
                     75:     missingP (ftg);
                     76:     missingP (fti);
                     77: 
                     78:     smask = sigioblock ();
                     79: 
                     80:     ftamPsig (fsb, sd);
                     81: 
                     82:     if ((result = frgrpchk (fsb, ftg, type, fti)) != NOTOK)
                     83:        result = FGroupResponseAux (fsb, ftg, state, fti);
                     84: 
                     85:     (void) sigiomask (smask);
                     86: 
                     87:     return result;
                     88: }
                     89: 
                     90: /*  */
                     91: 
                     92: static int  FGroupResponseAux (fsb, ftg, state, fti)
                     93: register struct ftamblk *fsb;
                     94: register struct FTAMgroup  *ftg;
                     95: int    state;
                     96: struct FTAMindication  *fti;
                     97: {
                     98:     register int    i;
                     99:     int     did_loop,
                    100:            npdu,
                    101:            result,
                    102:            okstate;
                    103:     char  **txp,
                    104:           *texts[NPDATA];
                    105:     PE     pe,
                    106:           *pep,
                    107:            info[NPDATA];
                    108:     struct PSAPindication   pis;
                    109:     struct PSAPindication *pi = &pis;
                    110:     struct PSAPabort  *pa = &pi -> pi_abort;
                    111:     struct type_FTAM_PDU **pdup,
                    112:                          *pdus[NPDATA];
                    113: 
                    114:     bzero ((char *) texts, sizeof texts);
                    115:     bzero ((char *) info, sizeof info);
                    116:     bzero ((char *) pdus, sizeof pdus);
                    117: 
                    118:     did_loop = 0;
                    119:     if ((result = frgrp2pdus (fsb, ftg, pdus, texts, &npdu, fti)) == NOTOK)
                    120:        goto out;
                    121:     for (pdup = pdus, pep = info, txp = texts, i = npdu - 1;
                    122:            i >= 0;
                    123:            pdup++, pep++, txp++, i--) {
                    124:        pe = NULLPE;
                    125:        if (encode_FTAM_PDU (&pe, 1, 0, NULLCP, *pdup) == NOTOK) {
                    126:            result = ftamlose (fti, FS_GEN (fsb), 1, NULLCP,
                    127:                               "error encoding PDU: %s", PY_pepy);          
                    128:            goto out;
                    129:        }
                    130:        (*pep = pe) -> pe_context = fsb -> fsb_id;
                    131: 
                    132:        fsbtrace (fsb, (fsb -> fsb_fd, "P-DATA.REQUEST", *txp, pe, 0));
                    133:     }
                    134:     did_loop = 1;
                    135: 
                    136:     result = PDataRequest (fsb -> fsb_fd, info, npdu, pi);
                    137: 
                    138: out: ;
                    139:     for (pdup = pdus, pep = info, i = NPDATA - 1;
                    140:            i >= 0;
                    141:            pdup++, pep++, i--) {
                    142:        if (*pep)
                    143:            pe_free (*pep);
                    144:        if (*pdup)
                    145:            free_FTAM_PDU (*pdup);
                    146:     }
                    147: 
                    148:     if (result == NOTOK) {
                    149:        if (did_loop)
                    150:            (void) ps2ftamlose (fsb, fti, "PDataRequest", pa);
                    151:        if (fti -> fti_abort.fta_action == FACTION_PERM)
                    152:            freefsblk (fsb);
                    153: 
                    154:        return NOTOK;
                    155:     }
                    156: 
                    157:     switch (state) {
                    158:        case FSB_DATAIDLE:
                    159:            if (ftg -> ftg_flags & FTG_SELECT)
                    160:                okstate = ftg -> ftg_select.ftse_state;
                    161:            else
                    162:                okstate = ftg -> ftg_create.ftce_state;
                    163:            if (okstate != FSTATE_SUCCESS
                    164:                    || ftg -> ftg_open.ftop_state != FSTATE_SUCCESS) {
                    165:                fsb -> fsb_state = FSB_INITIALIZED;
                    166:                break;
                    167:            }                   /* else fall */
                    168: 
                    169:        default:
                    170:            fsb -> fsb_state = state;
                    171:            break;
                    172:     }
                    173: 
                    174:     return OK;
                    175: }
                    176: 
                    177: /*  */
                    178: 
                    179: static int  frgrpchk (fsb, ftg, type, fti)
                    180: register struct ftamblk *fsb;
                    181: register struct FTAMgroup *ftg;
                    182: int    type;
                    183: struct FTAMindication *fti;
                    184: {
                    185:     if (fsb -> fsb_flags & FSB_INIT)
                    186:        return ftamlose (fti, FS_GEN (fsb), 0, NULLCP, "not responder");
                    187:     switch (fsb -> fsb_state) {
                    188:        case FSB_MANAGEMENT: 
                    189:            if (type != FTI_MANAGEMENT)
                    190:                goto wrong_state;
                    191:            if (ftg -> ftg_flags & ~fsb -> fsb_group) {
                    192: reply_mismatch: ;
                    193:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    194:                           "group reply mismatch; expecting 0x%x, found 0x%x",
                    195:                            fsb -> fsb_group, ftg -> ftg_flags);
                    196:            }
                    197:            break;
                    198: 
                    199:        case FSB_BULKBEGIN: 
                    200:            if (type != FTI_BULKBEGIN)
                    201:                goto wrong_state;
                    202:            if (ftg -> ftg_flags & ~fsb -> fsb_group)
                    203:                goto reply_mismatch;
                    204:            break;
                    205: 
                    206:        case FSB_BULKEND: 
                    207:            if (type != FTI_BULKEND)
                    208:                goto wrong_state;
                    209:            if (ftg -> ftg_flags & ~fsb -> fsb_group)
                    210:                goto reply_mismatch;
                    211:            break;
                    212: 
                    213:        default: 
                    214:     wrong_state: ;
                    215:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP, "wrong state");
                    216:     }
                    217: 
                    218:     if (ftg -> ftg_flags & FTG_SELECT) {
                    219:        register struct FTAMselect *ftse = &ftg -> ftg_select;
                    220: 
                    221:        switch (ftse -> ftse_state) {
                    222:            case FSTATE_SUCCESS: 
                    223:            case FSTATE_FAILURE:
                    224:                break;
                    225: 
                    226:            default: 
                    227:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    228:                        "bad value for select state parameter");
                    229:        }
                    230:        switch (ftse -> ftse_action) {
                    231:            case FACTION_SUCCESS: 
                    232:            case FACTION_TRANS: 
                    233:            case FACTION_PERM: 
                    234:                break;
                    235: 
                    236:            default: 
                    237:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    238:                        "bad value for select action parameter");
                    239:        }
                    240:        if (ftse -> ftse_attrs.fa_present != FA_FILENAME)
                    241:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    242:                    "only filename should be present");
                    243:        if (ftse -> ftse_ndiag > NFDIAG)
                    244:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    245:                    "too many select diagnostics");
                    246:     }
                    247: 
                    248:     if (ftg -> ftg_flags & FTG_CREATE) {
                    249:        register struct FTAMcreate *ftce = &ftg -> ftg_create;
                    250: 
                    251:        switch (ftce -> ftce_state) {
                    252:            case FSTATE_SUCCESS: 
                    253:            case FSTATE_FAILURE: 
                    254:                break;
                    255: 
                    256:            default: 
                    257:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    258:                        "bad value for create state parameter");
                    259:        }
                    260:        switch (ftce -> ftce_action) {
                    261:            case FACTION_SUCCESS: 
                    262:            case FACTION_TRANS: 
                    263:            case FACTION_PERM: 
                    264:                break;
                    265: 
                    266:            default: 
                    267:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    268:                        "bad value for create action parameter");
                    269:        }
                    270:        if (!(ftce -> ftce_attrs.fa_present & FA_FILENAME))
                    271:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    272:                    "filename not present");
                    273:        if (!(ftce -> ftce_attrs.fa_present & FA_ACTIONS))
                    274:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    275:                    "permitted-actions not present");
                    276:        if (!(ftce -> ftce_attrs.fa_present & FA_CONTENTS))
                    277:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    278:                    "contents-type not present");
                    279:        if (ftce -> ftce_attrs.fa_present & ~FA_CRE_ATTRS)
                    280:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    281:                             "illegal attributes present");
                    282:        if (!(fsb -> fsb_attrs & FATTR_STORAGE)
                    283:                && (ftce -> ftce_attrs.fa_present & FA_STORAGE))
                    284:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    285:                    "storage attributes not permitted");
                    286:        if (!(fsb -> fsb_attrs & FATTR_SECURITY)
                    287:                && (ftce -> ftce_attrs.fa_present & FA_SECURITY))
                    288:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    289:                    "security attributes not permitted");
                    290:        if (ftce -> ftce_ndiag > NFDIAG)
                    291:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    292:                    "too many create diagnostics");
                    293:     }
                    294: 
                    295:     if (ftg -> ftg_flags & FTG_CLOSE) {
                    296:        register struct FTAMclose     *ftcl = &ftg -> ftg_close;
                    297:        
                    298:        switch (ftcl -> ftcl_action) {
                    299:            case FACTION_SUCCESS: 
                    300:            case FACTION_TRANS: 
                    301:            case FACTION_PERM: 
                    302:                break;
                    303: 
                    304:            default: 
                    305:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    306:                        "bad value for close action parameter");
                    307:        }
                    308:        if (ftcl -> ftcl_ndiag > NFDIAG)
                    309:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    310:                    "too many close diagnostics");
                    311:     }
                    312: 
                    313:     if (ftg -> ftg_flags & FTG_RDATTR) {
                    314:        register struct FTAMreadattr   *ftra = &ftg -> ftg_readattr;
                    315: 
                    316:        switch (ftra -> ftra_action) {
                    317:            case FACTION_SUCCESS: 
                    318:            case FACTION_TRANS: 
                    319:            case FACTION_PERM: 
                    320:                break;
                    321: 
                    322:            default: 
                    323:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    324:                        "bad value for read attribute action parameter");
                    325:        }
                    326:        if (!(fsb -> fsb_attrs & FATTR_STORAGE)
                    327:                && (ftra -> ftra_attrs.fa_present & FA_STORAGE))
                    328:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    329:                    "storage attributes not permitted");
                    330:        if (!(fsb -> fsb_attrs & FATTR_SECURITY)
                    331:                && (ftra -> ftra_attrs.fa_present & FA_SECURITY))
                    332:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    333:                    "security attributes not permitted");
                    334:        if (ftra -> ftra_ndiag > NFDIAG)
                    335:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    336:                    "too many read attribute diagnostics");
                    337:     }
                    338: 
                    339:     if (ftg -> ftg_flags & FTG_CHATTR) {
                    340:        register struct FTAMchngattr   *ftca = &ftg -> ftg_chngattr;
                    341: 
                    342:        switch (ftca -> ftca_action) {
                    343:            case FACTION_SUCCESS: 
                    344:            case FACTION_TRANS: 
                    345:            case FACTION_PERM: 
                    346:                break;
                    347: 
                    348:            default: 
                    349:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    350:                        "bad value for change attribute action parameter");
                    351:        }
                    352:        if (!(fsb -> fsb_attrs & FATTR_STORAGE)
                    353:                && (ftca -> ftca_attrs.fa_present & FA_STORAGE))
                    354:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    355:                    "storage attributes not permitted");
                    356:        if (!(fsb -> fsb_attrs & FATTR_SECURITY)
                    357:                && (ftca -> ftca_attrs.fa_present & FA_SECURITY))
                    358:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    359:                    "security attributes not permitted");
                    360:        if (ftca -> ftca_attrs.fa_present & FA_CONTROL)
                    361:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    362:                             "encoding of access-control not supported (yet)");
                    363:        if (ftca -> ftca_ndiag > NFDIAG)
                    364:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    365:                    "too many change attribute diagnostics");
                    366:     }
                    367: 
                    368:     if (ftg -> ftg_flags & FTG_DESELECT) {
                    369:        register struct FTAMdeselect   *ftde = &ftg -> ftg_deselect;
                    370: 
                    371:        switch (ftde -> ftde_action) {
                    372:            case FACTION_SUCCESS: 
                    373:            case FACTION_TRANS: 
                    374:            case FACTION_PERM: 
                    375:                break;
                    376: 
                    377:            default: 
                    378:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    379:                        "bad value for deselect action parameter");
                    380:        }
                    381:        if (!(fsb -> fsb_flags & FSB_DECHARGE)
                    382:                && ftde -> ftde_charges.fc_ncharge > 0)
                    383:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    384:                    "deselect not permitted to include charges");
                    385:        if (ftde -> ftde_charges.fc_ncharge > NFCHRG)
                    386:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    387:                    "too many deselect charges");
                    388:        if (ftde -> ftde_ndiag > NFDIAG)
                    389:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    390:                    "too many deselect diagnostics");
                    391:     }
                    392: 
                    393:     if (ftg -> ftg_flags & FTG_DELETE) {
                    394:        register struct FTAMdelete *ftxe = &ftg -> ftg_delete;
                    395: 
                    396:        switch (ftxe -> ftxe_action) {
                    397:            case FACTION_SUCCESS: 
                    398:            case FACTION_TRANS: 
                    399:            case FACTION_PERM: 
                    400:                break;
                    401: 
                    402:            default: 
                    403:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    404:                        "bad value for delete action parameter");
                    405:        }
                    406:        if (ftxe -> ftxe_charges.fc_ncharge > NFCHRG)
                    407:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    408:                    "too many delete charges");
                    409:        if (ftxe -> ftxe_ndiag > NFDIAG)
                    410:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    411:                    "too many delete diagnostics");
                    412:     }
                    413: 
                    414:     if (ftg -> ftg_flags & FTG_OPEN) {
                    415:        register struct FTAMopen *ftop = &ftg -> ftg_open;
                    416:        register struct FTAMconcurrency *fc;
                    417: 
                    418:        switch (ftop -> ftop_state) {
                    419:            case FSTATE_SUCCESS: 
                    420:            case FSTATE_FAILURE: 
                    421:                break;
                    422: 
                    423:            default: 
                    424:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    425:                        "bad value for open state parameter");
                    426:        }
                    427:        switch (ftop -> ftop_action) {
                    428:            case FACTION_SUCCESS: 
                    429:            case FACTION_TRANS: 
                    430:            case FACTION_PERM: 
                    431:                break;
                    432: 
                    433:            default: 
                    434:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    435:                        "bad value for open action parameter");
                    436:        }
                    437:        if (ftop -> ftop_contents == NULLOID)
                    438:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    439:                    "missing open contents type parameter");
                    440:        if (fsb -> fsb_attrs & FATTR_STORAGE) {
                    441:            fc = &ftop -> ftop_conctl;
                    442:            if (fc -> fc_readattrlock != FLOCK_NOTREQD
                    443:                    || fc -> fc_chngattrlock != FLOCK_NOTREQD
                    444:                    || fc -> fc_deletelock != FLOCK_NOTREQD)
                    445:                return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    446:                        "bad settings for open concurrency control");
                    447:        }
                    448:        if (ftop -> ftop_ndiag > NFDIAG)
                    449:            return ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
                    450:                    "too many open diagnostics");
                    451:     }
                    452: 
                    453:     return OK;
                    454: }
                    455: 
                    456: /*  */
                    457: 
                    458: static int  frgrp2pdus (fsb, ftg, pdus, texts, npdu, fti)
                    459: register struct ftamblk *fsb;
                    460: register struct FTAMgroup *ftg;
                    461: struct type_FTAM_PDU *pdus[];
                    462: char   *texts[];
                    463: int    *npdu;
                    464: struct FTAMindication *fti;
                    465: {
                    466:     int     flags,
                    467:            i;
                    468:     register struct type_FTAM_PDU *pdu;
                    469: 
                    470:     i = 0;
                    471: 
                    472: #define        new_pdu(t,o,u,x) \
                    473:        register struct t *req; \
                    474:  \
                    475:        if ((pdu = (struct type_FTAM_PDU *) calloc (1, sizeof *pdu)) == NULL) \
                    476:            goto no_mem; \
                    477:        pdus[i] = pdu; \
                    478:        pdu  -> offset = o; \
                    479:        texts[i++] = x; \
                    480:        if ((req = (struct t *) calloc (1, sizeof *req)) == NULL) \
                    481:            goto no_mem; \
                    482:        pdu -> un.u = req;
                    483: 
                    484: #define        new_state(s) \
                    485:     if (s != int_FTAM_State__Result_success) { \
                    486:        if ((req -> state__result = \
                    487:                        (struct type_FTAM_State__Result *) \
                    488:                                calloc (1, sizeof *req -> state__result)) \
                    489:                == NULL) \
                    490:            goto no_mem; \
                    491:        req -> state__result -> parm = s; \
                    492:     }
                    493: 
                    494: #define        new_action(a) \
                    495:     if (a != int_FTAM_Action__Result_success) { \
                    496:        if ((req -> action__result = \
                    497:                        (struct type_FTAM_Action__Result *) \
                    498:                                calloc (1, sizeof *req -> action__result)) \
                    499:                == NULL) \
                    500:            goto no_mem; \
                    501:        req -> action__result -> parm = a; \
                    502:     }
                    503: 
                    504:     if ((flags = ftg -> ftg_flags) & FTG_SELECT) {
                    505:        if (ftg -> ftg_select.ftse_state == FSTATE_FAILURE)
                    506:            flags &= FTG_BEGIN | FTG_SELECT | FTG_END;
                    507:     }
                    508:     else
                    509:        if (flags & FTG_CREATE) {
                    510:            if (ftg -> ftg_create.ftce_state == FSTATE_FAILURE)
                    511:                flags &= FTG_BEGIN | FTG_CREATE | FTG_END;
                    512:        }
                    513: 
                    514:     if (flags & FTG_BEGIN) {
                    515:        if ((pdu = (struct type_FTAM_PDU *) calloc (1, sizeof *pdu)) == NULL)
                    516:            goto no_mem;
                    517:        pdus[i] = pdu;
                    518:        pdu -> offset = type_FTAM_PDU_f__begin__group__response;
                    519:        texts[i++] = "F-BEGIN-GROUP-response";
                    520:     }
                    521: 
                    522:     if (flags & FTG_SELECT) {
                    523:        register struct FTAMselect *ftse = &ftg -> ftg_select;
                    524: 
                    525:        new_pdu (type_FTAM_F__SELECT__response,
                    526:                 type_FTAM_PDU_f__select__response,
                    527:                 f__select__response, "F-SELECT-response");
                    528:        new_state (ftse -> ftse_state);
                    529:        new_action (ftse -> ftse_action);
                    530:        if ((req -> attributes = attr2fpm (fsb, &ftse -> ftse_attrs, fti))
                    531:                == NULL)
                    532:            return NOTOK;
                    533:        if (ftse -> ftse_sharedASE
                    534:                && (req -> shared__ASE__information =
                    535:                            shared2fpm (fsb, ftse -> ftse_sharedASE, fti)) == NULL)
                    536:            return NOTOK;
                    537:        if (ftse -> ftse_ndiag > 0
                    538:                && (req -> diagnostic = diag2fpm (fsb, 0, ftse -> ftse_diags,
                    539:                                                  ftse -> ftse_ndiag, fti))
                    540:                        == NULL)
                    541:            return NOTOK;
                    542:     }
                    543: 
                    544:     if (flags & FTG_CREATE) {
                    545:        register struct FTAMcreate *ftce = &ftg -> ftg_create;
                    546: 
                    547:        new_pdu (type_FTAM_F__CREATE__response,
                    548:                 type_FTAM_PDU_f__create__response,
                    549:                 f__create__response, "F-CREATE-response");
                    550:        new_state (ftce -> ftce_state);
                    551:        new_action (ftce -> ftce_action);
                    552:        if ((req -> initial__attributes = attr2fpm (fsb, &ftce -> ftce_attrs,
                    553:                                                    fti)) == NULL)
                    554:            return NOTOK;
                    555:        if (ftce -> ftce_sharedASE
                    556:                && (req -> shared__ASE__information =
                    557:                            shared2fpm (fsb, ftce -> ftce_sharedASE, fti)) == NULL)
                    558:            return NOTOK;
                    559:        if (ftce -> ftce_ndiag > 0
                    560:                && (req -> diagnostic = diag2fpm (fsb, 0, ftce -> ftce_diags,
                    561:                                                  ftce -> ftce_ndiag, fti))
                    562:                        == NULL)
                    563:            return NOTOK;
                    564:     }
                    565: 
                    566:     if (flags & FTG_CLOSE) {
                    567:        register struct FTAMclose *ftcl = &ftg -> ftg_close;
                    568: 
                    569:        new_pdu (type_FTAM_F__CLOSE__response,
                    570:                 type_FTAM_PDU_f__close__response,
                    571:                 f__close__response, "F-CLOSE-response");
                    572:        new_action (ftcl -> ftcl_action);
                    573:        if (ftcl -> ftcl_sharedASE
                    574:                && (req -> shared__ASE__information =
                    575:                            shared2fpm (fsb, ftcl -> ftcl_sharedASE, fti)) == NULL)
                    576:            return NOTOK;
                    577:        if (ftcl -> ftcl_ndiag > 0
                    578:                && (req -> diagnostic = diag2fpm (fsb, 0, ftcl -> ftcl_diags,
                    579:                                                  ftcl -> ftcl_ndiag, fti))
                    580:                        == NULL)
                    581:            return NOTOK;
                    582:     }
                    583: 
                    584:     if (flags & FTG_RDATTR) {
                    585:        register struct FTAMreadattr   *ftra = &ftg -> ftg_readattr;
                    586: 
                    587:        new_pdu (type_FTAM_F__READ__ATTRIB__response,
                    588:                 type_FTAM_PDU_f__read__attrib__response,
                    589:                 f__read__attrib__response, "F-READ-ATTRIB-response");
                    590:        new_action (ftra -> ftra_action);
                    591:        if (ftra -> ftra_attrs.fa_present
                    592:                && (req -> attributes = attr2fpm (fsb, &ftra -> ftra_attrs,
                    593:                                                  fti)) == NULL)
                    594:            return NOTOK;
                    595:        if (ftra -> ftra_ndiag > 0
                    596:                && (req -> diagnostic = diag2fpm (fsb, 0, ftra -> ftra_diags,
                    597:                                                  ftra -> ftra_ndiag, fti))
                    598:                        == NULL)
                    599:            return NOTOK;
                    600:     }
                    601: 
                    602:     if (flags & FTG_CHATTR) {
                    603:        register struct FTAMchngattr   *ftca = &ftg -> ftg_chngattr;
                    604: 
                    605:        new_pdu (type_FTAM_F__CHANGE__ATTRIB__response,
                    606:                 type_FTAM_PDU_f__change__attrib__response,
                    607:                 f__change__attrib__response, "F-CHANGE-ATTRIB-response");
                    608:        new_action (ftca -> ftca_action);
                    609:        if (ftca -> ftca_attrs.fa_present
                    610:                && (req -> attributes = attr2fpm (fsb, &ftca -> ftca_attrs,
                    611:                                                  fti)) == NULL)
                    612:            return NOTOK;
                    613:        if (ftca -> ftca_ndiag > 0
                    614:                && (req -> diagnostic = diag2fpm (fsb, 0, ftca -> ftca_diags,
                    615:                                                  ftca -> ftca_ndiag, fti))
                    616:                        == NULL)
                    617:            return NOTOK;
                    618:     }
                    619: 
                    620:     if (flags & FTG_DESELECT) {
                    621:        register struct FTAMdeselect   *ftde = &ftg -> ftg_deselect;
                    622: 
                    623:        new_pdu (type_FTAM_F__DESELECT__response,
                    624:                 type_FTAM_PDU_f__deselect__response,
                    625:                 f__deselect__response, "F-DESELECT-response");
                    626:        new_action (ftde -> ftde_action);
                    627:        if (ftde -> ftde_sharedASE
                    628:                && (req -> shared__ASE__information =
                    629:                            shared2fpm (fsb, ftde -> ftde_sharedASE, fti)) == NULL)
                    630:            return NOTOK;
                    631:        if (ftde -> ftde_charges.fc_ncharge
                    632:                && (req -> charging = chrg2fpm (fsb, &ftde -> ftde_charges,
                    633:                                                fti)) == NULL)
                    634:            return NOTOK;
                    635:        if (ftde -> ftde_ndiag > 0
                    636:                && (req -> diagnostic = diag2fpm (fsb, 0, ftde -> ftde_diags,
                    637:                                                  ftde -> ftde_ndiag, fti))
                    638:                        == NULL)
                    639:            return NOTOK;
                    640:     }
                    641: 
                    642:     if (flags & FTG_DELETE) {
                    643:        register struct FTAMdelete *ftxe = &ftg -> ftg_delete;
                    644: 
                    645:        new_pdu (type_FTAM_F__DELETE__response,
                    646:                 type_FTAM_PDU_f__delete__response,
                    647:                 f__delete__response, "F-DELETE-response");
                    648:        new_action (ftxe -> ftxe_action);
                    649:        if (ftxe -> ftxe_sharedASE
                    650:                && (req -> shared__ASE__information =
                    651:                            shared2fpm (fsb, ftxe -> ftxe_sharedASE, fti)) == NULL)
                    652:            return NOTOK;
                    653:        if (ftxe -> ftxe_charges.fc_ncharge
                    654:                && (req -> charging = chrg2fpm (fsb, &ftxe -> ftxe_charges,
                    655:                                                fti)) == NULL)
                    656:            return NOTOK;
                    657:        if (ftxe -> ftxe_ndiag > 0
                    658:                && (req -> diagnostic = diag2fpm (fsb, 0, ftxe -> ftxe_diags,
                    659:                                                  ftxe -> ftxe_ndiag, fti))
                    660:                        == NULL)
                    661:            return NOTOK;
                    662:     }
                    663: 
                    664:     if (flags & FTG_OPEN) {
                    665:        register struct FTAMopen *ftop = &ftg -> ftg_open;
                    666:        register struct type_FTAM_Contents__Type__Attribute *proposed;
                    667: 
                    668:        new_pdu (type_FTAM_F__OPEN__response,
                    669:                 type_FTAM_PDU_f__open__response,
                    670:                 f__open__response, "F-OPEN-response");
                    671:        new_state (ftop -> ftop_state);
                    672:        new_action (ftop -> ftop_action);
                    673:        if ((proposed = (struct type_FTAM_Contents__Type__Attribute *)
                    674:                                calloc (1, sizeof *proposed)) == NULL)
                    675:            goto no_mem;
                    676:        req -> contents__type = proposed;
                    677:        if ((proposed -> document__type__name =
                    678:                        oid_cpy (ftop -> ftop_contents)) == NULLOID)
                    679:            goto no_mem;
                    680:        if (proposed -> parameter = ftop -> ftop_parameter)
                    681:            proposed -> parameter -> pe_refcnt++;
                    682:        if (conctl_present (&ftop -> ftop_conctl)
                    683:                && (req -> concurrency__control =
                    684:                                conctl2fpm (fsb, &ftop -> ftop_conctl, fti))
                    685:                        == NULL)
                    686:            return NOTOK;
                    687:        if (ftop -> ftop_sharedASE
                    688:                && (req -> shared__ASE__information =
                    689:                            shared2fpm (fsb, ftop -> ftop_sharedASE, fti)) == NULL)
                    690:            return NOTOK;
                    691:        if (ftop -> ftop_ndiag > 0
                    692:                && (req -> diagnostic = diag2fpm (fsb, 0, ftop -> ftop_diags,
                    693:                                                  ftop -> ftop_ndiag, fti))
                    694:                        == NULL)
                    695:            return NOTOK;
                    696:     }
                    697: 
                    698:     if (flags & FTG_END) {
                    699:        if ((pdu = (struct type_FTAM_PDU *) calloc (1, sizeof *pdu)) == NULL)
                    700:            goto no_mem;
                    701:        pdus[i] = pdu;
                    702:        pdu -> offset = type_FTAM_PDU_f__end__group__response;
                    703:        texts[i++] = "F-END-GROUP-response";
                    704:     }
                    705: 
                    706:     *npdu = i;
                    707:     return OK;
                    708: 
                    709: #undef new_pdu
                    710: #undef new_state
                    711: #undef new_action
                    712: 
                    713: no_mem: ;
                    714:     return ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "out of memory");
                    715: }

unix.superglobalmegacorp.com

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