Thanks - I'll reopen the issue in JIRA.

I expect we just need to respond to the I/O request with
STATUS_NOT_SUPPORTED.

- Mike


On Fri, Apr 3, 2020, 11:43 vwguac <hw-l...@rcs.de> wrote:

> I have adjusted the guacd code.
> Now I answer the read request with a dummy string and it works. :-)
> Windows doesn't seem to care what is returned there.
> The code is definitely not perfect.
> It may make sense to insert something a little nicer into the official
> source code.
>
> src/protocols/rdp/channels/rdpdr/rdpdr-printer.c
>
> .....
> void guac_rdpdr_process_print_job_read(guac_rdp_common_svc* svc,
>         guac_rdpdr_device* device, guac_rdpdr_iorequest* iorequest,
>         wStream* input_stream) {
>     UINT32 length;
>     UINT64 offset;
>     char* buffer;
>     int bytes_read;
>
>     wStream* output_stream;
>     /* Read packet */
>     Stream_Read_UINT32(input_stream, length);
>     Stream_Read_UINT64(input_stream, offset);
>     guac_client_log(svc->client, GUAC_LOG_INFO,
>             "%s: [file_id=%i] length=%i, offset=%" PRIu64,
>              __func__, iorequest->file_id, length, (uint64_t) offset);
>     /* Ensure buffer size does not exceed a safe maximum */
>     if (length > GUAC_RDP_MAX_READ_BUFFER)
>         length = GUAC_RDP_MAX_READ_BUFFER;
>     /* Allocate buffer */
>     buffer = malloc(length);
>     char str[] = "helloworld";
>     strcpy(buffer, str);
>     /* Attempt read */
>     /* bytes_read = guac_rdp_fs_read((guac_rdp_fs*) device->data,
>             iorequest->file_id, offset, buffer, length); */
>     /* If error, return invalid parameter */
>     bytes_read = sizeof(buffer);
>         output_stream = guac_rdpdr_new_io_completion(device,
>                 iorequest->completion_id,
> guac_rdp_fs_get_status(bytes_read), 4);
>         Stream_Write_UINT32(output_stream, 0); /* Length */
>     /* Otherwise, send bytes read */
>         output_stream = guac_rdpdr_new_io_completion(device,
>                 iorequest->completion_id, STATUS_SUCCESS, 4+bytes_read);
>         Stream_Write_UINT32(output_stream, bytes_read);  /* Length */
>         Stream_Write(output_stream, buffer, bytes_read); /* ReadData */
>     guac_rdp_common_svc_write(svc, output_stream);
>     free(buffer);
> }
>
> .........
>
>         case IRP_MJ_READ:
>             guac_client_log(svc->client, GUAC_LOG_INFO, "printer read");
>             guac_rdpdr_process_print_job_read(svc, device, iorequest,
> input_stream);
>             break;
>
>         /* Log unknown */
>         default:
>             guac_client_log(svc->client, GUAC_LOG_ERROR, "Unknown printer "
>                     "I/O request function: 0x%x/0x%x",
> iorequest->major_func,
>                     iorequest->minor_func);
>
>
>
>
>
>
>
>
> --
> Sent from:
> http://apache-guacamole-general-user-mailing-list.2363388.n4.nabble.com/
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@guacamole.apache.org
> For additional commands, e-mail: user-h...@guacamole.apache.org
>
>

Reply via email to