Building a Universal Print connector

This article contains pointers to resources as well as information to help ISVs build a Universal Print connector.

For background information about the connector, please see the Universal Print connector overview.

Client ID registration

Client ID registration is the step required setting up your Azure Active Directory identity to communicate with Universal Print. Please see Printer client ID registration. The article describes client ID registration for printers that have Universal Print support in their firmware. It applies to the connector since the connector acts on behalf of printers that don't have that such capability in their firmware.

Overall flow

Please see the section 4 "Model" of the IPP Shared Infrastructure Extensions spec (IPP-Infra). This document will be referred to later in this article.

In the case of Universal Print

  • The Universal Print IPP Service acts as the "IPP Infrastructure Printer". To retrieve the URI for the IPP service endpoint, refer to the printService resource type in the Microsoft Graph API.
  • The connector acts as the "IPP Proxy".

Connector tasks

The connector performs a number of tasks on behalf of the printers installed on it. This section includes the information required to implement those connector tasks.

Printer registration

Please see connector printer registration for background information.

The printer registration flow is described in the Universal Print printer registration.

Important

At the end of the printer registration process, a certificate is generated for the printer. This certificate is used to authenticate all subsequent requests sent to Universal Print on behalf of the printer (see Getting a printer token). Store the certificate securely!

Updating printer description attributes

Please refer to the IPP Proxy task called "Startup" in the sequence diagram on page 20 in the IPP-Infra spec for context.

List of supported printer description attributes

charset-configured pdf-fit-to-page-default
charset-supported pdf-fit-to-page-default
compression-supported pdf-k-octets-supported
copies-default pdf-size-constraints
copies-supported pdf-versions-supported
document-format-default presentation-direction-number-up-default
document-format-supported presentation-direction-number-up-supported
finishings-default print-color-mode-default
finishings-supported print-color-mode-supported
generated-natural-languages-supported printer-is-accepting-jobs
ipp-features-supported printer-location
ipp-versions-supported printer-make-and-model
media-col-database printer-more-info
media-col-default printer-name
media-default printer-resolution-default
media-source-supported printer-resolution-supported
media-supported printer-state
media-type-supported printer-state-reasons
multiple-document-handling-default printer-up-time
multiple-document-handling-supported printer-uri-supported
multiple-document-jobs-supported print-quality-default
natural-language-configured print-quality-supported
number-up-default print-scaling-default
number-up-supported print-scaling-supported
operations-supported queued-job-count
orientation-requested-default sides-default
orientation-requested-supported sides-supported
output-bin-default uri-authentication-supported
output-bin-supported uri-security-supported

Tip

For documentation of acceptable values for these attributes, please refer to https://www.iana.org/assignments/ipp-registrations/ipp-registrations.xhtml.

Microsoft custom connector attributes

Type Comments
microsoft-universal-print-connector-app-version Text with language Connector metadata used for identifying the connector when troubleshooting information is collected. It is included in printer's Update-Output-Device-Attributes operation.
microsoft-universal-print-connector-operating-system Text with language Connector metadata used for identifying the connector when troubleshooting information is collected. It is included in printer's Update-Output-Device-Attributes operation.
microsoft-universal-printer-driver-name Text with language Used by the connector/printer to identify the printer driver used by the printer. It is included in printer's Update-Output-Device-Attributes operation.
microsoft-universal-printer-driver-version Text with language Used by the Connector/Printer to identify the printer driver version used by the printer. It is included in printer's Update-Output-Device-Attributes operation.
microsoft-output-device-job-state-message Text without language Used by the Connector/Printer to specify an extended error message when a print job fails. It is included when the printer calls the UpdateJobStatus operation. This can include an underlying error code, exception stack/message, or non-PII details that help troubleshoot the job failure.

Setting up notification for printers

The connector does most of its communication with Universal Print through the Universal Print Notification Service. Through the notification mechanism, the connector can receive events about actions it needs to take on behalf of printers (e.g. fetch a pending print job).

The 'ippget' notification mechanism described in RFC 3996 is the way to setup an event-based notification channel with Universal Print. Without such a channel, the connector must continuously send requests to the Universal Print Notification Service (i.e. have a poll-based notification channel) to retrieve event data.

To get the URI for the Notification Service endpoint, refer to the printService resource type in the Microsoft Graph API.

Printing

Please refer to the flow starting from IPP Proxy task called "Retrieve Job from Infrastructure Printer" in the sequence diagram on page 20 in the IPP-Infra spec.

Refer to Page 20 in the IPP Spec (follow the sequence diagram from Get Jobs onwards).

Unregistering printers

Please refer to Delete printer in the Microsoft Graph API.