]> diplodocus.org Git - nmh/blob - mts/smtp/smtp.h
Added NMH_ADDL_CPPFLAGS macro in new m4/cppflags.m4, to remove
[nmh] / mts / smtp / smtp.h
1
2 /*
3 * smtp.h -- definitions for the nmh SMTP Interface
4 */
5
6 /* length is the length of the string in text[], which is also NUL
7 * terminated, so s.text[s.length] should always be 0.
8 */
9 struct smtp {
10 int code;
11 int length;
12 char text[BUFSIZ];
13 };
14
15 /*
16 * prototypes
17 */
18 /* int client (); */
19 int sm_init (char *, char *, char *, int, int, int, int, int, char *, char *,
20 const char *, int);
21 int sm_winit (char *);
22 int sm_wadr (char *, char *, char *);
23 int sm_waend (void);
24 int sm_wtxt (char *, int);
25 int sm_wtend (void);
26 int sm_end (int);
27 char *rp_string (int);
28
29 /* The remainder of this file is derived from "mmdf.h" */
30
31 /*
32 * Copyright (C) 1979,1980,1981,1982,1983 University of Delaware
33 * Used by permission, May, 1984.
34 */
35
36 /*
37 * MULTI-CHANNEL MEMO DISTRIBUTION FACILITY (MMDF)
38 *
39 *
40 * Copyright (C) 1979,1980,1981,1982,1983 University of Delaware
41 *
42 * Department of Electrical Engineering
43 * University of Delaware
44 * Newark, Delaware 19711
45 *
46 * Phone: (302) 738-1163
47 *
48 *
49 * This program module was developed as part of the University
50 * of Delaware's Multi-Channel Memo Distribution Facility (MMDF).
51 *
52 * Acquisition, use, and distribution of this module and its listings
53 * are subject restricted to the terms of a license agreement.
54 * Documents describing systems using this module must cite its source.
55 *
56 * The above statements must be retained with all copies of this
57 * program and may not be removed without the consent of the
58 * University of Delaware.
59 *
60 */
61
62 /* Reply Codes for MMDF
63 *
64 * Based on: "Revised FTP Reply Codes", by Jon Postel & Nancy Neigus Arpanet
65 * RFC 640 / NIC 30843, in the "Arpanet Protocol Handbook", E. Feinler
66 * and J. Postel (eds.), NIC 7104, Network Information Center, SRI
67 * International: Menlo Park, CA. (NTIS AD-A0038901)
68 *
69 * Actual values are different, but scheme is same. Codes must fit into
70 * 8-bits (to pass on exit() calls); fields are packed 2-3-3 and interpreted
71 * as octal numbers.
72 *
73 * Basic format:
74 *
75 * 0yz: positive completion; entire action done
76 * 1yz: positive intermediate; only part done
77 * 2yz: Transient negative completion; may work later
78 * 3yz: Permanent negative completion; you lose forever
79 *
80 * x0z: syntax
81 * x1z: general; doesn't fit any other category
82 * x2z: connections; truly transfer-related
83 * x3z: user/authentication/account
84 * x4x: mail
85 * x5z: file system
86 *
87 * 3-bit z field is unique to the reply. In the following,
88 * the RP_xVAL defines are available for masking to obtain a field.
89 */
90
91 /*
92 * FIELD DEFINITIONS & BASIC VALUES
93 */
94
95 /* FIELD 1: Basic degree of success (2-bits) */
96
97 #define RP_BTYP '\200' /* good vs. bad; on => bad */
98 #define RP_BVAL '\300' /* basic degree of success */
99
100 #define RP_BOK '\000' /* went fine; all done */
101 #define RP_BPOK '\100' /* only the first part got done */
102 #define RP_BTNO '\200' /* temporary failure; try later */
103 #define RP_BNO '\300' /* not now, nor never; you lose */
104
105 /* FIELD 2: Basic domain of discourse (3-bits) */
106
107 #define RP_CVAL '\070' /* basic category (domain) of reply */
108
109 #define RP_CSYN '\000' /* purely a matter of form */
110 #define RP_CGEN '\010' /* couldn't find anywhere else for it */
111 #define RP_CCON '\020' /* data-transfer-related issue */
112 #define RP_CUSR '\030' /* pertaining to the user */
113 #define RP_CMAI '\040' /* specific to mail semantics */
114 #define RP_CFIL '\050' /* file system */
115 #define RP_CLIO '\060' /* local i/o system */
116
117 /* FIELD 3: Specific value for this reply (3-bits) */
118
119 #define RP_SVAL '\007' /* specific value of reply */
120
121
122 /*
123 * SPECIFIC SUCCESS VALUES
124 */
125
126 /*
127 * Complete Success
128 */
129
130 /* done (e.g., w/transaction) */
131 #define RP_DONE (RP_BOK | RP_CGEN | '\000')
132
133 /* general-purpose OK */
134 #define RP_OK (RP_BOK | RP_CGEN | '\001')
135
136 /* message is accepted (w/text) */
137 #define RP_MOK (RP_BOK | RP_CMAI | '\000')
138
139
140 /*
141 * Partial Success
142 */
143
144 /* you are the requestor */
145 #define RP_MAST (RP_BPOK| RP_CGEN | '\000')
146
147 /* you are the requestee */
148 #define RP_SLAV (RP_BPOK| RP_CGEN | '\001')
149
150 /* message address is accepted */
151 #define RP_AOK (RP_BPOK| RP_CMAI | '\000')
152
153
154 /*
155 * SPECIFIC FALURE VALUES
156 */
157
158 /*
159 * Partial Failure
160 */
161
162 /* not now; maybe later */
163 #define RP_AGN (RP_BTNO | RP_CGEN | '\000')
164
165 /* timeout */
166 #define RP_TIME (RP_BTNO | RP_CGEN | '\001')
167
168 /* no-op; nothing done, this time */
169 #define RP_NOOP (RP_BTNO | RP_CGEN | '\002')
170
171 /* encountered an end of file */
172 #define RP_EOF (RP_BTNO | RP_CGEN | '\003')
173
174 /* channel went bad */
175 #define RP_NET (RP_BTNO | RP_CCON | '\000')
176
177 /* foreign host screwed up */
178 #define RP_BHST (RP_BTNO | RP_CCON | '\001')
179
180 /* host went away */
181 #define RP_DHST (RP_BTNO | RP_CCON | '\002')
182
183 /* general net i/o problem */
184 #define RP_NIO (RP_BTNO | RP_CCON | '\004')
185
186 /* error reading/writing file */
187 #define RP_FIO (RP_BTNO | RP_CFIL | '\000')
188
189 /* unable to create file */
190 #define RP_FCRT (RP_BTNO | RP_CFIL | '\001')
191
192 /* unable to open file */
193 #define RP_FOPN (RP_BTNO | RP_CFIL | '\002')
194
195 /* general local i/o problem */
196 #define RP_LIO (RP_BTNO | RP_CLIO | '\000')
197
198 /* resource currently locked */
199 #define RP_LOCK (RP_BTNO | RP_CLIO | '\001')
200
201
202 /*
203 * Complete Failure
204 */
205
206 /* bad mechanism/path; try alternate? */
207 #define RP_MECH (RP_BNO | RP_CGEN | '\000')
208
209 /* general-purpose NO */
210 #define RP_NO (RP_BNO | RP_CGEN | '\001')
211
212 /* general prototocol error */
213 #define RP_PROT (RP_BNO | RP_CCON | '\000')
214
215 /* bad reply code (PERMANENT ERROR) */
216 #define RP_RPLY (RP_BNO | RP_CCON | '\001')
217
218 /* couldn't deliver */
219 #define RP_NDEL (RP_BNO | RP_CMAI | '\000')
220
221 /* couldn't parse the request */
222 #define RP_HUH (RP_BNO | RP_CSYN | '\000')
223
224 /* no such command defined */
225 #define RP_NCMD (RP_BNO | RP_CSYN | '\001')
226
227 /* bad parameter */
228 #define RP_PARM (RP_BNO | RP_CSYN | '\002')
229
230 /* command not implemented */
231 #define RP_UCMD (RP_BNO | RP_CSYN | '\003')
232
233 /* unknown user */
234 #define RP_USER (RP_BNO | RP_CUSR | '\000')
235
236
237 /*
238 * Macros to access reply info
239 */
240
241 /* get the entire return value */
242 #define rp_gval(val) ((signed char) (val))
243
244
245 /*
246 * The next three give the field's bits, within the whole value
247 */
248
249 /* get the basic part of return value */
250 #define rp_gbval(val) (rp_gval (val) & RP_BVAL)
251
252 /* get the domain part of value */
253 #define rp_gcval(val) (rp_gval (val) & RP_CVAL)
254
255 /* get the specific part of value */
256 #define rp_gsval(val) (rp_gval (val) & RP_SVAL)
257
258
259 /*
260 * The next three give the numeric value within the field
261 */
262
263 /* get the basic part right-shifted */
264 #define rp_gbbit(val) ((rp_gval (val) >> 6) & 03)
265
266 /* get the domain part right-shifted */
267 #define rp_gcbit(val) ((rp_gval (val) >> 3) & 07)
268
269 /* get the specific part right-shifted */
270 #define rp_gsbit(val) (rp_gval (val) & 07)
271
272
273 /*
274 * MACHINE DEPENDENCY
275 *
276 * The following treat the value as strictly numeric.
277 * It relies on the negative values being numerically
278 * negative.
279 */
280
281 /* is return value positive? */
282 #define rp_isgood(val) (rp_gval (val) >= 0)
283
284 /* is return value negative? */
285 #define rp_isbad(val) (rp_gval (val) < 0)
286