|
|
1.1 root 1: % run this through LaTeX with the appropriate wrapper
2:
3: \chapter {The ISODE Services Database}\label{isoservices}
4: The database \file{isoservices} in the ISODE \verb"ETCDIR" directory
5: (usually \file{/usr/etc/})
6: contains a simple mapping between
7: textual descriptions of services, service selectors, and local programs.
8:
9: The database itself is an ordinary ASCII text file containing information
10: regarding the known services on the host.
11: Each line contains
12: \begin{itemize}
13: \item the name of an entity and the provider on which the entity resides;
14:
15: \item the selector used to identify the entity to the provider,
16: interpreted as a:
17: \begin{describe}
18: \item[number,] if the selector starts with a hash-mark (`\verb"#"').
19: More precisely, this denotes the so-called
20: GOSIP method for denoting selectors, which
21: uses a two octet, network byte-order representation.
22:
23: \item[ascii string,]
24: if the selector appears in double-quotes (`\verb|"|').
25: The usual escape mechanisms can be used to
26: introduce non-printable characters.
27:
28: \item[octet string,]
29: if all else fails. The standard ``explosion''
30: encoding is used, each octet in the string is
31: represented by a two-digit hexadecimal quantity.
32: \end{describe}
33: and,
34:
35: \item the program and argument vector to \man execve(2) when the service is
36: requested.
37: \end{itemize}
38: Blanks and/or tab characters are used to separate items.
39: All items after the first two are interpreted as an argument vector.
40: However, double-quotes may be used to prevent separation for items containing
41: embedded whitspace.
42: The sharp character (`\verb"#"') at the beginning of a line indicates a
43: commentary line.
44:
45: \section {Accessing the Database}\label{isoservent}
46: The \man libicompat(3n) library contains the routines used to access the
47: database.
48: These routines ultimately manipulate an \verb"isoservent" structure,
49: which is the internal form.
50: \begin{quote}\index{isoservent}\small\begin{verbatim}
51: struct isoservent {
52: char *is_entity;
53: char *is_provider;
54:
55: #define ISSIZE 64
56: int is_selectlen;
57: char is_selector[ISSIZE];
58:
59: char **is_vec;
60: char **is_tail;
61: };
62: \end{verbatim}\end{quote}
63: The elements of this structure are:
64: \begin{describe}
65: \item[\verb"is\_entity":] the name of the entity;
66:
67: \item[\verb"is\_provider":] the name of the provider on which the entity
68: resides;
69:
70: \item[\verb"is\_selector"\verb"is\_selectlen":] the selector used to
71: identify the entity to the provider
72: (the element \verb"is_port" is an alias for this concept,
73: used to denote the entity to the provider by means of a two-octet number
74: specified in network-byte order);
75:
76: \item[\verb"is\_vec":] the \man execve(2) vector;
77: and,
78:
79: \item[\verb"is\_tail":] the next free slot in \verb"is_vec".
80: \end{describe}
81:
82: The routine \verb"getisoservent" reads the next entry in the database,
83: opening the database if necessary.
84: \begin{quote}\index{getisoservent}\small\begin{verbatim}
85: struct isoservent *getisoservent ()
86: \end{verbatim}\end{quote}
87: It returns the manifest constant \verb"NULL" on error or end-of-file.
88:
89: The routine \verb"setisoservent" opens and rewinds the database.
90: \begin{quote}\index{setisoservent}\small\begin{verbatim}
91: int setisoservent (f)
92: int f;
93: \end{verbatim}\end{quote}
94: The parameter to this procedure is:
95: \begin{describe}
96: \item[\verb"f":] the ``stayopen'' indicator,
97: if non-zero, then the database will remain open over subsequent calls to the
98: library.
99: \end{describe}
100: The routine \verb"endisoservent" closes the database.
101: \begin{quote}\index{endisoservent}\small\begin{verbatim}
102: int endisoservent ()
103: \end{verbatim}\end{quote}
104: Both of these routines return non-zero on success and zero otherwise.
105:
106: There are two routines used to fetch a particular entry in the database.
107: The routine \verb"getisoserventbyname" maps textual descriptions into the
108: internal form.
109: \begin{quote}\index{getisoserventbyname}\small\begin{verbatim}
110: struct isoservent *getisoserventbyname (entity, provider)
111: char *entity,
112: *provider;
113: \end{verbatim}\end{quote}
114: The parameters to this procedure are:
115: \begin{describe}
116: \item[\verb"entity":] the entity providing the desired service;
117: and,
118:
119: \item[\verb"provider":] the provider supporting the named \verb"entity".
120: \end{describe}
121: On a successful return,
122: the \verb"isoservent" structure describing that service is returned.
123: On failure, the manifest constant \verb"NULL" is returned instead.
124:
125: The routine \verb"getisoserventbyselector" performs the inverse function.
126: \begin{quote}\index{getisoserventbyselector}\small\begin{verbatim}
127: struct isoservent *getisoserventbyselector (provider,
128: selector, selectlen)
129: char *provider,
130: *selector;
131: int selectlen;
132: \end{verbatim}\end{quote}
133: The parameters to this procedure are:
134: \begin{describe}
135: \item[\verb"provider":] the provider supporting the desired entity;
136: and,
137:
138: \item[\verb"selector"/\verb"selectlen":] the selector on the provider
139: where the desired entity resides.
140: \end{describe}
141: On a successful return,
142: an \verb"isoservent" structure describing the entity residing on the provider
143: is returned.
144:
145: The routine \verb"getisoserventbyport" performs a similar function.
146: \begin{quote}\index{getisoserventbyport}\small\begin{verbatim}
147: struct isoservent *getisoserventbyport (provider, port)
148: char *provider;
149: unsigned short port;
150: \end{verbatim}\end{quote}
151: The parameters to this procedure are:
152: \begin{describe}
153: \item[\verb"provider":] the provider supporting the desired entity;
154: and,
155:
156: \item[\verb"port":] the port on the provider (in network-byte order)
157: where the desired entity resides.
158: \end{describe}
159: On a successful return,
160: an \verb"isoservent" structure describing the entity residing on the provider
161: is returned.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.