Annotation of 43BSDTahoe/new/xns/morexnslib/ch/CHretrieve.c, revision 1.1

1.1     ! root        1: #include <stdio.h>
        !             2: 
        !             3: /* contains:
        !             4:  * CH_RetrieveItem
        !             5:  */
        !             6: 
        !             7: #include <sys/types.h>
        !             8: #include <netns/ns.h>
        !             9: #include "Clearinghouse2_defs.h"
        !            10: #include <xnscourier/CHEntries.h>
        !            11: #include <xnscourier/except.h>
        !            12: 
        !            13: /*
        !            14:  * This module contains the routine:
        !            15:  * CH_RetrieveItem(pattern,property,result)
        !            16:  *     ObjectNamePattern pattern;
        !            17:  *     Property property;
        !            18:  *     RetrieveItemResults *result;
        !            19:  */
        !            20: 
        !            21: static Cardinal nullhash = 0;
        !            22: static Authenticator nullagent = {{0,{0,(Unspecified*) 0}},
        !            23:                                  {1,&nullhash}};
        !            24: static ObjectName currentname;
        !            25: extern struct ns_addr *LookupCHAddr();
        !            26: 
        !            27: CH_RetrieveItem(pattern,property,result)
        !            28:        ObjectNamePattern pattern;
        !            29:        Property property;
        !            30:        RetrieveItemResults *result;
        !            31: {
        !            32:        CourierConnection *conn, *ch2conn;
        !            33:        extern CourierConnection *CH_GetFirstCH(), *CH_GetOtherCH();
        !            34:        RetrieveItemResults riresult;
        !            35:        ObjectName hint;                /* from WrongServer errors */
        !            36: 
        !            37:        if (pattern.object == NULL ||
        !            38:            pattern.domain == NULL ||
        !            39:            pattern.organization == NULL) {
        !            40:                return(1);
        !            41:            }
        !            42: 
        !            43:        if ((conn = CH_GetFirstCH()) == NULL) {
        !            44:                fprintf(stderr,"Can't open connection to local Clearinghouse\n");
        !            45:                return(1);
        !            46:        }
        !            47:        DURING {
        !            48:                riresult= RetrieveItem(conn, NULL,
        !            49:                                pattern,property,nullagent);
        !            50:        } HANDLER {
        !            51:                if (Exception.Code == REJECT_ERROR) {
        !            52:                    CourierClose(conn);
        !            53:                    fprintf(stderr,"Problem with clearinghouse.addresses. Local CH rejected request\n");
        !            54:                    return(1);
        !            55:                }
        !            56: 
        !            57:                if (Exception.Code != WrongServer) {
        !            58:                    CourierClose(conn);
        !            59:                    return(1);  /* some random error */
        !            60:                }
        !            61:                hint = CourierErrArgs(WrongServerArgs,hint);
        !            62:                ch2conn = CH_GetOtherCH(conn,hint);
        !            63:                CourierClose(conn);
        !            64:                if (ch2conn == NULL) return(1);
        !            65:                conn = ch2conn;
        !            66:                /* probe the second clearinghouse */
        !            67:                DURING
        !            68:                        riresult = RetrieveItem(conn,NULL,
        !            69:                                pattern, property, nullagent);
        !            70:                HANDLER {
        !            71:                        /* should be smarter is WrongServer here */
        !            72:                        CourierClose(conn);
        !            73:                        return(1);
        !            74:                } END_HANDLER;
        !            75:                /* we got it */
        !            76:        } END_HANDLER;
        !            77: 
        !            78:        CourierClose(conn);
        !            79: 
        !            80:        bcopy(&riresult, result, sizeof(Clearinghouse2_RetrieveItemResults));
        !            81: 
        !            82:        return(0);
        !            83: }
        !            84: 
        !            85: 

unix.superglobalmegacorp.com

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