Github user necouchman commented on a diff in the pull request:
https://github.com/apache/guacamole-server/pull/154#discussion_r199992432
--- Diff: src/protocols/rdp/guac_rdpdr/rdpdr_printer.c ---
@@ -200,10 +180,43 @@ void guac_rdpdr_register_printer(guac_rdpdrPlugin*
rdpdr) {
/* Init device */
device->rdpdr = rdpdr;
device->device_id = id;
- device->device_name = "Guacamole Printer";
+ device->device_name = printer_name;
+ device->device_name_len = guac_utf8_strlen(device->device_name);
+ device->device_type = RDPDR_DTYP_PRINT;
+ device->dos_name = "PRN1\0\0\0\0";
+
+ /* Set up device announce stream */
+ int prt_name_len = (device->device_name_len + 1) * 2;
+ device->device_announce_len = 44 + prt_name_len
+ + GUAC_PRINTER_DRIVER_LENGTH;
+ device->device_announce = Stream_New(NULL,
device->device_announce_len);
+
+ /* Write common information. */
+ Stream_Write_UINT32(device->device_announce, device->device_type);
+ Stream_Write_UINT32(device->device_announce, device->device_id);
+ Stream_Write(device->device_announce, device->dos_name, 8);
+
+ /* DeviceDataLength */
+ Stream_Write_UINT32(device->device_announce, 24 + prt_name_len +
GUAC_PRINTER_DRIVER_LENGTH);
+
+ /* Begin printer-specific information */
+ Stream_Write_UINT32(device->device_announce,
+ RDPDR_PRINTER_ANNOUNCE_FLAG_DEFAULTPRINTER
+ | RDPDR_PRINTER_ANNOUNCE_FLAG_NETWORKPRINTER); /* Printer
flags */
+ Stream_Write_UINT32(device->device_announce, 0); /* Reserved - must be
0. */
+ Stream_Write_UINT32(device->device_announce, 0); /* PnPName Length -
ignored. */
+ Stream_Write_UINT32(device->device_announce,
GUAC_PRINTER_DRIVER_LENGTH);
+ Stream_Write_UINT32(device->device_announce, prt_name_len);
+ Stream_Write_UINT32(device->device_announce, 0); /* CachedFields
length. */
+
+ Stream_Write(device->device_announce, GUAC_PRINTER_DRIVER,
GUAC_PRINTER_DRIVER_LENGTH);
+ guac_rdp_utf8_to_utf16((const unsigned char*) device->device_name,
+ device->device_name_len,
--- End diff --
+1'd.
---