[channels,cups] add debug logging for failures
This commit is contained in:
parent
f5d9c5f815
commit
57b4f3df20
@ -40,11 +40,14 @@
|
|||||||
|
|
||||||
#include <freerdp/client/printer.h>
|
#include <freerdp/client/printer.h>
|
||||||
|
|
||||||
|
#include <freerdp/channels/log.h>
|
||||||
|
#define TAG CHANNELS_TAG("printer.client.cups")
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
rdpPrinterDriver driver;
|
rdpPrinterDriver driver;
|
||||||
|
|
||||||
int id_sequence;
|
size_t id_sequence;
|
||||||
size_t references;
|
size_t references;
|
||||||
} rdpCupsPrinterDriver;
|
} rdpCupsPrinterDriver;
|
||||||
|
|
||||||
@ -76,6 +79,31 @@ static void printer_cups_get_printjob_name(char* buf, size_t size, size_t id)
|
|||||||
t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, id);
|
t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool http_status_ok(http_status_t status)
|
||||||
|
{
|
||||||
|
switch (status)
|
||||||
|
{
|
||||||
|
case HTTP_OK:
|
||||||
|
case HTTP_CONTINUE:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static UINT write_printjob(rdpPrintJob* printjob, const BYTE* data, size_t size)
|
||||||
|
{
|
||||||
|
rdpCupsPrintJob* cups_printjob = (rdpCupsPrintJob*)printjob;
|
||||||
|
|
||||||
|
WINPR_ASSERT(cups_printjob);
|
||||||
|
|
||||||
|
http_status_t rc =
|
||||||
|
cupsWriteRequestData(cups_printjob->printjob_object, (const char*)data, size);
|
||||||
|
if (!http_status_ok(rc))
|
||||||
|
WLog_WARN(TAG, "cupsWriteRequestData returned %s", httpStatus(rc));
|
||||||
|
|
||||||
|
return CHANNEL_RC_OK;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Function description
|
* Function description
|
||||||
*
|
*
|
||||||
@ -87,9 +115,7 @@ static UINT printer_cups_write_printjob(rdpPrintJob* printjob, const BYTE* data,
|
|||||||
|
|
||||||
WINPR_ASSERT(cups_printjob);
|
WINPR_ASSERT(cups_printjob);
|
||||||
|
|
||||||
cupsWriteRequestData(cups_printjob->printjob_object, (const char*)data, size);
|
return write_printjob(printjob, data, size);
|
||||||
|
|
||||||
return CHANNEL_RC_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void printer_cups_close_printjob(rdpPrintJob* printjob)
|
static void printer_cups_close_printjob(rdpPrintJob* printjob)
|
||||||
@ -99,7 +125,10 @@ static void printer_cups_close_printjob(rdpPrintJob* printjob)
|
|||||||
|
|
||||||
WINPR_ASSERT(cups_printjob);
|
WINPR_ASSERT(cups_printjob);
|
||||||
|
|
||||||
cupsFinishDocument(cups_printjob->printjob_object, printjob->printer->name);
|
ipp_status_t rc = cupsFinishDocument(cups_printjob->printjob_object, printjob->printer->name);
|
||||||
|
if (rc != IPP_OK)
|
||||||
|
WLog_WARN(TAG, "cupsFinishDocument returned %s", ippErrorString(rc));
|
||||||
|
|
||||||
cups_printjob->printjob_id = 0;
|
cups_printjob->printjob_id = 0;
|
||||||
httpClose(cups_printjob->printjob_object);
|
httpClose(cups_printjob->printjob_object);
|
||||||
|
|
||||||
@ -118,7 +147,10 @@ static rdpPrintJob* printer_cups_create_printjob(rdpPrinter* printer, UINT32 id)
|
|||||||
WINPR_ASSERT(cups_printer);
|
WINPR_ASSERT(cups_printer);
|
||||||
|
|
||||||
if (cups_printer->printjob != NULL)
|
if (cups_printer->printjob != NULL)
|
||||||
|
{
|
||||||
|
WLog_WARN(TAG, "printjob [printer '%s'] already existing, abort!", printer->name);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
cups_printjob = (rdpCupsPrintJob*)calloc(1, sizeof(rdpCupsPrintJob));
|
cups_printjob = (rdpCupsPrintJob*)calloc(1, sizeof(rdpCupsPrintJob));
|
||||||
if (!cups_printjob)
|
if (!cups_printjob)
|
||||||
@ -131,13 +163,14 @@ static rdpPrintJob* printer_cups_create_printjob(rdpPrinter* printer, UINT32 id)
|
|||||||
cups_printjob->printjob.Close = printer_cups_close_printjob;
|
cups_printjob->printjob.Close = printer_cups_close_printjob;
|
||||||
|
|
||||||
{
|
{
|
||||||
char buf[100];
|
char buf[100] = { 0 };
|
||||||
|
|
||||||
cups_printjob->printjob_object = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC,
|
cups_printjob->printjob_object = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC,
|
||||||
HTTP_ENCRYPT_IF_REQUESTED, 1, 10000, NULL);
|
HTTP_ENCRYPT_IF_REQUESTED, 1, 10000, NULL);
|
||||||
|
|
||||||
if (!cups_printjob->printjob_object)
|
if (!cups_printjob->printjob_object)
|
||||||
{
|
{
|
||||||
|
WLog_WARN(TAG, "httpConnect2 failed for '%s:%d", cupsServer(), ippPort());
|
||||||
free(cups_printjob);
|
free(cups_printjob);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -149,13 +182,18 @@ static rdpPrintJob* printer_cups_create_printjob(rdpPrinter* printer, UINT32 id)
|
|||||||
|
|
||||||
if (!cups_printjob->printjob_id)
|
if (!cups_printjob->printjob_id)
|
||||||
{
|
{
|
||||||
|
WLog_WARN(TAG, "cupsCreateJob failed for printer '%s', driver '%s'", printer->name,
|
||||||
|
printer->driver);
|
||||||
httpClose(cups_printjob->printjob_object);
|
httpClose(cups_printjob->printjob_object);
|
||||||
free(cups_printjob);
|
free(cups_printjob);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
cupsStartDocument(cups_printjob->printjob_object, printer->name, cups_printjob->printjob_id,
|
http_status_t rc = cupsStartDocument(cups_printjob->printjob_object, printer->name,
|
||||||
buf, CUPS_FORMAT_AUTO, 1);
|
cups_printjob->printjob_id, buf, CUPS_FORMAT_AUTO, 1);
|
||||||
|
if (!http_status_ok(rc))
|
||||||
|
WLog_WARN(TAG, "cupsStartDocument [printer '%s', driver '%s'] returned %s",
|
||||||
|
printer->name, printer->driver, httpStatus(rc));
|
||||||
}
|
}
|
||||||
|
|
||||||
cups_printer->printjob = cups_printjob;
|
cups_printer->printjob = cups_printjob;
|
||||||
@ -282,8 +320,8 @@ static rdpPrinter** printer_cups_enum_printers(rdpPrinterDriver* driver)
|
|||||||
const int num_dests = cupsGetDests(&dests);
|
const int num_dests = cupsGetDests(&dests);
|
||||||
|
|
||||||
WINPR_ASSERT(driver);
|
WINPR_ASSERT(driver);
|
||||||
|
if (num_dests >= 0)
|
||||||
printers = (rdpPrinter**)calloc(num_dests + 1, sizeof(rdpPrinter*));
|
printers = (rdpPrinter**)calloc((size_t)num_dests + 1, sizeof(rdpPrinter*));
|
||||||
if (!printers)
|
if (!printers)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user