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