Annotation of 43BSDTahoe/new/xns/morexnslib/ch/CHretrieve.c, revision 1.1.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.