Skip to content

Commit

Permalink
Expand the data being tracked for 5100.18 proxies that are needed for
Browse files Browse the repository at this point in the history
Microsoft Universal Print.
  • Loading branch information
michaelrsweet committed Dec 5, 2024
1 parent 42fec59 commit 515b502
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 14 deletions.
100 changes: 94 additions & 6 deletions pappl/printer-accessors.c
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,58 @@ papplPrinterGetState(
}


//
// 'papplPrinterGetProxyClientID()' - Get the proxy printer client_id value.
//

char * // O - Proxy printer client_id or `NULL` if none
papplPrinterGetProxyClientID(
pappl_printer_t *printer, // I - Printer
char *buffer, // I - String buffer
size_t bufsize) // I - Size of buffer
{
if (!printer || !printer->proxy_client_id || !buffer || bufsize == 0)
{
if (buffer)
*buffer = '\0';

return (NULL);
}

_papplRWLockRead(printer);
cupsCopyString(buffer, printer->proxy_client_id, bufsize);
_papplRWUnlock(printer);

return (buffer);
}


//
// 'papplPrinterGetProxyDeviceUUID()' - Get the proxy printer output device UUID.
//

char * // O - Proxy printer device UUID or `NULL` on error
papplPrinterGetProxyDeviceUUID(
pappl_printer_t *printer, // I - Printer
char *buffer, // I - String buffer
size_t bufsize) // I - Size of buffer
{
if (!printer || !printer->proxy_device_uuid || !buffer || bufsize == 0)
{
if (buffer)
*buffer = '\0';

return (NULL);
}

_papplRWLockRead(printer);
cupsCopyString(buffer, printer->proxy_device_uuid, bufsize);
_papplRWUnlock(printer);

return (buffer);
}


//
// 'papplPrinterGetProxyName()' - Get the proxy printer common name.
//
Expand All @@ -749,6 +801,32 @@ papplPrinterGetProxyName(
}


//
// 'papplPrinterGetProxyTokenURL()' - Get the proxy printer OAuth device token URL.
//

char * // O - Proxy printer token URL or `NULL` if none
papplPrinterGetProxyTokenURL(
pappl_printer_t *printer, // I - Printer
char *buffer, // I - String buffer
size_t bufsize) // I - Size of buffer
{
if (!printer || !printer->proxy_token_url || !buffer || bufsize == 0)
{
if (buffer)
*buffer = '\0';

return (NULL);
}

_papplRWLockRead(printer);
cupsCopyString(buffer, printer->proxy_token_url, bufsize);
_papplRWUnlock(printer);

return (buffer);
}


//
// 'papplPrinterGetProxyURI()' - Get the proxy printer URI.
//
Expand Down Expand Up @@ -1787,9 +1865,12 @@ papplPrinterSetPrintGroup(
void
papplPrinterSetProxy(
pappl_printer_t *printer, // I - Printer
const char *client_id, // I - Proxy printer client_id or `NULL` if none
const char *device_uuid, // I - Proxy printer device (local) UUID
const char *name, // I - Proxy printer common name
const char *uri, // I - Proxy printer URI
const char *uuid) // I - Proxy printer UUID
const char *token_url, // I - Proxy printer device token URL or `NULL` if none
const char *uri, // I - Proxy printer (cloud/remote) URI
const char *uuid) // I - Proxy printer (cloud/remote) UUID
{
if (!printer)
return;
Expand All @@ -1814,13 +1895,20 @@ papplPrinterSetProxy(
}

// Update the proxy information...
free(printer->proxy_client_id);
free(printer->proxy_device_uuid);
free(printer->proxy_name);
free(printer->proxy_token_url);
free(printer->proxy_uri);
free(printer->proxy_uuid);
printer->proxy_name = name ? strdup(name) : NULL;
printer->proxy_uri = uri ? strdup(uri) : NULL;
printer->proxy_uuid = uuid ? strdup(uuid) : NULL;
printer->config_time = time(NULL);

printer->proxy_client_id = client_id ? strdup(client_id) : NULL;
printer->proxy_device_uuid = device_uuid ? strdup(device_uuid) : NULL;
printer->proxy_name = name ? strdup(name) : NULL;
printer->proxy_token_url = token_url ? strdup(token_url) : NULL;
printer->proxy_uri = uri ? strdup(uri) : NULL;
printer->proxy_uuid = uuid ? strdup(uuid) : NULL;
printer->config_time = time(NULL);

_papplRWUnlock(printer);

Expand Down
12 changes: 9 additions & 3 deletions pappl/printer-private.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,12 +101,18 @@ struct _pappl_printer_s // Printer data

bool proxy_active, // Proxy active?
proxy_terminate; // Terminate proxy?
char *proxy_client_id, // Proxy client_id value
*proxy_device_uuid; // Proxy output-device-uuid value
cups_array_t *proxy_jobs; // Proxy jobs
cups_mutex_t proxy_jobs_mutex; // Mutex for proxy jobs array
char *proxy_name, // Proxy common_name value
*proxy_resource, // Proxy resource path value
*proxy_token; // Proxy access token
time_t proxy_token_expires; // Proxy access token expiration date/time
cups_mutex_t proxy_token_mutex; // Mutex for access token
char *proxy_token_url, // Proxy device token URL value
*proxy_uri, // Proxy printer-uri value
*proxy_uuid; // Proxy output-device-uuid value
cups_array_t *proxy_jobs; // Proxy jobs
cups_mutex_t proxy_jobs_mutex; // Mutex for proxy jobs array
*proxy_uuid; // Proxy printer-uuid value
};


