1 /*
2  * Backend support definitions for CUPS.
3  *
4  * Copyright © 2007-2014 by Apple Inc.
5  * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
6  *
7  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
8  * information.
9  */
10 
11 #ifndef _CUPS_BACKEND_PRIVATE_H_
12 #  define _CUPS_BACKEND_PRIVATE_H_
13 
14 
15 /*
16  * Include necessary headers.
17  */
18 
19 #  include <cups/cups-private.h>
20 #  include <cups/snmp-private.h>
21 #  include <cups/backend.h>
22 #  include <cups/sidechannel.h>
23 #  include <signal.h>
24 
25 #  ifdef __linux
26 #    include <sys/ioctl.h>
27 #    include <linux/lp.h>
28 #    define IOCNR_GET_DEVICE_ID		1
29 #    define LPIOC_GET_DEVICE_ID(len)	_IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
30 #    include <linux/parport.h>
31 #    include <linux/ppdev.h>
32 #    include <unistd.h>
33 #    include <fcntl.h>
34 #  endif /* __linux */
35 
36 #  ifdef __sun
37 #    ifdef __sparc
38 #      include <sys/ecppio.h>
39 #    else
40 #      include <sys/ioccom.h>
41 #      include <sys/ecppsys.h>
42 #    endif /* __sparc */
43 #  endif /* __sun */
44 
45 
46 /*
47  * C++ magic...
48  */
49 
50 #  ifdef __cplusplus
51 extern "C" {
52 #  endif /* __cplusplus */
53 
54 
55 /*
56  * OID constants...
57  */
58 
59 /* Host MIB */
60 #define CUPS_OID_mib2				1,3,6,1,2,1
61 
62 #define CUPS_OID_system				CUPS_OID_mib2,1
63 #define CUPS_OID_sysLocation			CUPS_OID_system,6
64 
65 #define CUPS_OID_host				CUPS_OID_mib2,25
66 
67 #define CUPS_OID_hrSystem			CUPS_OID_host,1
68 
69 #define CUPS_OID_hrStorage			CUPS_OID_host,2
70 
71 #define CUPS_OID_hrDevice			CUPS_OID_host,3
72 #define CUPS_OID_hrDeviceTable			CUPS_OID_hrDevice,2
73 #define CUPS_OID_hrDeviceEntry			CUPS_OID_hrDeviceTable,1
74 #define CUPS_OID_hrDeviceIndex			CUPS_OID_hrDeviceEntry,1
75 #define CUPS_OID_hrDeviceType			CUPS_OID_hrDeviceEntry,2
76 #define CUPS_OID_hrDeviceDescr			CUPS_OID_hrDeviceEntry,3
77 
78 #define CUPS_OID_hrPrinterTable			CUPS_OID_hrDevice,5
79 #define CUPS_OID_hrPrinterEntry			CUPS_OID_hrPrinterTable,1
80 #define CUPS_OID_hrPrinterStatus		CUPS_OID_hrPrinterEntry,1
81 #define CUPS_OID_hrPrinterDetectedErrorState	CUPS_OID_hrPrinterEntry,2
82 
83 /* Printer MIB */
84 #define CUPS_OID_printmib			CUPS_OID_mib2,43
85 
86 #define CUPS_OID_prtGeneral			CUPS_OID_printmib,5
87 #define CUPS_OID_prtGeneralTable		CUPS_OID_prtGeneral,1
88 #define CUPS_OID_prtGeneralEntry		CUPS_OID_prtGeneralTable,1
89 #define CUPS_OID_prtGeneralCurrentLocalization	CUPS_OID_prtGeneralEntry,2
90 #define CUPS_OID_prtGeneralPrinterName		CUPS_OID_prtGeneralEntry,16
91 #define CUPS_OID_prtGeneralSerialNumber		CUPS_OID_prtGeneralEntry,17
92 
93 #define CUPS_OID_prtCover			CUPS_OID_printmib,6
94 #define CUPS_OID_prtCoverTable			CUPS_OID_prtCover,1
95 #define CUPS_OID_prtCoverEntry			CUPS_OID_prtCoverTable,1
96 #define CUPS_OID_prtCoverDescription		CUPS_OID_prtCoverEntry,2
97 #define CUPS_OID_prtCoverStatus			CUPS_OID_prtCoverEntry,3
98 
99 #define CUPS_OID_prtLocalization		CUPS_OID_printmib,7
100 #define CUPS_OID_prtLocalizationTable		CUPS_OID_prtLocalization,1
101 #define CUPS_OID_prtLocalizationEntry		CUPS_OID_prtLocalizationTable,1
102 #define CUPS_OID_prtLocalizationCharacterSet	CUPS_OID_prtLocalizationEntry,4
103 
104 #define CUPS_OID_prtMarker			CUPS_OID_printmib,10
105 #define CUPS_OID_prtMarkerTable			CUPS_OID_prtMarker,2
106 #define CUPS_OID_prtMarkerEntry			CUPS_OID_prtMarkerTable,1
107 #define CUPS_OID_prtMarkerLifeCount		CUPS_OID_prtMarkerEntry,4
108 
109 #define CUPS_OID_prtMarkerSupplies		CUPS_OID_printmib,11
110 #define CUPS_OID_prtMarkerSuppliesTable		CUPS_OID_prtMarkerSupplies,1
111 #define CUPS_OID_prtMarkerSuppliesEntry		CUPS_OID_prtMarkerSuppliesTable,1
112 #define CUPS_OID_prtMarkerSuppliesIndex		CUPS_OID_prtMarkerSuppliesEntry,1
113 #define CUPS_OID_prtMarkerSuppliesMarkerIndex	CUPS_OID_prtMarkerSuppliesEntry,2
114 #define CUPS_OID_prtMarkerSuppliesColorantIndex	CUPS_OID_prtMarkerSuppliesEntry,3
115 #define CUPS_OID_prtMarkerSuppliesClass		CUPS_OID_prtMarkerSuppliesEntry,4
116 #define CUPS_OID_prtMarkerSuppliesType		CUPS_OID_prtMarkerSuppliesEntry,5
117 #define CUPS_OID_prtMarkerSuppliesDescription	CUPS_OID_prtMarkerSuppliesEntry,6
118 #define CUPS_OID_prtMarkerSuppliesSupplyUnit	CUPS_OID_prtMarkerSuppliesEntry,7
119 #define CUPS_OID_prtMarkerSuppliesMaxCapacity	CUPS_OID_prtMarkerSuppliesEntry,8
120 #define CUPS_OID_prtMarkerSuppliesLevel		CUPS_OID_prtMarkerSuppliesEntry,9
121 
122 #define CUPS_OID_prtMarkerColorant		CUPS_OID_printmib,12
123 #define CUPS_OID_prtMarkerColorantTable		CUPS_OID_prtMarkerColorant,1
124 #define CUPS_OID_prtMarkerColorantEntry		CUPS_OID_prtMarkerColorantTable,1
125 #define CUPS_OID_prtMarkerColorantIndex		CUPS_OID_prtMarkerColorantEntry,1
126 #define CUPS_OID_prtMarkerColorantMarkerIndex	CUPS_OID_prtMarkerColorantEntry,2
127 #define CUPS_OID_prtMarkerColorantRole		CUPS_OID_prtMarkerColorantEntry,3
128 #define CUPS_OID_prtMarkerColorantValue		CUPS_OID_prtMarkerColorantEntry,4
129 #define CUPS_OID_prtMarkerColorantTonality	CUPS_OID_prtMarkerColorantEntry,5
130 
131 #define CUPS_OID_prtInterpreter			CUPS_OID_printmib,15
132 #define CUPS_OID_prtInterpreterTable		CUPS_OID_prtInterpreter,1
133 #define CUPS_OID_prtInterpreterEntry		CUPS_OID_prtInterpreterTable,1
134 #define CUPS_OID_prtInterpreterLangFamily	CUPS_OID_prtInterpreterEntry,2
135 #define CUPS_OID_prtInterpreterLangLevel	CUPS_OID_prtInterpreterEntry,3
136 
137 /* Printer Port Monitor MIB */
138 #define CUPS_OID_enterprises			1,3,6,1,4,1
139 #define CUPS_OID_pwg				CUPS_OID_enterprises,2699,1
140 #define CUPS_OID_ppmMIB				CUPS_OID_pwg,2
141 #define CUPS_OID_ppmMIBObjects			CUPS_OID_ppmMIB,1
142 
143 #define CUPS_OID_ppmGeneral			CUPS_OID_ppmMIBObjects,1
144 
145 #define CUPS_OID_ppmPrinter			CUPS_OID_ppmMIBObjects,2
146 #define CUPS_OID_ppmPrinterTable		CUPS_OID_ppmPrinter,1
147 #define CUPS_OID_ppmPrinterEntry		CUPS_OID_ppmPrinterTable,1
148 #define CUPS_OID_ppmPrinterIndex		CUPS_OID_ppmPrinterEntry,1
149 #define CUPS_OID_ppmPrinterName			CUPS_OID_ppmPrinterEntry,2
150 #define CUPS_OID_ppmPrinterIEEE1284DeviceId	CUPS_OID_ppmPrinterEntry,3
151 #define CUPS_OID_ppmPrinterNumberOfPorts	CUPS_OID_ppmPrinterEntry,4
152 #define CUPS_OID_ppmPrinterPreferredPortIndex	CUPS_OID_ppmPrinterEntry,5
153 #define CUPS_OID_ppmPrinterHrDeviceIndex	CUPS_OID_ppmPrinterEntry,6
154 #define CUPS_OID_ppmPrinterSnmpCommunityName	CUPS_OID_ppmPrinterEntry,7
155 #define CUPS_OID_ppmPrinterSnmpQueryEnabled	CUPS_OID_ppmPrinterEntry,8
156 
157 #define CUPS_OID_ppmPort			CUPS_OID_ppmMIBObjects,3
158 #define CUPS_OID_ppmPortTable			CUPS_OID_ppmPort,1
159 #define CUPS_OID_ppmPortEntry			CUPS_OID_ppmPortTable,1
160 #define CUPS_OID_ppmPortIndex			CUPS_OID_ppmPortEntry,1
161 #define CUPS_OID_ppmPortEnabled			CUPS_OID_ppmPortEntry,2
162 #define CUPS_OID_ppmPortName			CUPS_OID_ppmPortEntry,3
163 #define CUPS_OID_ppmPortServiceNameOrURI	CUPS_OID_ppmPortEntry,4
164 #define CUPS_OID_ppmPortProtocolType		CUPS_OID_ppmPortEntry,5
165 #define CUPS_OID_ppmPortProtocolTargetPort	CUPS_OID_ppmPortEntry,6
166 #define CUPS_OID_ppmPortProtocolAltSourceEnabled CUPS_OID_ppmPortEntry,7
167 #define CUPS_OID_ppmPortPrtChannelIndex		CUPS_OID_ppmPortEntry,8
168 #define CUPS_OID_ppmPortLprByteCountEnabled	CUPS_OID_ppmPortEntry,9
169 
170 
171 /*
172  * State constants...
173  */
174 
175 #define CUPS_TC_other				1
176 #define CUPS_TC_unknown				2
177 
178 #define CUPS_TC_idle				3
179 #define CUPS_TC_printing			4
180 #define CUPS_TC_warmup				5
181 
182 /* These come from the hrPrinterDetectedErrorState OCTET-STRING */
183 #define CUPS_TC_lowPaper			0x8000
184 #define CUPS_TC_noPaper				0x4000
185 #define CUPS_TC_lowToner			0x2000
186 #define CUPS_TC_noToner				0x1000
187 #define CUPS_TC_doorOpen			0x0800
188 #define CUPS_TC_jammed				0x0400
189 #define CUPS_TC_offline				0x0200
190 #define CUPS_TC_serviceRequested		0x0100
191 #define CUPS_TC_inputTrayMissing		0x0080
192 #define CUPS_TC_outputTrayMissing		0x0040
193 #define CUPS_TC_markerSupplyMissing		0x0020
194 #define CUPS_TC_outputNearFull			0x0010
195 #define CUPS_TC_outputFull			0x0008
196 #define CUPS_TC_inputTrayEmpty			0x0004
197 #define CUPS_TC_overduePreventMaint		0x0002
198 
199 #define CUPS_TC_prtCoverStatus_coverOpen	3
200 #define CUPS_TC_prtCoverStatus_coverClosed	4
201 #define CUPS_TC_prtCoverStatus_interlockOpen	5
202 #define CUPS_TC_prtCoverStatus_interlockClosed	6
203 
204 #define CUPS_TC_langPCL				3
205 #define CUPS_TC_langHPGL			4
206 #define CUPS_TC_langPJL				5
207 #define CUPS_TC_langPS				6
208 #define CUPS_TC_langEscapeP			9
209 #define CUPS_TC_langCCITT			26
210 #define CUPS_TC_langLIPS			39
211 #define CUPS_TC_langTIFF			40
212 #define CUPS_TC_langPCLXL			47
213 #define CUPS_TC_langPDF				54
214 #define CUPS_TC_langJPEG			61
215 
216 #define CUPS_TC_supplyThatIsConsumed		3
217 #define CUPS_TC_receptacleThatIsFilled		4
218 
219 #define CUPS_TC_process				3
220 #define CUPS_TC_spot				4
221 
222 #define CUPS_TC_toner				3
223 #define CUPS_TC_wasteToner			4
224 #define CUPS_TC_ink				5
225 #define CUPS_TC_inkCartridge			6
226 #define CUPS_TC_inkRibbon			7
227 #define CUPS_TC_wasteInk			8
228 #define CUPS_TC_opc				9
229 #define CUPS_TC_developer			10
230 #define CUPS_TC_fuserOil			11
231 #define CUPS_TC_solidWax			12
232 #define CUPS_TC_ribbonWax			13
233 #define CUPS_TC_wasteWax			14
234 #define CUPS_TC_fuser				15
235 #define CUPS_TC_coronaWire			16
236 #define CUPS_TC_fuserOilWick			17
237 #define CUPS_TC_cleanerUnit			18
238 #define CUPS_TC_fuserCleaningPad		19
239 #define CUPS_TC_transferUnit			20
240 #define CUPS_TC_tonerCartridge			21
241 #define CUPS_TC_fuserOiler			22
242 #define CUPS_TC_water				23
243 #define CUPS_TC_wasteWater			24
244 #define CUPS_TC_glueWaterAdditive		25
245 #define CUPS_TC_wastePaper			26
246 #define CUPS_TC_bindingSupply			27
247 #define CUPS_TC_bandingSupply			28
248 #define CUPS_TC_stitchingWire			29
249 #define CUPS_TC_shrinkWrap			30
250 #define CUPS_TC_paperWrap			31
251 #define CUPS_TC_staples				32
252 #define CUPS_TC_inserts				33
253 #define CUPS_TC_covers				34
254 
255 #define CUPS_TC_tenThousandthsOfInches		3
256 #define CUPS_TC_micrometers			4
257 #define CUPS_TC_impressions			7
258 #define CUPS_TC_sheets				8
259 #define CUPS_TC_hours				11
260 #define CUPS_TC_thousandthsOfOunces		12
261 #define CUPS_TC_tenthsOfGrams			13
262 #define CUPS_TC_hundrethsOfFluidOunces		14
263 #define CUPS_TC_tenthsOfMilliliters		15
264 #define CUPS_TC_feet				16
265 #define CUPS_TC_meters				17
266 #define CUPS_TC_items				18
267 #define CUPS_TC_percent				19
268 
269 /* These come from RFC 3808 to define character sets we support */
270 /* Also see http://www.iana.org/assignments/character-sets */
271 #define CUPS_TC_csASCII				3
272 #define CUPS_TC_csISOLatin1			4
273 #define CUPS_TC_csShiftJIS			17
274 #define CUPS_TC_csUTF8				106
275 #define CUPS_TC_csUnicode			1000 /* UCS2 BE */
276 #define CUPS_TC_csUCS4				1001 /* UCS4 BE */
277 #define CUPS_TC_csUnicodeASCII			1002
278 #define CUPS_TC_csUnicodeLatin1			1003
279 #define CUPS_TC_csUTF16BE			1013
280 #define CUPS_TC_csUTF16LE			1014
281 #define CUPS_TC_csUTF32				1017
282 #define CUPS_TC_csUTF32BE			1018
283 #define CUPS_TC_csUTF32LE			1019
284 #define CUPS_TC_csWindows31J			2024
285 
286 
287 /*
288  * Types...
289  */
290 
291 typedef int (*_cups_sccb_t)(int print_fd, int device_fd, int snmp_fd,
292 			    http_addr_t *addr, int use_bc);
293 
294 
295 /*
296  * Prototypes...
297  */
298 
299 extern void		backendCheckSideChannel(int snmp_fd, http_addr_t *addr);
300 extern int		backendDrainOutput(int print_fd, int device_fd);
301 extern int		backendGetDeviceID(int fd, char *device_id,
302 			                   int device_id_size,
303 			                   char *make_model,
304 					   int make_model_size,
305 					   const char *scheme, char *uri,
306 					   int uri_size);
307 extern int		backendGetMakeModel(const char *device_id,
308 			                    char *make_model,
309 				            size_t make_model_size);
310 extern http_addrlist_t	*backendLookup(const char *hostname, int port, int *cancel);
311 extern int		backendNetworkSideCB(int print_fd, int device_fd,
312 			                     int snmp_fd, http_addr_t *addr,
313 					     int use_bc);
314 extern ssize_t		backendRunLoop(int print_fd, int device_fd, int snmp_fd,
315 			               http_addr_t *addr, int use_bc,
316 			               int update_state, _cups_sccb_t side_cb);
317 extern int		backendSNMPSupplies(int snmp_fd, http_addr_t *addr,
318 			                    int *page_count,
319 					    int *printer_state);
320 extern int		backendWaitLoop(int snmp_fd, http_addr_t *addr,
321 			                int use_bc, _cups_sccb_t side_cb);
322 
323 
324 #  ifdef __cplusplus
325 }
326 #  endif /* __cplusplus */
327 #endif /* !_CUPS_BACKEND_PRIVATE_H_ */
328