pappl icon indicating copy to clipboard operation
pappl copied to clipboard

IPP INFRA/SYSTEM Server Support

Open michaelrsweet opened this issue 3 years ago • 3 comments

Add support for IPP INFRA (PWG 5100.18) and SYSTEM (PWG 5100.22) to function as an infrastructure printer. Tasks:

  • [x] IPP Notifications (RFC 3995/3996) support
  • [x] IPP System service - notifications
  • [x] IPP System service - Register-Output-Device
  • [x] Register callback that returns a pappl_printer_t pointer
  • [ ] IPP System service - resources
  • [ ] Save/load IPP-managed resources
  • [ ] Update resource API to support more IPP resource stuff
  • [ ] IPP INFRA - printer and job operations
  • [x] "infra" driver name
  • [x] PAPPL_SOPTIONS_INFRA_SERVER to enable INFRA support
  • [ ] Transform support (as configured)

michaelrsweet avatar Oct 22 '20 15:10 michaelrsweet

Tracking development on the infra branch...

michaelrsweet avatar Jan 01 '24 15:01 michaelrsweet

Proposed API:

enum pappl_soptions_e			// System option bits
{
  ...
  PAPPL_SOPTIONS_INFRA_PROXY = 0x2000,		// Enable shared infrastructure proxy features
  PAPPL_SOPTIONS_INFRA_SERVER = 0x4000		// Enable shared infrastructure printer/system features
};

typedef pappl_printer_t *(*pappl_pr_register_cb_t)(pappl_client_t *client, const char *device_uuid, void *data);
					// Infrastructure printer registration callback function

extern void		papplPrinterAddInfraDevice(pappl_printer_t *printer, const char *device_uuid) _PAPPL_PUBLIC;
extern bool		papplPrinterAddInfraProxy(pappl_printer_t *printer, const char *uri) _PAPPL_PUBLIC;
extern pappl_printer_t	*papplPrinterCreateInfra(pappl_system_t *system, int printer_id, const char *printer_name, size_t num_device_uuids, const char * const *device_uuids) _PAPPL_PUBLIC;
extern char		**papplPrinterGetInfraDevices(pappl_printer_t *printer, size_t *num_devices) _PAPPL_PUBLIC;
extern char		**papplPrinterGetInfraProxies(pappl_printer_t *printer, size_t *num_proxies) _PAPPL_PUBLIC;
extern void		papplPrinterRemoveInfraDevice(pappl_printer_t *printer, const char *device_uuid) _PAPPL_PUBLIC;
extern void		papplPrinterRemoveInfraProxy(pappl_printer_t *printer, const char *printer_uri) _PAPPL_PUBLIC;

extern pappl_printer_t	*papplSystemFindInfraPrinter(pappl_system_t *system, const char *device_uuid) _PAPPL_PUBLIC;
extern void		papplSystemSetRegisterCallback(pappl_system_t *system, pappl_pr_register_cb_t cb, void *data) _PAPPL_PUBLIC;

michaelrsweet avatar Jan 01 '24 15:01 michaelrsweet

OK, so some of the INFRA implementation has to deal with how to combine the capabilities of multiple output devices for a single INFRA printer. Typically this falls into the category of a union or intersection of capabilities, with potentially some additional filtering, i.e., a site might want to limit the kinds of media that are supported.

michaelrsweet avatar Jan 26 '24 22:01 michaelrsweet