From 82b58325a3b26a9888c738d0e24214f807ad3f41 Mon Sep 17 00:00:00 2001 From: Simon Nivault Date: Tue, 20 Sep 2022 10:36:45 +0200 Subject: [PATCH] Add switch to declare printer as default or not --- channels/printer/client/cups/printer_cups.c | 4 ++-- channels/printer/client/printer_main.c | 2 +- channels/printer/client/win/printer_win.c | 4 ++-- client/common/cmdline.c | 2 +- include/freerdp/client/printer.h | 2 +- include/freerdp/settings.h | 1 + libfreerdp/common/settings.c | 5 +++++ 7 files changed, 13 insertions(+), 7 deletions(-) diff --git a/channels/printer/client/cups/printer_cups.c b/channels/printer/client/cups/printer_cups.c index 5fffc616f..ac327cc4e 100644 --- a/channels/printer/client/cups/printer_cups.c +++ b/channels/printer/client/cups/printer_cups.c @@ -378,12 +378,12 @@ static rdpPrinter** printer_cups_enum_printers(rdpPrinterDriver* driver) } static rdpPrinter* printer_cups_get_printer(rdpPrinterDriver* driver, const char* name, - const char* driverName) + const char* driverName, BOOL isDefault) { rdpCupsPrinterDriver* cups_driver = (rdpCupsPrinterDriver*)driver; WINPR_ASSERT(cups_driver); - return printer_cups_new_printer(cups_driver, name, driverName, FALSE); + return printer_cups_new_printer(cups_driver, name, driverName, isDefault); } static void printer_cups_add_ref_driver(rdpPrinterDriver* driver) diff --git a/channels/printer/client/printer_main.c b/channels/printer/client/printer_main.c index be80766ff..799b02e53 100644 --- a/channels/printer/client/printer_main.c +++ b/channels/printer/client/printer_main.c @@ -1072,7 +1072,7 @@ UINT printer_DeviceServiceEntry(PDEVICE_SERVICE_ENTRY_POINTS pEntryPoints) if (name && name[0]) { WINPR_ASSERT(driver->GetPrinter); - rdpPrinter* printer = driver->GetPrinter(driver, name, driver_name); + rdpPrinter* printer = driver->GetPrinter(driver, name, driver_name, device->IsDefault); if (!printer) { diff --git a/channels/printer/client/win/printer_win.c b/channels/printer/client/win/printer_win.c index 5735a0ba7..d8b01a025 100644 --- a/channels/printer/client/win/printer_win.c +++ b/channels/printer/client/win/printer_win.c @@ -384,7 +384,7 @@ static rdpPrinter** printer_win_enum_printers(rdpPrinterDriver* driver) } static rdpPrinter* printer_win_get_printer(rdpPrinterDriver* driver, const char* name, - const char* driverName) + const char* driverName, BOOL isDefault) { WCHAR* driverNameW = NULL; WCHAR* nameW = NULL; @@ -404,7 +404,7 @@ static rdpPrinter* printer_win_get_printer(rdpPrinterDriver* driver, const char* return NULL; } - myPrinter = printer_win_new_printer(win_driver, nameW, driverNameW, FALSE); + myPrinter = printer_win_new_printer(win_driver, nameW, driverNameW, isDefault); free(driverNameW); free(nameW); diff --git a/client/common/cmdline.c b/client/common/cmdline.c index 324e703cf..053fb6c9c 100644 --- a/client/common/cmdline.c +++ b/client/common/cmdline.c @@ -502,7 +502,7 @@ BOOL freerdp_client_print_command_line_help_ex(int argc, char** argv, printf("Serial Port Redirection: /serial:,,[SerCx2|SerCx|Serial],[permissive]\n"); printf("Serial Port Redirection: /serial:COM1,/dev/ttyS0\n"); printf("Parallel Port Redirection: /parallel:,\n"); - printf("Printer Redirection: /printer:,\n"); + printf("Printer Redirection: /printer:,,[default]\n"); printf("TCP redirection: /rdp2tcp:/usr/bin/rdp2tcp\n"); printf("\n"); printf("Audio Output Redirection: /sound:sys:oss,dev:1,format:1\n"); diff --git a/include/freerdp/client/printer.h b/include/freerdp/client/printer.h index 0f1ee74f9..69854264c 100644 --- a/include/freerdp/client/printer.h +++ b/include/freerdp/client/printer.h @@ -34,7 +34,7 @@ typedef rdpPrinter** (*pcEnumPrinters)(rdpPrinterDriver* driver); typedef void (*pcReleaseEnumPrinters)(rdpPrinter** printers); typedef rdpPrinter* (*pcGetPrinter)(rdpPrinterDriver* driver, const char* name, - const char* driverName); + const char* driverName, BOOL isDefault); typedef void (*pcReferencePrinter)(rdpPrinter* printer); struct rdp_printer_driver diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 528968946..671b36dee 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -452,6 +452,7 @@ typedef struct { RDPDR_DEVICE device; char* DriverName; + BOOL IsDefault; } RDPDR_PRINTER; typedef struct diff --git a/libfreerdp/common/settings.c b/libfreerdp/common/settings.c index 38005e3fd..5bd8368ef 100644 --- a/libfreerdp/common/settings.c +++ b/libfreerdp/common/settings.c @@ -334,6 +334,11 @@ RDPDR_DEVICE* freerdp_device_new(UINT32 Type, size_t count, const char* args[]) if (!device.printer->DriverName) goto fail; } + + if (count > 2) + { + device.printer->IsDefault = _stricmp(args[2], "default") == 0; + } break; case RDPDR_DTYP_SERIAL: if (count > 1)