Expand Down
6 changes: 6 additions & 0 deletions pappl/printer.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,8 +228,12 @@ _papplPrinterDelete(

cupsArrayDelete(printer->links);

free(printer->proxy_client_id);
free(printer->proxy_device_uuid);
free(printer->proxy_name);
free(printer->proxy_resource);
free(printer->proxy_token);
free(printer->proxy_token_url);
free(printer->proxy_uri);
free(printer->proxy_uuid);

Expand All @@ -238,6 +242,7 @@ _papplPrinterDelete(
cupsRWDestroy(&printer->output_rwlock);
cupsRWDestroy(&printer->rwlock);
cupsMutexDestroy(&printer->proxy_jobs_mutex);
cupsMutexDestroy(&printer->proxy_token_mutex);

free(printer);
}
Expand Down Expand Up @@ -751,6 +756,7 @@ create_printer(
cupsRWInit(&printer->rwlock);
cupsRWInit(&printer->output_rwlock);
cupsMutexInit(&printer->proxy_jobs_mutex);
cupsMutexInit(&printer->proxy_token_mutex);

printer->system = system;
printer->name = strdup(printer_name);
Expand Down
5 changes: 4 additions & 1 deletion pappl/printer.h
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,10 @@ extern char *papplPrinterGetOrganization(pappl_printer_t *printer, char *buffer
extern char *papplPrinterGetOrganizationalUnit(pappl_printer_t *printer, char *buffer, size_t bufsize) _PAPPL_PUBLIC;
extern char *papplPrinterGetPath(pappl_printer_t *printer, const char *subpath, char *buffer, size_t bufsize) _PAPPL_PUBLIC;
extern char *papplPrinterGetPrintGroup(pappl_printer_t *printer, char *buffer, size_t bufsize) _PAPPL_PUBLIC;
extern char *papplPrinterGetProxyClientID(pappl_printer_t *printer, char *buffer, size_t bufsize) _PAPPL_PUBLIC;
extern char *papplPrinterGetProxyDeviceUUID(pappl_printer_t *printer, char *buffer, size_t bufsize) _PAPPL_PUBLIC;
extern char *papplPrinterGetProxyName(pappl_printer_t *printer, char *buffer, size_t bufsize) _PAPPL_PUBLIC;
extern char *papplPrinterGetProxyTokenURL(pappl_printer_t *printer, char *buffer, size_t bufsize) _PAPPL_PUBLIC;
extern char *papplPrinterGetProxyURI(pappl_printer_t *printer, char *buffer, size_t bufsize) _PAPPL_PUBLIC;
extern char *papplPrinterGetProxyUUID(pappl_printer_t *printer, char *buffer, size_t bufsize) _PAPPL_PUBLIC;
extern pappl_preason_t papplPrinterGetReasons(pappl_printer_t *printer) _PAPPL_PUBLIC;
Expand Down Expand Up @@ -505,7 +508,7 @@ extern void papplPrinterSetNextJobID(pappl_printer_t *printer, int next_job_id)
extern void papplPrinterSetOrganization(pappl_printer_t *printer, const char *value) _PAPPL_PUBLIC;
extern void papplPrinterSetOrganizationalUnit(pappl_printer_t *printer, const char *value) _PAPPL_PUBLIC;
extern void papplPrinterSetPrintGroup(pappl_printer_t *printer, const char *value) _PAPPL_PUBLIC;
extern void papplPrinterSetProxy(pappl_printer_t *printer, const char *name, const char *uri, const char *uuid) _PAPPL_PUBLIC;
extern void papplPrinterSetProxy(pappl_printer_t *printer, const char *client_id, const char *device_uuid, const char *name, const char *token_url, const char *uri, const char *uuid) _PAPPL_PUBLIC;
extern bool papplPrinterSetReadyMedia(pappl_printer_t *printer, size_t num_ready, pappl_media_col_t *ready) _PAPPL_PUBLIC;
extern void papplPrinterSetReasons(pappl_printer_t *printer, pappl_preason_t add, pappl_preason_t remove) _PAPPL_PUBLIC;
extern void papplPrinterSetSupplies(pappl_printer_t *printer, size_t num_supplies, pappl_supply_t *supplies) _PAPPL_PUBLIC;
Expand Down
16 changes: 12 additions & 4 deletions testsuite/testpappl.c
Original file line number Diff line number Diff line change
Expand Up @@ -4275,9 +4275,11 @@ test_infra(pappl_system_t *system) // I - System
bool ret = true; // Return value
pappl_printer_t *itest; // Infrastructure printer
pappl_printer_t *ptest; // Local printer testing proxy functionality
const char *proxy_device_uuid;
// Output device UUID
const char *proxy_name; // Infrastructure common name/UUID
char proxy_uri[1024];// Printer URI for infrastructure printer
const char *proxy_uuid; // Output device UUID
const char *proxy_uuid; // Infrastructure printer UUID
size_t num_ijobs, // Number of jobs on infrastructure printer
num_pjobs; // Number of jobs on proxy printer
http_t *http; // HTTP connection
Expand Down Expand Up @@ -4313,8 +4315,8 @@ test_infra(pappl_system_t *system) // I - System
}

testBegin("infra: papplPrinterGetUUID(ptest)");
if ((proxy_uuid = papplPrinterGetUUID(ptest)) != NULL)
testEndMessage(true, "%s", proxy_uuid);
if ((proxy_device_uuid = papplPrinterGetUUID(ptest)) != NULL)
testEndMessage(true, "%s", proxy_device_uuid);
else
testEnd(false);

Expand All @@ -4329,6 +4331,12 @@ test_infra(pappl_system_t *system) // I - System
return (false);
}

testBegin("infra: papplPrinterGetUUID(itest)");
if ((proxy_uuid = papplPrinterGetUUID(itest)) != NULL)
testEndMessage(true, "%s", proxy_uuid);
else
testEnd(false);

testBegin("infra: papplPrinterGetURI(itest)");
if (papplPrinterGetURI(itest, proxy_uri, sizeof(proxy_uri)))
testEndMessage(true, "%s", proxy_uri);
Expand All @@ -4342,7 +4350,7 @@ test_infra(pappl_system_t *system) // I - System
testEnd(false);

testBegin("infra: papplPrinterSetProxy(ptest pointing to itest)");
papplPrinterSetProxy(ptest, proxy_name, proxy_uri, proxy_uuid);
papplPrinterSetProxy(ptest, /*client_id*/NULL, proxy_device_uuid, proxy_name, /*token_url*/NULL, proxy_uri, proxy_uuid);
testEnd(true);

// Connect to system...
Expand Down

0 comments on commit 515b502

Please sign in to comment.