CAPS Universe documentation  1.0.4
All you need to know to be successful
Functions
comm-coordinator.c File Reference

Printing coordinator and printing provider/printing driver communication via DBUS. More...

Functions

void print_argument_failure (DBusMessage *message, const DBusError *error)
 
static void print_rpc_failure (DBusMessage *message, const DBusError *error)
 
int coord_printer_id_create (struct coord_comm *instance, caps_identifier *pr_id)
 
static int send_message_and_receive_int32 (struct coord_comm *instance, DBusMessage *message)
 
void coord_printer_id_free (struct coord_comm *instance, caps_identifier pr_id)
 
int coord_printer_info_setup (struct coord_comm *instance, caps_identifier pr_id, const char *name, const char *info, const char *location, const char *vendor, const char *model, struct caps_supported_mime_list *mime_list)
 
int coord_printer_ppd_setup (struct coord_comm *instance, caps_identifier pr_id, int fd)
 
int coord_printer_state_setup (struct coord_comm *instance, caps_identifier pr_id, enum caps_printing_provider_state state_id, enum caps_printing_provider_reason reason_id, const char *state_message)
 
int coord_job_id_get_next_available (struct coord_comm *instance, caps_identifier pr_id, caps_identifier *job_id)
 
int coord_job_data_get (struct coord_comm *instance, caps_identifier pr_id, caps_identifier job_id, int *job_fh, char **job_params)
 
int coord_job_mark_finished (struct coord_comm *instance, caps_identifier pr_id, caps_identifier job_id)
 
int coord_job_state_set (struct coord_comm *instance, caps_identifier pr_id, caps_identifier job_id, enum caps_printing_job_state state_id, enum caps_printing_job_reason state_reason_id, const char *state_message)
 
int coord_job_progress_report (struct coord_comm *instance, caps_identifier pr_id, caps_identifier job_id, const struct caps_job_progression *prog)
 
static DBusHandlerResult handle_job_change_notifier (DBusMessage *message, void *data)
 
static DBusHandlerResult provider_signal_dispatch (DBusConnection *connection, DBusMessage *message, void *data)
 
static DBusBusType dbus_bus_type_detect (void)
 
int coord_connection_create (struct coord_comm *instance, const struct caps_pp_notifier *notifier, void *data)
 
void coord_connection_destroy (struct coord_comm *instance)
 
int coord_notifiers_process (struct coord_comm *instance)
 

Detailed Description

Author
Jürgen Borleis
Warning
Use as experimental

Function Documentation

◆ print_argument_failure()

void print_argument_failure ( DBusMessage *  message,
const DBusError *  error 
)

Just print a unified error message when the RPC arguments are wrong

Parameters
[in]messageJust to get the method to show where it happens
[in]errorThe error message to print
Precondition
message must still be valid

◆ print_rpc_failure()

static void print_rpc_failure ( DBusMessage *  message,
const DBusError *  error 
)
static

Just print a unified error message when the RPC fails

Parameters
[in]messageJust to get the method to show where it happens
[in]errorThe error message to print
Precondition
message must still be valid

◆ coord_printer_id_create()

int coord_printer_id_create ( struct coord_comm instance,
caps_identifier pr_id 
)

Developer's corner

Note
Counterpart is dbus_CreatePrinterId_dispatch()

◆ send_message_and_receive_int32()

static int send_message_and_receive_int32 ( struct coord_comm instance,
DBusMessage *  message 
)
static

Send the prepared message and receive and return a single 32 bit integer response

Parameters
[in]instanceThe communication instance
[in]messageThe prepared message to send
Return values
Thereceived integer on success
-EIOFailed to communicate with the CAPS universe service RPC
-EINVALBad reply from the CAPS universe service RPC

◆ coord_printer_id_free()

void coord_printer_id_free ( struct coord_comm instance,
caps_identifier  pr_id 
)

Developer's corner

Counterpart is dbus_FreePrinterId_dispatch()

◆ coord_printer_info_setup()

int coord_printer_info_setup ( struct coord_comm instance,
caps_identifier  pr_id,
const char *  name,
const char *  info,
const char *  location,
const char *  vendor,
const char *  model,
struct caps_supported_mime_list mime_list 
)

Developer's corner

Counterpart is dbus_SetPrinterInfo_dispatch()

◆ coord_printer_ppd_setup()

int coord_printer_ppd_setup ( struct coord_comm instance,
caps_identifier  pr_id,
int  fd 
)

