CAPS Universe documentation  1.0.4
All you need to know to be successful
printing-coordinator-local.h
Go to the documentation of this file.
1#pragma once
2
3/*
4 * SPDX-License-Identifier: LGPL-2.1-or-later
5 *
6 * (c) 2017 Juergen Borleis <projects@caps-printing.org>
7 *
8 * This library is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU Lesser General Public License 2.1 as published by the Free
10 * Software Foundation.
11 *
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
15 */
16#include <stdlib.h>
17#include <stdint.h>
18#include <pthread.h>
19#include <stdbool.h>
20#include <unistd.h>
21#include <time.h> /* Force the correct "time_t" size according to the man page */
22#include <fcntl.h>
23#include <errno.h>
24#include <inttypes.h>
25#include <libcapsbase.h>
26#include <libcapsinif.h>
27#include <libcapsppd.h>
28
29#include "libcapsppcommon.h"
38#ifdef DSO_HIDDEN
39# define DSO_VISIBLE __attribute__ ((visibility("default")))
40#else
41# define DSO_VISIBLE
42#endif /* DSO_HIDDEN */
43
44#ifndef ARRAY_SIZE
45# define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
46#endif
47
48#ifdef DEBUG
49# define caps_invalidate_pointer(pointer) (pointer = NULL)
50#else
51# define caps_invalidate_pointer(pointer)
52#endif
53
54#ifdef DEBUG
55# define caps_print_debug(fmt, ...) caps_print_debug_template(fmt, ##__VA_ARGS__)
56#else
57# define caps_print_debug(fmt, ...)
58#endif
59
60#ifdef ENABLE_NLS
61
62# ifndef PACKAGE
63# error "Missing 'PACKAGE' macro: include 'config.h' first"
64# endif /* PACKAGE */
65
66# define _(string) dgettext(PACKAGE, string)
67# include <libintl.h>
68
69#else /* ENABLE_NLS */
70
71# define _(string) (string)
72
73#endif /* ENABLE_NLS */
74
75#define NLS_(string) (string)
76
85 char *message;
86};
87
96 char *message;
97};
98
105 unsigned flags;
106 unsigned copy;
107 unsigned cpage;
108 unsigned dmedia;
109 unsigned fmedia;
110};
111
124#define CONFIG_TIMEOUT 30000
125
126#include "list.h"
127
128struct caps_printer;
129
131 pthread_mutex_t printer_list_lock;
133};
134
135/* The coordinator internal printing management function */
136
137void caps_init_runtime_data(struct caps_coordinator *database) __nonnull();
138void caps_exit_runtime_data(struct caps_coordinator *database) __nonnull();
139
140/* 'printing provider' specific API */
142int pc_provider_printer_id_free(struct caps_coordinator *database, unsigned property, caps_identifier pr_id) __nonnull();
143caps_identifier pc_provider_id_by_property_get(struct caps_coordinator *database, unsigned property) __nonnull();
144void pc_provider_orphaned_printer_free(struct caps_coordinator *database, unsigned property) __nonnull();
145int pc_provider_printer_state_set(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, const struct object_state_prn *state) __nonnull();
146int pc_provider_printer_info_set(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, const char *name, const char *info, const char *loction, const char *vendor, const char *model, struct caps_supported_mime_list *list) __nonnull();
147int pc_provider_ppd_set(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, int fh) __nonnull();
148
150int pc_provider_job_get(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, caps_identifier job_id, int *fh, const char **parameter) __nonnull();
151int pc_provider_job_state_set(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, caps_identifier job_id, const struct object_state_job *state) __nonnull();
154int pc_provider_job_finished(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, caps_identifier job_id) __nonnull();
155
156/* 'printing client' specific API */
158
159int pc_client_job_state_get(struct caps_coordinator *database, caps_identifier job_id, const struct object_state_job **state) __nonnull();
162
163/* internally used, not for external users */
165 const char *name;
166 const char *info;
167 const char *location;
168 const char *vendor;
169 const char *model;
170 struct caps_supported_mime_list document_format_supported; /* TODO deep copy or not? */
171};
172
173void pc_client_printer_list_get(struct caps_coordinator *database, caps_identifier **list, unsigned *cnt) __nonnull();
177
184#define CAPS_RUNTIME_CONFIG_LEVEL "base"
185
187void runtime_configuration_class_merge_in(struct caps_inif_table *runtime_config, enum caps_user_class clss) __nonnull();
188void runtime_configuration_apply(struct caps_inif_table *runtime_config, enum caps_user_class clss, const char *package) __nonnull((1));
189void runtime_configuration_apply_verbosity(const struct caps_inif_table *runtime_config) __nonnull();
202static inline bool is_fd_valid(int fd)
203{
204 return fcntl(fd, F_GETFL) != -1 || errno != EBADF;
205}
static caps_identifier pr_id
Definition: caps-printing-test-client.c:37
#define __nonnull(params)
Definition: libcapsbase.h:84
int64_t caps_identifier
Definition: libcapsbase.h:323
caps_printing_job_state
The processing states a job can be in.
Definition: libcapsppcommon.h:254
caps_printing_job_reason
The more detailed state description a printing job can be in.
Definition: libcapsppcommon.h:268
caps_printing_provider_reason
Definition: libcapsppcommon.h:156
caps_printing_provider_state
Definition: libcapsppcommon.h:138
Basic API for everything else of the CAPS universe.
static const char * params
Definition: libcapsdriver.c:525
Basic API for INI file management in the CAPS universe.
Common definitions used by printing coordinator components (libcapsclient and libcapsprovider)
caps_user_class
Definition: libcapsppcommon.h:337
Data declaration to handle PPD file information.
Double linked list implementation in a single header file.
#define LIST_HEAD(t, name)
Definition: list.h:17
static bool is_fd_valid(int fd)
Definition: printing-coordinator-local.h:202
int pc_provider_job_finished(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, caps_identifier job_id)
Definition: management-printers-and-jobs.c:1240
void runtime_configuration_apply(struct caps_inif_table *runtime_config, enum caps_user_class clss, const char *package)
Definition: libppcommon.c:247
int pc_provider_ppd_set(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, int fh)
Definition: management-printers-and-jobs.c:1068
caps_identifier pc_provider_unique_printer_id_create(struct caps_coordinator *database, unsigned property)
Definition: management-printers-and-jobs.c:608
caps_identifier pc_provider_id_by_property_get(struct caps_coordinator *database, unsigned property)
Definition: management-printers-and-jobs.c:552
int pc_provider_job_state_set(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, caps_identifier job_id, const struct object_state_job *state)
Definition: management-printers-and-jobs.c:1186
int pc_client_printer_info_get(struct caps_coordinator *database, caps_identifier pr_id, struct caps_printer_info *info)
Definition: management-printers-and-jobs.c:1480
int pc_client_printer_state_get(struct caps_coordinator *database, caps_identifier pr_id, const struct object_state_prn **state)
Definition: management-printers-and-jobs.c:1446
int pc_client_job_progression_get(struct caps_coordinator *database, caps_identifier job_id, const struct object_progression_job **p)
Definition: management-printers-and-jobs.c:1615
int pc_provider_printing_progression_report(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, caps_identifier job_id, const struct object_progression_job *p)
Definition: management-printers-and-jobs.c:1127
int pc_client_job_cancel(struct caps_coordinator *database, caps_identifier *pr_id, caps_identifier job_id)
Definition: management-printers-and-jobs.c:1659
int pc_client_printer_ppd_get(struct caps_coordinator *database, caps_identifier pr_id)
Definition: management-printers-and-jobs.c:1549
void runtime_configuration_apply_verbosity(const struct caps_inif_table *runtime_config)
Definition: libppcommon.c:223
int pc_provider_printer_state_set(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, const struct object_state_prn *state)
Definition: management-printers-and-jobs.c:753
int pc_provider_printer_id_free(struct caps_coordinator *database, unsigned property, caps_identifier pr_id)
Definition: management-printers-and-jobs.c:663
void caps_exit_runtime_data(struct caps_coordinator *database)
Definition: management-printers-and-jobs.c:1704
caps_identifier pc_provider_job_drain(struct caps_coordinator *database, caps_identifier pr_id)
Definition: management-printers-and-jobs.c:1285
void caps_init_runtime_data(struct caps_coordinator *database)
Definition: management-printers-and-jobs.c:1694
void pc_provider_orphaned_printer_free(struct caps_coordinator *database, unsigned property)
Definition: management-printers-and-jobs.c:706
caps_identifier pc_provider_job_id_prepare(struct caps_coordinator *database, unsigned property, caps_identifier pr_id)
Definition: management-printers-and-jobs.c:957
int pc_client_job_state_get(struct caps_coordinator *database, caps_identifier job_id, const struct object_state_job **state)
Definition: management-printers-and-jobs.c:1586
void runtime_configuration_base_read_in(struct caps_inif_table *runtime_config)
Definition: libppcommon.c:89
int pc_provider_job_get(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, caps_identifier job_id, int *fh, const char **parameter)
Definition: management-printers-and-jobs.c:1010
void runtime_configuration_class_merge_in(struct caps_inif_table *runtime_config, enum caps_user_class clss)
Definition: libppcommon.c:138
caps_identifier pc_client_job_commit(struct caps_coordinator *database, caps_identifier pr_id, int fh, const char *params)
Definition: management-printers-and-jobs.c:1326
void pc_client_printer_list_get(struct caps_coordinator *database, caps_identifier **list, unsigned *cnt)
Definition: management-printers-and-jobs.c:1394
int pc_provider_printer_info_set(struct caps_coordinator *database, unsigned property, caps_identifier pr_id, const char *name, const char *info, const char *loction, const char *vendor, const char *model, struct caps_supported_mime_list *list)
Definition: management-printers-and-jobs.c:841
Definition: printing-coordinator-local.h:130
pthread_mutex_t printer_list_lock
Definition: printing-coordinator-local.h:131
struct caps_printer * printer_list
Definition: printing-coordinator-local.h:132
Manage a table of INI entries.
Definition: libcapsinif.h:256
Definition: printing-coordinator-local.h:164
const char * info
Definition: printing-coordinator-local.h:166
const char * vendor
Definition: printing-coordinator-local.h:168
const char * name
Definition: printing-coordinator-local.h:165
const char * location
Definition: printing-coordinator-local.h:167
const char * model
Definition: printing-coordinator-local.h:169
struct caps_supported_mime_list document_format_supported
Definition: printing-coordinator-local.h:170
Definition: management-printers-and-jobs.h:57
Definition: libcapsppcommon.h:166
size_t cnt
Definition: libcapsppcommon.h:167
Print job progression information.
Definition: printing-coordinator-local.h:104
unsigned flags
Definition: printing-coordinator-local.h:105
unsigned copy
Definition: printing-coordinator-local.h:106
unsigned dmedia
Definition: printing-coordinator-local.h:108
unsigned fmedia
Definition: printing-coordinator-local.h:109
unsigned cpage
Definition: printing-coordinator-local.h:107
Print job state information for internal use.
Definition: printing-coordinator-local.h:93
char * message
Definition: printing-coordinator-local.h:96
enum caps_printing_job_reason reason
Definition: printing-coordinator-local.h:95
enum caps_printing_job_state id
Definition: printing-coordinator-local.h:94
Printer state information for internal use.
Definition: printing-coordinator-local.h:82
char * message
Definition: printing-coordinator-local.h:85
enum caps_printing_provider_state id
Definition: printing-coordinator-local.h:83
enum caps_printing_provider_reason reason
Definition: printing-coordinator-local.h:84