xref: /titanic_54/usr/src/cmd/lp/include/msgs.h (revision 7c478bd95313f5f23a4c958a745db2134aa03244)
1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * CDDL HEADER START
3*7c478bd9Sstevel@tonic-gate  *
4*7c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*7c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*7c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*7c478bd9Sstevel@tonic-gate  * with the License.
8*7c478bd9Sstevel@tonic-gate  *
9*7c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*7c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*7c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*7c478bd9Sstevel@tonic-gate  * and limitations under the License.
13*7c478bd9Sstevel@tonic-gate  *
14*7c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*7c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*7c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*7c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*7c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*7c478bd9Sstevel@tonic-gate  *
20*7c478bd9Sstevel@tonic-gate  * CDDL HEADER END
21*7c478bd9Sstevel@tonic-gate  */
22*7c478bd9Sstevel@tonic-gate /*
23*7c478bd9Sstevel@tonic-gate  * Copyright 1993 Sun Microsystems, Inc.  All rights reserved.
24*7c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
25*7c478bd9Sstevel@tonic-gate  */
26*7c478bd9Sstevel@tonic-gate 
27*7c478bd9Sstevel@tonic-gate /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28*7c478bd9Sstevel@tonic-gate /*	  All Rights Reserved  	*/
29*7c478bd9Sstevel@tonic-gate 
30*7c478bd9Sstevel@tonic-gate 
31*7c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.18	*/
32*7c478bd9Sstevel@tonic-gate 
33*7c478bd9Sstevel@tonic-gate # include	<sys/types.h>
34*7c478bd9Sstevel@tonic-gate # include	<poll.h>
35*7c478bd9Sstevel@tonic-gate # include	<stdarg.h>
36*7c478bd9Sstevel@tonic-gate # include	<stropts.h>
37*7c478bd9Sstevel@tonic-gate 
38*7c478bd9Sstevel@tonic-gate #if	!defined(_LP_MSGS_H)
39*7c478bd9Sstevel@tonic-gate # define	_LP_MSGS_H
40*7c478bd9Sstevel@tonic-gate 
41*7c478bd9Sstevel@tonic-gate /*
42*7c478bd9Sstevel@tonic-gate  * THE DISPATCH TABLE DEPENDS ON EACH R_... MESSAGE FOLLOWING
43*7c478bd9Sstevel@tonic-gate  * IMMEDIATELY AFTER ITS CORRESPONDING S_... COUNTERPART.
44*7c478bd9Sstevel@tonic-gate  * I.E R_... MESSAGE FOR A S_... MESSAGE IS (S_... + 1)
45*7c478bd9Sstevel@tonic-gate  */
46*7c478bd9Sstevel@tonic-gate # define	R_BAD_MESSAGE			0
47*7c478bd9Sstevel@tonic-gate # define	S_NEW_QUEUE			1
48*7c478bd9Sstevel@tonic-gate # define	R_NEW_QUEUE			2
49*7c478bd9Sstevel@tonic-gate # define	S_ALLOC_FILES			3
50*7c478bd9Sstevel@tonic-gate # define	R_ALLOC_FILES			4
51*7c478bd9Sstevel@tonic-gate # define	S_PRINT_REQUEST			5
52*7c478bd9Sstevel@tonic-gate # define	R_PRINT_REQUEST			6
53*7c478bd9Sstevel@tonic-gate # define	S_START_CHANGE_REQUEST		7
54*7c478bd9Sstevel@tonic-gate # define	R_START_CHANGE_REQUEST		8
55*7c478bd9Sstevel@tonic-gate # define	S_END_CHANGE_REQUEST		9
56*7c478bd9Sstevel@tonic-gate # define	R_END_CHANGE_REQUEST		10
57*7c478bd9Sstevel@tonic-gate # define	S_CANCEL_REQUEST		11
58*7c478bd9Sstevel@tonic-gate # define	R_CANCEL_REQUEST		12
59*7c478bd9Sstevel@tonic-gate # define	S_INQUIRE_REQUEST		13
60*7c478bd9Sstevel@tonic-gate # define	R_INQUIRE_REQUEST		14
61*7c478bd9Sstevel@tonic-gate # define	S_LOAD_PRINTER			15
62*7c478bd9Sstevel@tonic-gate # define	R_LOAD_PRINTER			16
63*7c478bd9Sstevel@tonic-gate # define	S_UNLOAD_PRINTER		17
64*7c478bd9Sstevel@tonic-gate # define	R_UNLOAD_PRINTER		18
65*7c478bd9Sstevel@tonic-gate # define	S_INQUIRE_PRINTER_STATUS	19
66*7c478bd9Sstevel@tonic-gate # define	R_INQUIRE_PRINTER_STATUS	20
67*7c478bd9Sstevel@tonic-gate # define	S_LOAD_CLASS			21
68*7c478bd9Sstevel@tonic-gate # define	R_LOAD_CLASS			22
69*7c478bd9Sstevel@tonic-gate # define	S_UNLOAD_CLASS			23
70*7c478bd9Sstevel@tonic-gate # define	R_UNLOAD_CLASS			24
71*7c478bd9Sstevel@tonic-gate # define	S_INQUIRE_CLASS			25
72*7c478bd9Sstevel@tonic-gate # define	R_INQUIRE_CLASS			26
73*7c478bd9Sstevel@tonic-gate # define	S_MOUNT				27
74*7c478bd9Sstevel@tonic-gate # define	R_MOUNT				28
75*7c478bd9Sstevel@tonic-gate # define	S_UNMOUNT			29
76*7c478bd9Sstevel@tonic-gate # define	R_UNMOUNT			30
77*7c478bd9Sstevel@tonic-gate # define	S_MOVE_REQUEST			31
78*7c478bd9Sstevel@tonic-gate # define	R_MOVE_REQUEST			32
79*7c478bd9Sstevel@tonic-gate # define	S_MOVE_DEST			33
80*7c478bd9Sstevel@tonic-gate # define	R_MOVE_DEST			34
81*7c478bd9Sstevel@tonic-gate # define	S_ACCEPT_DEST			35
82*7c478bd9Sstevel@tonic-gate # define	R_ACCEPT_DEST			36
83*7c478bd9Sstevel@tonic-gate # define	S_REJECT_DEST			37
84*7c478bd9Sstevel@tonic-gate # define	R_REJECT_DEST			38
85*7c478bd9Sstevel@tonic-gate # define	S_ENABLE_DEST			39
86*7c478bd9Sstevel@tonic-gate # define	R_ENABLE_DEST			40
87*7c478bd9Sstevel@tonic-gate # define	S_DISABLE_DEST			41
88*7c478bd9Sstevel@tonic-gate # define	R_DISABLE_DEST			42
89*7c478bd9Sstevel@tonic-gate # define	S_LOAD_FILTER_TABLE		43
90*7c478bd9Sstevel@tonic-gate # define	R_LOAD_FILTER_TABLE		44
91*7c478bd9Sstevel@tonic-gate # define	S_UNLOAD_FILTER_TABLE		45
92*7c478bd9Sstevel@tonic-gate # define	R_UNLOAD_FILTER_TABLE		46
93*7c478bd9Sstevel@tonic-gate # define	S_LOAD_PRINTWHEEL		47
94*7c478bd9Sstevel@tonic-gate # define	R_LOAD_PRINTWHEEL		48
95*7c478bd9Sstevel@tonic-gate # define	S_UNLOAD_PRINTWHEEL		49
96*7c478bd9Sstevel@tonic-gate # define	R_UNLOAD_PRINTWHEEL		50
97*7c478bd9Sstevel@tonic-gate # define	S_LOAD_USER_FILE		51
98*7c478bd9Sstevel@tonic-gate # define	R_LOAD_USER_FILE		52
99*7c478bd9Sstevel@tonic-gate # define	S_UNLOAD_USER_FILE		53
100*7c478bd9Sstevel@tonic-gate # define	R_UNLOAD_USER_FILE		54
101*7c478bd9Sstevel@tonic-gate # define	S_LOAD_FORM			55
102*7c478bd9Sstevel@tonic-gate # define	R_LOAD_FORM			56
103*7c478bd9Sstevel@tonic-gate # define	S_UNLOAD_FORM			57
104*7c478bd9Sstevel@tonic-gate # define	R_UNLOAD_FORM			58
105*7c478bd9Sstevel@tonic-gate # define	S_GETSTATUS			59
106*7c478bd9Sstevel@tonic-gate # define	R_GETSTATUS			60
107*7c478bd9Sstevel@tonic-gate # define	S_QUIET_ALERT			61
108*7c478bd9Sstevel@tonic-gate # define	R_QUIET_ALERT			62
109*7c478bd9Sstevel@tonic-gate # define	S_SEND_FAULT			63
110*7c478bd9Sstevel@tonic-gate # define	R_SEND_FAULT			64
111*7c478bd9Sstevel@tonic-gate # define	S_SHUTDOWN			65
112*7c478bd9Sstevel@tonic-gate # define	R_SHUTDOWN			66
113*7c478bd9Sstevel@tonic-gate # define	S_GOODBYE			67
114*7c478bd9Sstevel@tonic-gate # define	S_CHILD_DONE			68
115*7c478bd9Sstevel@tonic-gate 
116*7c478bd9Sstevel@tonic-gate /*
117*7c478bd9Sstevel@tonic-gate **	These are for use by the scheduler only
118*7c478bd9Sstevel@tonic-gate */
119*7c478bd9Sstevel@tonic-gate # define	I_GET_TYPE			69
120*7c478bd9Sstevel@tonic-gate # define	I_QUEUE_CHK			70
121*7c478bd9Sstevel@tonic-gate # define	R_CONNECT			71
122*7c478bd9Sstevel@tonic-gate 
123*7c478bd9Sstevel@tonic-gate # define	S_GET_STATUS			72
124*7c478bd9Sstevel@tonic-gate # define	R_GET_STATUS			73
125*7c478bd9Sstevel@tonic-gate # define	S_INQUIRE_REQUEST_RANK		74
126*7c478bd9Sstevel@tonic-gate # define	R_INQUIRE_REQUEST_RANK		75
127*7c478bd9Sstevel@tonic-gate # define	S_CANCEL			76
128*7c478bd9Sstevel@tonic-gate # define	R_CANCEL			77
129*7c478bd9Sstevel@tonic-gate # define	S_NEW_CHILD			78
130*7c478bd9Sstevel@tonic-gate # define	R_NEW_CHILD			79
131*7c478bd9Sstevel@tonic-gate # define	S_SEND_JOB			80
132*7c478bd9Sstevel@tonic-gate # define	R_SEND_JOB			81
133*7c478bd9Sstevel@tonic-gate # define	S_JOB_COMPLETED			82
134*7c478bd9Sstevel@tonic-gate # define	R_JOB_COMPLETED			83
135*7c478bd9Sstevel@tonic-gate # define	S_INQUIRE_REMOTE_PRINTER	84
136*7c478bd9Sstevel@tonic-gate # define	R_INQUIRE_REMOTE_PRINTER	20
137*7c478bd9Sstevel@tonic-gate # define	S_CHILD_SYNC			85
138*7c478bd9Sstevel@tonic-gate # define	S_LOAD_SYSTEM			86
139*7c478bd9Sstevel@tonic-gate # define	R_LOAD_SYSTEM			87
140*7c478bd9Sstevel@tonic-gate # define	S_UNLOAD_SYSTEM			88
141*7c478bd9Sstevel@tonic-gate # define	R_UNLOAD_SYSTEM			89
142*7c478bd9Sstevel@tonic-gate /* new messages */
143*7c478bd9Sstevel@tonic-gate # define	S_CLEAR_FAULT			90
144*7c478bd9Sstevel@tonic-gate # define	R_CLEAR_FAULT			91
145*7c478bd9Sstevel@tonic-gate # define	S_MOUNT_TRAY			92
146*7c478bd9Sstevel@tonic-gate # define	R_MOUNT_TRAY			93
147*7c478bd9Sstevel@tonic-gate # define	S_UNMOUNT_TRAY			94
148*7c478bd9Sstevel@tonic-gate # define	R_UNMOUNT_TRAY			95
149*7c478bd9Sstevel@tonic-gate # define	S_MAX_TRAYS			96
150*7c478bd9Sstevel@tonic-gate # define	R_MAX_TRAYS			97
151*7c478bd9Sstevel@tonic-gate # define	S_PAPER_CHANGED			98
152*7c478bd9Sstevel@tonic-gate # define	R_PAPER_CHANGED			99
153*7c478bd9Sstevel@tonic-gate # define	S_PAPER_ALLOWED			100
154*7c478bd9Sstevel@tonic-gate # define	R_PAPER_ALLOWED			101
155*7c478bd9Sstevel@tonic-gate /*
156*7c478bd9Sstevel@tonic-gate **	Last available message
157*7c478bd9Sstevel@tonic-gate */
158*7c478bd9Sstevel@tonic-gate # define	LAST_MESSAGE			102
159*7c478bd9Sstevel@tonic-gate 
160*7c478bd9Sstevel@tonic-gate /*
161*7c478bd9Sstevel@tonic-gate **      These are the possible status codes returned by the scheduler
162*7c478bd9Sstevel@tonic-gate */
163*7c478bd9Sstevel@tonic-gate # define	MOK		 0
164*7c478bd9Sstevel@tonic-gate # define	MOKMORE		 1
165*7c478bd9Sstevel@tonic-gate # define	MOKREMOTE	 2
166*7c478bd9Sstevel@tonic-gate # define	MMORERR		 3
167*7c478bd9Sstevel@tonic-gate # define	MNODEST		 4
168*7c478bd9Sstevel@tonic-gate # define	MERRDEST	 5
169*7c478bd9Sstevel@tonic-gate # define	MDENYDEST	 6
170*7c478bd9Sstevel@tonic-gate # define	MNOMEDIA	 7
171*7c478bd9Sstevel@tonic-gate # define	MDENYMEDIA	 8
172*7c478bd9Sstevel@tonic-gate # define	MNOFILTER	 9
173*7c478bd9Sstevel@tonic-gate # define	MNOINFO		10
174*7c478bd9Sstevel@tonic-gate # define	MNOMEM		11
175*7c478bd9Sstevel@tonic-gate # define	MNOMOUNT	12
176*7c478bd9Sstevel@tonic-gate # define	MNOOPEN		13
177*7c478bd9Sstevel@tonic-gate # define	MNOPERM		14
178*7c478bd9Sstevel@tonic-gate # define	MNOSTART	15
179*7c478bd9Sstevel@tonic-gate # define	MUNKNOWN	16
180*7c478bd9Sstevel@tonic-gate # define	M2LATE		17
181*7c478bd9Sstevel@tonic-gate # define	MNOSPACE	18
182*7c478bd9Sstevel@tonic-gate # define	MBUSY		19
183*7c478bd9Sstevel@tonic-gate # define	MTRANSMITERR	20
184*7c478bd9Sstevel@tonic-gate # define	MNOMORE		21
185*7c478bd9Sstevel@tonic-gate # define	MGONEREMOTE	22
186*7c478bd9Sstevel@tonic-gate # define	MNOTRAY		23
187*7c478bd9Sstevel@tonic-gate 
188*7c478bd9Sstevel@tonic-gate /*
189*7c478bd9Sstevel@tonic-gate ** Offsets and lengths of the various elements of the message header.
190*7c478bd9Sstevel@tonic-gate **
191*7c478bd9Sstevel@tonic-gate **	Macro		Data Type	Size	Comment
192*7c478bd9Sstevel@tonic-gate **
193*7c478bd9Sstevel@tonic-gate **	HEAD_RESYNC	2 bytes		(2)	*
194*7c478bd9Sstevel@tonic-gate **	HEAD_AUTHCODE	short + long	(6)	*
195*7c478bd9Sstevel@tonic-gate **
196*7c478bd9Sstevel@tonic-gate **	HEAD_SIZE	4 bytes		(4)	\
197*7c478bd9Sstevel@tonic-gate **	HEAD_TYPE	4 bytes		(4)	 > message propper
198*7c478bd9Sstevel@tonic-gate **	HEAD_DATA	n bytes		(n)	/
199*7c478bd9Sstevel@tonic-gate **
200*7c478bd9Sstevel@tonic-gate **	TAIL_CHKSUM	4 bytes		(4)	*
201*7c478bd9Sstevel@tonic-gate **	TAIL_ENDSYNC	2 bytes		(2)	*
202*7c478bd9Sstevel@tonic-gate **
203*7c478bd9Sstevel@tonic-gate **	Items marked with an asterisk are only used with the 3.2
204*7c478bd9Sstevel@tonic-gate **	Spooler protocol.
205*7c478bd9Sstevel@tonic-gate */
206*7c478bd9Sstevel@tonic-gate 
207*7c478bd9Sstevel@tonic-gate /*
208*7c478bd9Sstevel@tonic-gate **	3.2 Protocol Header Information:
209*7c478bd9Sstevel@tonic-gate **		2-byte message introduction
210*7c478bd9Sstevel@tonic-gate **		6-byte client authorization data
211*7c478bd9Sstevel@tonic-gate */
212*7c478bd9Sstevel@tonic-gate #define	HEAD_RESYNC		(0)
213*7c478bd9Sstevel@tonic-gate #define HEAD_RESYNC_LEN		2
214*7c478bd9Sstevel@tonic-gate #define HEAD_AUTHCODE		(HEAD_RESYNC + HEAD_RESYNC_LEN)
215*7c478bd9Sstevel@tonic-gate #define HEAD_AUTHCODE_LEN		(sizeof(short) + sizeof(long))
216*7c478bd9Sstevel@tonic-gate 
217*7c478bd9Sstevel@tonic-gate /*
218*7c478bd9Sstevel@tonic-gate **	3.2 Protocol Message Information:
219*7c478bd9Sstevel@tonic-gate **		4-byte message size
220*7c478bd9Sstevel@tonic-gate **		4-byte message type
221*7c478bd9Sstevel@tonic-gate **		n-byte message data
222*7c478bd9Sstevel@tonic-gate */
223*7c478bd9Sstevel@tonic-gate #define HEAD_SIZE		(HEAD_AUTHCODE + HEAD_AUTHCODE_LEN)
224*7c478bd9Sstevel@tonic-gate #define HEAD_SIZE_LEN			4
225*7c478bd9Sstevel@tonic-gate #define HEAD_TYPE		(HEAD_SIZE + HEAD_SIZE_LEN)
226*7c478bd9Sstevel@tonic-gate #define HEAD_TYPE_LEN			4
227*7c478bd9Sstevel@tonic-gate #define HEAD_DATA		(HEAD_TYPE + HEAD_TYPE_LEN)
228*7c478bd9Sstevel@tonic-gate 
229*7c478bd9Sstevel@tonic-gate /*
230*7c478bd9Sstevel@tonic-gate **	3.2 Protocol Size of non-data header information
231*7c478bd9Sstevel@tonic-gate */
232*7c478bd9Sstevel@tonic-gate #define HEAD_LEN		HEAD_DATA
233*7c478bd9Sstevel@tonic-gate 
234*7c478bd9Sstevel@tonic-gate /*
235*7c478bd9Sstevel@tonic-gate **	Equivalents for 4.0 protocol
236*7c478bd9Sstevel@tonic-gate */
237*7c478bd9Sstevel@tonic-gate #define MESG_SIZE		(0)
238*7c478bd9Sstevel@tonic-gate #define MESG_SIZE_LEN			4
239*7c478bd9Sstevel@tonic-gate #define MESG_TYPE		(MESG_SIZE + MESG_SIZE_LEN)
240*7c478bd9Sstevel@tonic-gate #define MESG_TYPE_LEN			4
241*7c478bd9Sstevel@tonic-gate #define MESG_DATA		(MESG_TYPE + MESG_TYPE_LEN)
242*7c478bd9Sstevel@tonic-gate 
243*7c478bd9Sstevel@tonic-gate #define MESG_LEN		MESG_DATA
244*7c478bd9Sstevel@tonic-gate 
245*7c478bd9Sstevel@tonic-gate /*
246*7c478bd9Sstevel@tonic-gate **	3.2 Protocol Trailer Information:
247*7c478bd9Sstevel@tonic-gate **		4-byte message check sum
248*7c478bd9Sstevel@tonic-gate **		2-byte message closing identifier
249*7c478bd9Sstevel@tonic-gate **
250*7c478bd9Sstevel@tonic-gate **	"N" is the decoded value of buffer[HEAD_SIZE].  This must
251*7c478bd9Sstevel@tonic-gate **	be provided because messages are variable length.
252*7c478bd9Sstevel@tonic-gate */
253*7c478bd9Sstevel@tonic-gate #define	TAIL_ENDSYNC_LEN		2
254*7c478bd9Sstevel@tonic-gate #define	TAIL_ENDSYNC(N)		(N - TAIL_ENDSYNC_LEN)
255*7c478bd9Sstevel@tonic-gate #define TAIL_CHKSUM_LEN			4
256*7c478bd9Sstevel@tonic-gate #define TAIL_CHKSUM(N)		(TAIL_ENDSYNC(N) - TAIL_CHKSUM_LEN)
257*7c478bd9Sstevel@tonic-gate 
258*7c478bd9Sstevel@tonic-gate /*
259*7c478bd9Sstevel@tonic-gate **	3.2 Protocol Size of non-data trailer information
260*7c478bd9Sstevel@tonic-gate */
261*7c478bd9Sstevel@tonic-gate #define	TAIL_LEN		(TAIL_CHKSUM_LEN + TAIL_ENDSYNC_LEN)
262*7c478bd9Sstevel@tonic-gate 
263*7c478bd9Sstevel@tonic-gate /*
264*7c478bd9Sstevel@tonic-gate **	3.2 Protocol Size of all non-data information
265*7c478bd9Sstevel@tonic-gate **	(This is also the minimum size for 3.2 protocol messages)
266*7c478bd9Sstevel@tonic-gate */
267*7c478bd9Sstevel@tonic-gate #define	CONTROL_LEN		(HEAD_LEN + TAIL_LEN)
268*7c478bd9Sstevel@tonic-gate 
269*7c478bd9Sstevel@tonic-gate /*
270*7c478bd9Sstevel@tonic-gate **	Size of excess data induced by 3.2 Protocol.
271*7c478bd9Sstevel@tonic-gate **	(This is also the size differance between 3.2 & 4.0 protocols)
272*7c478bd9Sstevel@tonic-gate */
273*7c478bd9Sstevel@tonic-gate #define	EXCESS_3_2_LEN		(HEAD_SIZE + TAIL_LEN)
274*7c478bd9Sstevel@tonic-gate /**
275*7c478bd9Sstevel@tonic-gate  ** Checksum:
276*7c478bd9Sstevel@tonic-gate  **/
277*7c478bd9Sstevel@tonic-gate #define CALC_CHKSUM(B,SZ,RC) \
278*7c478bd9Sstevel@tonic-gate if (SZ >= CONTROL_LEN) \
279*7c478bd9Sstevel@tonic-gate { \
280*7c478bd9Sstevel@tonic-gate     register unsigned char	*p = (unsigned char *)B, \
281*7c478bd9Sstevel@tonic-gate 			    *pend = p + SZ - TAIL_LEN; \
282*7c478bd9Sstevel@tonic-gate     RC = 0; \
283*7c478bd9Sstevel@tonic-gate     while (p < pend) \
284*7c478bd9Sstevel@tonic-gate 	RC += *p++;  /* let it overflow */ \
285*7c478bd9Sstevel@tonic-gate } \
286*7c478bd9Sstevel@tonic-gate else \
287*7c478bd9Sstevel@tonic-gate     return ((errno = EINVAL, -1))
288*7c478bd9Sstevel@tonic-gate 
289*7c478bd9Sstevel@tonic-gate /*
290*7c478bd9Sstevel@tonic-gate **      Largest size permitted for any given message
291*7c478bd9Sstevel@tonic-gate */
292*7c478bd9Sstevel@tonic-gate # define	MSGMAX		2048
293*7c478bd9Sstevel@tonic-gate 
294*7c478bd9Sstevel@tonic-gate /*
295*7c478bd9Sstevel@tonic-gate **      Possible values of the type field of S_QUIET_ALERT
296*7c478bd9Sstevel@tonic-gate */
297*7c478bd9Sstevel@tonic-gate # define	QA_FORM		1
298*7c478bd9Sstevel@tonic-gate # define	QA_PRINTER	2
299*7c478bd9Sstevel@tonic-gate # define	QA_PRINTWHEEL	3
300*7c478bd9Sstevel@tonic-gate 
301*7c478bd9Sstevel@tonic-gate typedef	struct	strbuf	strbuf_t;	/*  STREAMS buffer */
302*7c478bd9Sstevel@tonic-gate 
303*7c478bd9Sstevel@tonic-gate typedef	struct mque
304*7c478bd9Sstevel@tonic-gate {
305*7c478bd9Sstevel@tonic-gate     struct mque	  *next;
306*7c478bd9Sstevel@tonic-gate     struct strbuf *dat;
307*7c478bd9Sstevel@tonic-gate } MQUE;
308*7c478bd9Sstevel@tonic-gate 
309*7c478bd9Sstevel@tonic-gate /*
310*7c478bd9Sstevel@tonic-gate **	Definition of a message descriptor
311*7c478bd9Sstevel@tonic-gate */
312*7c478bd9Sstevel@tonic-gate typedef struct
313*7c478bd9Sstevel@tonic-gate {
314*7c478bd9Sstevel@tonic-gate     short	type;			/* type of connection */
315*7c478bd9Sstevel@tonic-gate     int		readfd;			/* STREAM fd to read from */
316*7c478bd9Sstevel@tonic-gate     int		writefd;		/* STREAM fd to write to */
317*7c478bd9Sstevel@tonic-gate     int		wait;			/* number of systems waiting for */
318*7c478bd9Sstevel@tonic-gate     char	*file;			/* pipe name if type==MD_FIFO */
319*7c478bd9Sstevel@tonic-gate     short	state;			/* Current state of client */
320*7c478bd9Sstevel@tonic-gate     short	admin;			/* Non zero if admin  */
321*7c478bd9Sstevel@tonic-gate     short	event;			/* Event returned from poll */
322*7c478bd9Sstevel@tonic-gate     MQUE *	mque;			/* backlogged message ptr */
323*7c478bd9Sstevel@tonic-gate     uid_t	uid;			/* Clients UID */
324*7c478bd9Sstevel@tonic-gate     gid_t	gid;			/* Clients GID */
325*7c478bd9Sstevel@tonic-gate     void	(**on_discon)();	/* Clean up functions */
326*7c478bd9Sstevel@tonic-gate } MESG;
327*7c478bd9Sstevel@tonic-gate 
328*7c478bd9Sstevel@tonic-gate # define	MDSIZE	(sizeof(MESG))
329*7c478bd9Sstevel@tonic-gate 
330*7c478bd9Sstevel@tonic-gate /*
331*7c478bd9Sstevel@tonic-gate **	Possible values of MESG.state
332*7c478bd9Sstevel@tonic-gate */
333*7c478bd9Sstevel@tonic-gate # define	MDS_IDLE	0
334*7c478bd9Sstevel@tonic-gate 
335*7c478bd9Sstevel@tonic-gate # define	MDS_32PROTO	320
336*7c478bd9Sstevel@tonic-gate # define	MDS_32CONNECT	321
337*7c478bd9Sstevel@tonic-gate 
338*7c478bd9Sstevel@tonic-gate /*
339*7c478bd9Sstevel@tonic-gate **	Possible values of MESG.type
340*7c478bd9Sstevel@tonic-gate */
341*7c478bd9Sstevel@tonic-gate # define	MD_UNKNOWN	0	/* We don't know just yet */
342*7c478bd9Sstevel@tonic-gate # define	MD_STREAM	1	/* 4.0 STREAMS pipe protocol */
343*7c478bd9Sstevel@tonic-gate # define	MD_BOUND	2	/* 4.0 STREAMS fd protocol */
344*7c478bd9Sstevel@tonic-gate # define	MD_SYS_FIFO	3	/* 3.2 named-pipe protocol */
345*7c478bd9Sstevel@tonic-gate # define	MD_USR_FIFO	4	/* 3.2 named-pipe protocol */
346*7c478bd9Sstevel@tonic-gate # define	MD_MASTER	5	/* MD_STREAM used by lpsched */
347*7c478bd9Sstevel@tonic-gate # define	MD_CHILD	6	/* MD_STREAM to a child process */
348*7c478bd9Sstevel@tonic-gate 
349*7c478bd9Sstevel@tonic-gate /*
350*7c478bd9Sstevel@tonic-gate **	Definition for a FIFO buffer (used
351*7c478bd9Sstevel@tonic-gate **	in read_fifo.
352*7c478bd9Sstevel@tonic-gate */
353*7c478bd9Sstevel@tonic-gate typedef struct
354*7c478bd9Sstevel@tonic-gate {
355*7c478bd9Sstevel@tonic-gate 	int	full;
356*7c478bd9Sstevel@tonic-gate 	char	save [MSGMAX],
357*7c478bd9Sstevel@tonic-gate 		*psave,
358*7c478bd9Sstevel@tonic-gate 		*psave_end;
359*7c478bd9Sstevel@tonic-gate } fifobuffer_t;
360*7c478bd9Sstevel@tonic-gate 
361*7c478bd9Sstevel@tonic-gate /*
362*7c478bd9Sstevel@tonic-gate **      Definitions for the rest of the world and lint
363*7c478bd9Sstevel@tonic-gate */
364*7c478bd9Sstevel@tonic-gate /*
365*7c478bd9Sstevel@tonic-gate **	Server functions in order of usage
366*7c478bd9Sstevel@tonic-gate */
367*7c478bd9Sstevel@tonic-gate MESG		* mcreate ( char * );
368*7c478bd9Sstevel@tonic-gate int		mlisteninit ( MESG * );
369*7c478bd9Sstevel@tonic-gate MESG		* mlisten ( void );
370*7c478bd9Sstevel@tonic-gate int		mlistenadd ( MESG *, short );
371*7c478bd9Sstevel@tonic-gate int		mon_discon ( MESG *, void (*)());
372*7c478bd9Sstevel@tonic-gate MESG		* mlistenreset ( void );
373*7c478bd9Sstevel@tonic-gate int		mdestroy ( MESG * );
374*7c478bd9Sstevel@tonic-gate 
375*7c478bd9Sstevel@tonic-gate /*
376*7c478bd9Sstevel@tonic-gate **	Client functions in order of typical usage
377*7c478bd9Sstevel@tonic-gate */
378*7c478bd9Sstevel@tonic-gate MESG		* mconnect ( char *, int, int );
379*7c478bd9Sstevel@tonic-gate int		mgetm ( MESG *, int, ... );
380*7c478bd9Sstevel@tonic-gate int		mwrite ( MESG *, char * );
381*7c478bd9Sstevel@tonic-gate int		mputm ( MESG *, int, ... );
382*7c478bd9Sstevel@tonic-gate int		mread ( MESG *, char *, int );
383*7c478bd9Sstevel@tonic-gate short		msize ( char * );
384*7c478bd9Sstevel@tonic-gate short		mpeek ( MESG * );
385*7c478bd9Sstevel@tonic-gate int		mdisconnect ( MESG * );
386*7c478bd9Sstevel@tonic-gate 
387*7c478bd9Sstevel@tonic-gate /*
388*7c478bd9Sstevel@tonic-gate **	This may be called to deallocate internal buffers allocated
389*7c478bd9Sstevel@tonic-gate **	by mgetm and mputm.  Probably not useful except right before
390*7c478bd9Sstevel@tonic-gate **	a fork().
391*7c478bd9Sstevel@tonic-gate */
392*7c478bd9Sstevel@tonic-gate void		__mbfree ( void );
393*7c478bd9Sstevel@tonic-gate 
394*7c478bd9Sstevel@tonic-gate /*
395*7c478bd9Sstevel@tonic-gate **	Client functions for pre-4.0 compatability
396*7c478bd9Sstevel@tonic-gate */
397*7c478bd9Sstevel@tonic-gate int		mclose ( void );
398*7c478bd9Sstevel@tonic-gate int		mneeds ( void );
399*7c478bd9Sstevel@tonic-gate int		mopen ( void );
400*7c478bd9Sstevel@tonic-gate int		mrecv ( char *, int );
401*7c478bd9Sstevel@tonic-gate int		msend ( char * );
402*7c478bd9Sstevel@tonic-gate 
403*7c478bd9Sstevel@tonic-gate int		Putmsg (MESG *, strbuf_t *, strbuf_t *, int);
404*7c478bd9Sstevel@tonic-gate int		Getmsg (MESG *, strbuf_t *, strbuf_t *, int *);
405*7c478bd9Sstevel@tonic-gate int		read3_2 (MESG * md, char *msgbuf, int size);
406*7c478bd9Sstevel@tonic-gate int		write3_2 (MESG *, char *, int);
407*7c478bd9Sstevel@tonic-gate int		read_fifo (int, char *, unsigned int);
408*7c478bd9Sstevel@tonic-gate int		write_fifo (int, char *, unsigned int);
409*7c478bd9Sstevel@tonic-gate int		ResetFifoBuffer (int);
410*7c478bd9Sstevel@tonic-gate fifobuffer_t	*GetFifoBuffer (int);
411*7c478bd9Sstevel@tonic-gate 
412*7c478bd9Sstevel@tonic-gate /*
413*7c478bd9Sstevel@tonic-gate **	General purpose message manipulating functions
414*7c478bd9Sstevel@tonic-gate */
415*7c478bd9Sstevel@tonic-gate char		* htos ( char *, unsigned short );
416*7c478bd9Sstevel@tonic-gate char		* ltos ( char *, unsigned long );
417*7c478bd9Sstevel@tonic-gate unsigned long	stol ( char * );
418*7c478bd9Sstevel@tonic-gate unsigned short	stoh ( char * );
419*7c478bd9Sstevel@tonic-gate int		_getmessage ( char *, short, va_list );
420*7c478bd9Sstevel@tonic-gate int		_putmessage ( char *, short, va_list );
421*7c478bd9Sstevel@tonic-gate int		getmessage ( char *, short, ... );
422*7c478bd9Sstevel@tonic-gate int		putmessage ( char *, short, ... );
423*7c478bd9Sstevel@tonic-gate 
424*7c478bd9Sstevel@tonic-gate /*
425*7c478bd9Sstevel@tonic-gate **	This will yield the type of a message
426*7c478bd9Sstevel@tonic-gate */
427*7c478bd9Sstevel@tonic-gate # define	mtype(buffer)	(getmessage(buffer, I_GET_TYPE))
428*7c478bd9Sstevel@tonic-gate 
429*7c478bd9Sstevel@tonic-gate /*
430*7c478bd9Sstevel@tonic-gate **	This will yeild the size of a message
431*7c478bd9Sstevel@tonic-gate */
432*7c478bd9Sstevel@tonic-gate # define	msize(buffer)	(stoh(buffer))
433*7c478bd9Sstevel@tonic-gate 
434*7c478bd9Sstevel@tonic-gate /*
435*7c478bd9Sstevel@tonic-gate **	Pass this for the request-id argument of S_CANCEL
436*7c478bd9Sstevel@tonic-gate **	to obtain the effect of the 3.2 S_CANCEL_REQUEST.
437*7c478bd9Sstevel@tonic-gate */
438*7c478bd9Sstevel@tonic-gate # define	CURRENT_REQ	"current"
439*7c478bd9Sstevel@tonic-gate 
440*7c478bd9Sstevel@tonic-gate #endif	/* !defined (_LP_MSGS_H) */
441