Annotation of 43BSD/contrib/xns/doc/clearinghouse.n, revision 1.1.1.1

1.1       root        1: .TH CLEARINGHOUSESUPPORT 3X Cornell
                      2: .SH NAME
                      3: CH_StringToName,
                      4: CH_LookupAddr,
                      5: CH_GetFirstCH,
                      6: CH_GetOtherCH,
                      7: CH_Enumerate,
                      8: CH_EnumerateAliases
                      9: \- Clearinghouse support routines.
                     10: .SH SYNOPSIS
                     11: .PP
                     12: .nf
                     13: .B "#include <sys/types.h>             /* used by ns.h */"
                     14: .B "#include <netns/ns.h>              /* for sockaddr_ns */"
                     15: .B "#include <xnscourier/Clearinghouse2.h>"
                     16: .B "#include <xnscourier/CH.h>"
                     17: .PP
                     18: .B "Clearinghouse2_ObjectName CH_StringToName(string, defaults)"
                     19: .B "   char *string;"
                     20: .B "   Clearinghouse2_ObjectName *defaults;"
                     21: .PP
                     22: .B "struct xn_addr * CH_LookupAddr(pattern, property)"
                     23: .B "   Clearinghouse2_ObjectName pattern;"
                     24: .B "   Clearinghouse2_Property property;"
                     25: .PP
                     26: .B "CourierConnection * CH_GetFirstCH( )"
                     27: .PP
                     28: .B "CourierConnection * CH_GetOtherCH(conn, hint)"
                     29: .B "   CourierConnection *conn;"
                     30: .B "   Clearinghouse2_ObjectName hint;"
                     31: .PP
                     32: .B "int CH_Enumerate(pattern, property, eachName)"
                     33: .B "   Clearinghouse2_ObjectName pattern;"
                     34: .B "   Clearinghouse2_Property property;"
                     35: .B "   int (*eachName)();"
                     36: .PP
                     37: .B "CH_EnumerateAliases(pattern, eachName)"
                     38: .B "   Clearinghouse2_ObjectNamePattern pattern;"
                     39: .B "   int (*eachName)();"
                     40: .B "int eachName(name)"
                     41: .B "   Clearinghouse2_ObjectName name;"
                     42: .fi
                     43: .PP
                     44: Link with
                     45: .IR "-lcourier" .
                     46: .SH DESCRIPTION
                     47: .PP
                     48: These functions provide a convenient interface to the XNS Clearinghouse
                     49: built on Courier remote procedure calls.  They all require the Maryland
                     50: XNS kernel.
                     51: .PP
                     52: Given a string in standard format (e.g. 
                     53: ``jqj:Computer\ Science:cornell-univ''),
                     54: .I CH_StringToName
                     55: translates a string in standard format, e.g.
                     56: ``jqj:computer science:cornell-univ'' into a Clearinghouse ObjectName struct.
                     57: The storage for the resulting 3 fields is dynamically allocated via malloc().
                     58: If the argument string is incomplete, e.g. ``jqj'' or 
                     59: ``::cornell-univ'', the unspecified values are filled in from
                     60: .IR defaults .
                     61: .I Defaults
                     62: may be NULL, in which case 0-length strings are used as defaults.
                     63: .PP
                     64: Given a Clearinghouse three part name (possibly containing wild cards
                     65: in the local object part)
                     66: designating an addressable resouce on the net,
                     67: and the property number on which a NetworkAddressList is expected to occur,
                     68: .I CH_LookupAddr
                     69: returns a pointer to an xn_addr structure associated with that name.
                     70: Note that the xn_addr structure is statically allocated!
                     71: If
                     72: .I property
                     73: is given as 0, then the ``addressList'' property (actually 4) is used;
                     74: this is the property typically used for storing Clearinghouse addresses of
                     75: objects.  Returns 0 if any error occurs, if the name given is not
                     76: registered, or if the name does not have the specified property.
                     77: If a name has several network addresses (e.g. a gateway machine), only
                     78: the first or primary address is returned; to obtain all addresses use
                     79: the remote procedure
                     80: .IR Clearinghouse2_RetrieveAddresses .
                     81: Users who require greater control than is provided by
                     82: .I CH_LookupAddress
                     83: should call
                     84: .I Clearinghouse2_RetrieveItem
                     85: directly.  Example:
                     86: .PP
                     87: .nf
                     88: struct xn_addr * pvaxaddr;
                     89: static struct Clearinghouse2_ObjectName pvaxname =
                     90:         {"cornell-univ", "computer science", "pvax"};
                     91: pvaxaddr = CH_LookupAddr(pvaxname, 0);
                     92: .fi
                     93: .PP
                     94: The routine
                     95: .I CH_GetFirstCH
                     96: returns an XNS Courier connection to a nearby clearinghouse, useful
                     97: for Clearinghouse remote procedure calls.  Since the Clearinghouse is
                     98: distributed, that instance of the CH may not contain the data desired;
                     99: in such cases, a remote CH procedure call will return the error
                    100: ``WrongServer'' with a hint as to the correct server, and the user
                    101: may retry the operation after connecting (using 
                    102: .IR CH_GetOtherCH )
                    103: to the clearinghouse specified by the hint.  For example:
                    104: .PP
                    105: .nf
                    106: conn = CH_GetFirstCH();
                    107: DURING objectname = Clearinghouse2_LookupObject(name, agent);
                    108: HANDLER {
                    109:     if (Exception.Code == Clearinghouse2_WrongServer) {
                    110:        hint = CourierErrArgs(Clearinghouse2_WrongServerArgs, hint);
                    111:        ch2conn = CH_GetOtherCH(conn, hint);
                    112:        CourierClose(conn);
                    113:        objectname = Clearinghouse2_LookupObject(name, agent);
                    114:     } else exit(1);
                    115: } END_HANDLER
                    116: .fi
                    117: .PP
                    118: .I CH_Enumerate
                    119: and
                    120: .I CH_EnumerateAliases
                    121: each accept a pointer to a user-supplied function 
                    122: .IR eachProc .
                    123: This function is called once for each name in the local Clearinghouse
                    124: satisfying the 
                    125: .I pattern
                    126: (which may contain wildcards in its local object part only) supplied;
                    127: .I eachProc
                    128: is called with a single argument, the name of the current object.
                    129: .I CH_Enumerate
                    130: enumerates over all distinguished objects (i.e. no aliases) matching
                    131: the specified pattern and having the specified
                    132: .IR property .
                    133: To enumerate everything in a domain which
                    134: has a given property, use ``*'' in the object portion
                    135: of the pattern.  To enumerate all names in a domain which match a
                    136: given pattern, use the property value 0.  Other useful property values
                    137: are specified in
                    138: .IR <courier/CHEntries.h> .
                    139: .PP
                    140: .I CH_EnumerateAliases
                    141: is similar to
                    142: .I CH_Enumerate ,
                    143: except that
                    144: .I eachProc
                    145: is called once for each alias in the clearinghouse
                    146: matching the specified pattern.
                    147: .SH NOTES
                    148: .PP
                    149: A CourierConnection is an anonymous data structure used by the
                    150: runtimes.  Users should not dereference pointers to CourierConnection
                    151: themselves.
                    152: .PP
                    153: Some useful definitions equivalent to those in the include file
                    154: .I "<courier/Clearinghouse2.h>"
                    155: include:
                    156: .PP
                    157: .nf
                    158: typedef struct {
                    159:        char *organization;
                    160:        char *domain;
                    161:        char *object;
                    162: } Clearinghouse2_ObjectName;
                    163: .PP
                    164: typedef unsigned long Clearinghouse2_Property;
                    165: .fi
                    166: .SH FILES
                    167: /usr/local/lib/libcourier.a            -lcourier library.
                    168: .br
                    169: /usr/new/lib/xnscourier/clearinghouse.addresses        local clearinghouse address.
                    170: .SH SEE ALSO
                    171: clearinghouse(3X)
                    172: .br
                    173: ``XNS Courier Under Unix''.
                    174: .br
                    175: ``Clearinghouse Protocol,'' XSIS 078404 (April 1984).
                    176: .SH DIAGNOSTICS
                    177: .SH BUGS
                    178: Probably lots of them.  This is an \(*d -test version of Courier support
                    179: routines and is guaranteed to have bugs.  Please report them to 
                    180: .BR jqj@cornell .
                    181: .PP
                    182: In particular, since Packet Exchange is not yet working in the kernel,
                    183: .I CH_GetFirstCH
                    184: looks up the local clearinghouse address in a file rather than doing
                    185: an expanding ring broadcast.  This will be fixed soon.
                    186: .PP
                    187: .I CH_LookupAddr
                    188: returns a pointer to a static data structure.  The other routines use
                    189: .I malloc()
                    190: to dynamically allocate their data (you may use the routine
                    191: .I clear_Clearinghouse2_ObjectName
                    192: to free the strings allocated by
                    193: .IR CH_StringToName ).
                    194: .SH AUTHOR
                    195: J.Q. Johnson

unix.superglobalmegacorp.com

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