5 Unix SMB/CIFS implementation.
7 Copyright (C) Andrew Tridgell 1992-2000
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>.
24 This file defines the low-level printing system interfaces used by the
25 SAMBA printing subsystem.
28 /* Extra fields above "LPQ_PRINTING" are used to map extra NT status codes. */
42 LPQ_USER_INTERVENTION
,
44 /* smbd is dooing the file spooling before passing control to spoolss */
48 typedef struct _print_queue_struct
{
49 int job
; /* normally the UNIX jobid -- see note in
50 printing.c:traverse_fn_delete() */
60 enum {LPSTAT_OK
, LPSTAT_STOPPED
, LPSTAT_ERROR
};
66 } print_status_struct
;
68 /* Information for print jobs */
70 pid_t pid
; /* which process launched the job */
71 int sysjob
; /* the system (lp) job number */
72 int fd
; /* file descriptor of open file if open */
73 time_t starttime
; /* when the job started spooling */
74 int status
; /* the status of this job */
75 size_t size
; /* the size of the job so far */
76 int page_count
; /* then number of pages so far */
77 bool spooled
; /* has it been sent to the spooler yet? */
78 bool smbjob
; /* set if the job is a SMB job */
79 fstring filename
; /* the filename used to spool the file */
80 fstring jobname
; /* the job name given to us by the client */
81 fstring user
; /* the user who started the job */
82 fstring clientmachine
; /* The client machine which started this job */
83 fstring queuename
; /* service number of printer for this job */
84 struct spoolss_DeviceMode
*devmode
;
87 /* Information for print interfaces */
90 /* value of the 'printing' option for this service */
91 enum printing_types type
;
93 int (*queue_get
)(const char *printer_name
,
94 enum printing_types printing_type
,
96 print_queue_struct
**q
,
97 print_status_struct
*status
);
98 int (*queue_pause
)(int snum
);
99 int (*queue_resume
)(int snum
);
100 int (*job_delete
)(const char *sharename
, const char *lprm_command
, struct printjob
*pjob
);
101 int (*job_pause
)(int snum
, struct printjob
*pjob
);
102 int (*job_resume
)(int snum
, struct printjob
*pjob
);
103 int (*job_submit
)(int snum
, struct printjob
*pjob
);
106 extern struct printif generic_printif
;
109 extern struct printif cups_printif
;
110 #endif /* HAVE_CUPS */
113 extern struct printif iprint_printif
;
114 #endif /* HAVE_IPRINT */
116 /* PRINT_MAX_JOBID is now defined in local.h */
117 #define UNIX_JOB_START PRINT_MAX_JOBID
118 #define NEXT_JOBID(j) ((j+1) % PRINT_MAX_JOBID > 0 ? (j+1) % PRINT_MAX_JOBID : 1)
120 #define MAX_CACHE_VALID_TIME 3600
121 #define CUPS_DEFAULT_CONNECTION_TIMEOUT 30
123 #ifndef PRINT_SPOOL_PREFIX
124 #define PRINT_SPOOL_PREFIX "smbprn."
126 #define PRINT_DATABASE_VERSION 7
129 #define DEFAULT_PRINTING PRINT_AIX
130 #define PRINTCAP_NAME "/etc/qconfig"
134 #define DEFAULT_PRINTING PRINT_HPUX
138 #define DEFAULT_PRINTING PRINT_QNX
141 #ifndef DEFAULT_PRINTING
143 #define DEFAULT_PRINTING PRINT_CUPS
144 #define PRINTCAP_NAME "cups"
146 #define DEFAULT_PRINTING PRINT_SYSV
147 #define PRINTCAP_NAME "lpstat"
149 #define DEFAULT_PRINTING PRINT_BSD
150 #define PRINTCAP_NAME "/etc/printcap"
154 #ifndef PRINTCAP_NAME
155 #define PRINTCAP_NAME "/etc/printcap"
158 /* There can be this many printing tdb's open, plus any locked ones. */
159 #define MAX_PRINT_DBS_OPEN 1
164 struct tdb_print_db
{
165 struct tdb_print_db
*next
, *prev
;
166 struct tdb_context
*tdb
;
168 fstring printer_name
;
172 * Used for print notify
175 #define NOTIFY_PID_LIST_KEY "NOTIFY_PID_LIST"
177 /* The following definitions come from printing/printspoolss.c */
179 NTSTATUS
print_spool_open(files_struct
*fsp
,
181 uint16_t current_vuid
);
183 int print_spool_write(files_struct
*fsp
, const char *data
, uint32_t size
,
184 SMB_OFF_T offset
, uint32_t *written
);
186 void print_spool_end(files_struct
*fsp
, enum file_close_type close_type
);
188 void print_spool_terminate(struct connection_struct
*conn
,
189 struct print_file_data
*print_file
);
191 /* The following definitions come from printing/printing.c */
193 uint32
sysjob_to_jobid(int unix_jobid
);
194 bool print_notify_register_pid(int snum
);
195 bool print_notify_deregister_pid(int snum
);
196 bool print_job_exists(const char* sharename
, uint32 jobid
);
197 char *print_job_fname(const char* sharename
, uint32 jobid
);
198 struct spoolss_DeviceMode
*print_job_devmode(const char* sharename
, uint32 jobid
);
199 bool print_job_set_name(struct tevent_context
*ev
,
200 struct messaging_context
*msg_ctx
,
201 const char *sharename
, uint32 jobid
, const char *name
);
202 bool print_job_get_name(TALLOC_CTX
*mem_ctx
, const char *sharename
, uint32_t jobid
, char **name
);
203 WERROR
print_job_delete(const struct auth_serversupplied_info
*server_info
,
204 struct messaging_context
*msg_ctx
,
205 int snum
, uint32_t jobid
);
206 bool print_job_pause(const struct auth_serversupplied_info
*server_info
,
207 struct messaging_context
*msg_ctx
,
208 int snum
, uint32 jobid
, WERROR
*errcode
);
209 bool print_job_resume(const struct auth_serversupplied_info
*server_info
,
210 struct messaging_context
*msg_ctx
,
211 int snum
, uint32 jobid
, WERROR
*errcode
);
212 ssize_t
print_job_write(struct tevent_context
*ev
,
213 struct messaging_context
*msg_ctx
,
214 int snum
, uint32 jobid
, const char *buf
, size_t size
);
215 int print_queue_length(struct messaging_context
*msg_ctx
, int snum
,
216 print_status_struct
*pstatus
);
217 WERROR
print_job_start(const struct auth_serversupplied_info
*server_info
,
218 struct messaging_context
*msg_ctx
,
219 const char *clientmachine
,
220 int snum
, const char *docname
, const char *filename
,
221 struct spoolss_DeviceMode
*devmode
, uint32_t *_jobid
);
222 void print_job_endpage(struct messaging_context
*msg_ctx
,
223 int snum
, uint32 jobid
);
224 NTSTATUS
print_job_end(struct messaging_context
*msg_ctx
, int snum
,
225 uint32 jobid
, enum file_close_type close_type
);
226 int print_queue_status(struct messaging_context
*msg_ctx
, int snum
,
227 print_queue_struct
**ppqueue
,
228 print_status_struct
*status
);
229 WERROR
print_queue_pause(const struct auth_serversupplied_info
*server_info
,
230 struct messaging_context
*msg_ctx
, int snum
);
231 WERROR
print_queue_resume(const struct auth_serversupplied_info
*server_info
,
232 struct messaging_context
*msg_ctx
, int snum
);
233 WERROR
print_queue_purge(const struct auth_serversupplied_info
*server_info
,
234 struct messaging_context
*msg_ctx
, int snum
);
235 uint16
pjobid_to_rap(const char* sharename
, uint32 jobid
);
236 bool rap_to_pjobid(uint16 rap_jobid
, fstring sharename
, uint32
*pjobid
);
237 void rap_jobid_delete(const char* sharename
, uint32 jobid
);
238 bool print_backend_init(struct messaging_context
*msg_ctx
);
239 void start_background_queue(struct tevent_context
*ev
,
240 struct messaging_context
*msg
);
241 void printing_end(void);
243 /* The following definitions come from printing/lpq_parse.c */
245 bool parse_lpq_entry(enum printing_types printing_type
,char *line
,
246 print_queue_struct
*buf
,
247 print_status_struct
*status
,bool first
);
248 uint32_t print_parse_jobid(const char *fname
);
250 /* The following definitions come from printing/printing_db.c */
252 struct tdb_print_db
*get_print_db_byname(const char *printername
);
253 void release_print_db( struct tdb_print_db
*pdb
);
254 void close_all_print_db(void);
255 struct TDB_DATA
get_printer_notify_pid_list(struct tdb_context
*tdb
, const char *printer_name
, bool cleanlist
);
257 void print_queue_receive(struct messaging_context
*msg
,
260 struct server_id server_id
,
262 #endif /* PRINTING_H_ */