Developer's corner

Note
Counterpart is dbus_SetPPDDefinition_dispatch()

◆ coord_printer_state_setup()

int coord_printer_state_setup ( struct coord_comm instance,
caps_identifier  pr_id,
enum caps_printing_provider_state  state_id,
enum caps_printing_provider_reason  reason_id,
const char *  state_message 
)

Developer's corner

Note
Counterpart is dbus_SetPrinterState_dispatch()

◆ coord_job_id_get_next_available()

int coord_job_id_get_next_available ( struct coord_comm instance,
caps_identifier  pr_id,
caps_identifier job_id 
)

Developer's corner

Note
Counterpart is dbus_GetJobId_dispatch()

◆ coord_job_data_get()

int coord_job_data_get ( struct coord_comm instance,
caps_identifier  pr_id,
caps_identifier  job_id,
int *  job_fh,
char **  job_params 
)

Developer's corner

Note
Counterpart is dbus_GetJob_dispatch()

◆ coord_job_mark_finished()

int coord_job_mark_finished ( struct coord_comm instance,
caps_identifier  pr_id,
caps_identifier  job_id 
)

Developer's corner

Note
Counterpart is dbus_mark_job_finished()

◆ coord_job_state_set()

int coord_job_state_set ( struct coord_comm instance,
caps_identifier  pr_id,
caps_identifier  job_id,
enum caps_printing_job_state  state_id,
enum caps_printing_job_reason  state_reason_id,
const char *  state_message 
)

Developer's corner

Note
Counterpart is dbus_job_state_update()

◆ coord_job_progress_report()

int coord_job_progress_report ( struct coord_comm instance,
caps_identifier  pr_id,
caps_identifier  job_id,
const struct caps_job_progression prog 
)

Developer's corner

Note
Counterpart is dbus_JobSetProgression_dispatch()

◆ handle_job_change_notifier()

static DBusHandlerResult handle_job_change_notifier ( DBusMessage *  message,
void *  data 
)
static

Handle the "Job Change" DBUS signal, convert it to a library callback/notifier

Parameters
[in]messageThe signal message itself, must be of SEND_JOB_CHANGE_NOTIFIER_METHOD
[in]dataOur local library handle
Returns
DBUS message handling state

This signal is sent by a printing client if a job's state changes.

This handler must act in accordance to dbus_provider_send_job_change_notifier()

◆ provider_signal_dispatch()

static DBusHandlerResult provider_signal_dispatch ( DBusConnection connection,
DBusMessage *  message,
void *  data 
)
static

The internal DBUS message dispatcher for incoming signals to printing providers

Parameters
[in]connectionThe DBUS connection
[in]messageThe signal message itself
[in]dataOur local library handle
Return values
DBUS_HANDLER_RESULT_NOT_YET_HANDLEDUnknown signal
DBUS_HANDLER_RESULT_HANDLEDSignal processed
Note
Must correspond to dbus_provider_send_job_change_notifier()
Todo:
Related to dbus_message_new_method_call()?

◆ dbus_bus_type_detect()

static DBusBusType dbus_bus_type_detect ( void  )
static

Decide what kind of DBUS bus should be used here

Return values
DBUS_BUS_SYSTEMRegular return, the system bus should be used
DBUS_BUS_SESSIONRead description below

When debugging support was compiled in (refer Setting up Debugging Support), the environment variable CAPS_DBUS_BUS can force the session bus.

◆ coord_connection_create()

int coord_connection_create ( struct coord_comm instance,
const struct caps_pp_notifier notifier,
void *  data 
)

Create and establish a communication connection to the printing coordinator

Parameters
[in,out]instanceThe communication instance
[in]notifierNotifier callback for job status changes
[in]dataThe data parameter for the notifier callback
Return values
0On success
-EIOFailed to connect to DBUS
-EBUSYFailed to register at the CAPS universe DBUS service
-ENOMSGFailed to attach to CAPS universe DBUS signals to establisch notifiers

◆ coord_connection_destroy()

void coord_connection_destroy ( struct coord_comm instance)

Close the communication connection to the printing coordinator

Parameters
[in]instanceThe communication instance

◆ coord_notifiers_process()

int coord_notifiers_process ( struct coord_comm instance)

Run the DBUS message queue and process events

Parameters
[in]instanceThe communication instance
Returns
0 on success, negative errno else