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