mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
[channels,printer] use freerdp_getApplicationDetailsString
Use proper vendor/product name for job name
This commit is contained in:
@@ -23,6 +23,7 @@
|
|||||||
#include <winpr/assert.h>
|
#include <winpr/assert.h>
|
||||||
|
|
||||||
#include <freerdp/config.h>
|
#include <freerdp/config.h>
|
||||||
|
#include <freerdp/utils/helpers.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -103,18 +104,26 @@ typedef struct
|
|||||||
rdpCupsPrintJob* printjob;
|
rdpCupsPrintJob* printjob;
|
||||||
} rdpCupsPrinter;
|
} rdpCupsPrinter;
|
||||||
|
|
||||||
static void printer_cups_get_printjob_name(char* buf, size_t size, size_t id)
|
WINPR_ATTR_MALLOC(free, 1)
|
||||||
|
static char* printer_cups_get_printjob_name(size_t id)
|
||||||
{
|
{
|
||||||
struct tm tres = { 0 };
|
struct tm tres = { 0 };
|
||||||
const time_t tt = time(NULL);
|
const time_t tt = time(NULL);
|
||||||
const struct tm* t = localtime_r(&tt, &tres);
|
const struct tm* t = localtime_r(&tt, &tres);
|
||||||
|
|
||||||
WINPR_ASSERT(buf);
|
char* str = NULL;
|
||||||
WINPR_ASSERT(size > 0);
|
size_t len = 0;
|
||||||
|
const int rc =
|
||||||
|
winpr_asprintf(&str, &len, "%s Print %04d-%02d-%02d %02d-%02d-%02d - Job %" PRIuz,
|
||||||
|
freerdp_getApplicationDetailsString(), t->tm_year + 1900, t->tm_mon + 1,
|
||||||
|
t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, id);
|
||||||
|
if (rc <= 0)
|
||||||
|
{
|
||||||
|
free(str);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
(void)sprintf_s(buf, size - 1, "FreeRDP Print %04d-%02d-%02d %02d-%02d-%02d - Job %" PRIuz,
|
return str;
|
||||||
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)
|
static bool http_status_ok(http_status_t status)
|
||||||
@@ -197,8 +206,6 @@ 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] = { 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);
|
||||||
|
|
||||||
@@ -209,10 +216,16 @@ static rdpPrintJob* printer_cups_create_printjob(rdpPrinter* printer, UINT32 id)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
printer_cups_get_printjob_name(buf, sizeof(buf), cups_printjob->printjob.id);
|
char* jobTitle = printer_cups_get_printjob_name(cups_printjob->printjob.id);
|
||||||
|
if (!jobTitle)
|
||||||
|
{
|
||||||
|
httpClose(cups_printjob->printjob_object);
|
||||||
|
free(cups_printjob);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
cups_printjob->printjob_id =
|
cups_printjob->printjob_id =
|
||||||
cupsCreateJob(cups_printjob->printjob_object, printer->name, buf, 0, NULL);
|
cupsCreateJob(cups_printjob->printjob_object, printer->name, jobTitle, 0, NULL);
|
||||||
|
|
||||||
if (!cups_printjob->printjob_id)
|
if (!cups_printjob->printjob_id)
|
||||||
{
|
{
|
||||||
@@ -220,11 +233,14 @@ static rdpPrintJob* printer_cups_create_printjob(rdpPrinter* printer, UINT32 id)
|
|||||||
printer->driver);
|
printer->driver);
|
||||||
httpClose(cups_printjob->printjob_object);
|
httpClose(cups_printjob->printjob_object);
|
||||||
free(cups_printjob);
|
free(cups_printjob);
|
||||||
|
free(jobTitle);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
http_status_t rc = cupsStartDocument(cups_printjob->printjob_object, printer->name,
|
http_status_t rc =
|
||||||
cups_printjob->printjob_id, buf, CUPS_FORMAT_AUTO, 1);
|
cupsStartDocument(cups_printjob->printjob_object, printer->name,
|
||||||
|
cups_printjob->printjob_id, jobTitle, CUPS_FORMAT_AUTO, 1);
|
||||||
|
free(jobTitle);
|
||||||
if (!http_status_ok(rc))
|
if (!http_status_ok(rc))
|
||||||
WLog_WARN(TAG, "cupsStartDocument [printer '%s', driver '%s'] returned %s",
|
WLog_WARN(TAG, "cupsStartDocument [printer '%s', driver '%s'] returned %s",
|
||||||
printer->name, printer->driver, httpStatus(rc));
|
printer->name, printer->driver, httpStatus(rc));
|
||||||
|
|||||||
@@ -72,27 +72,37 @@ typedef struct
|
|||||||
rdpWinPrintJob* printjob;
|
rdpWinPrintJob* printjob;
|
||||||
} rdpWinPrinter;
|
} rdpWinPrinter;
|
||||||
|
|
||||||
|
WINPR_ATTR_MALLOC(free, 1)
|
||||||
static WCHAR* printer_win_get_printjob_name(size_t id)
|
static WCHAR* printer_win_get_printjob_name(size_t id)
|
||||||
{
|
{
|
||||||
time_t tt;
|
|
||||||
struct tm tres;
|
struct tm tres;
|
||||||
errno_t err;
|
WCHAR* str = NULL;
|
||||||
WCHAR* str;
|
size_t len = 0;
|
||||||
size_t len = 1024;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
tt = time(NULL);
|
const time_t tt = time(NULL);
|
||||||
err = localtime_s(&tres, &tt);
|
const errno_t err = localtime_s(&tres, &tt);
|
||||||
|
|
||||||
str = calloc(len, sizeof(WCHAR));
|
do
|
||||||
if (!str)
|
{
|
||||||
return NULL;
|
if (len > 0)
|
||||||
|
{
|
||||||
|
str = calloc(len + 1, sizeof(WCHAR));
|
||||||
|
if (!str)
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
rc = swprintf_s(str, len,
|
const int rc = swprintf_s(
|
||||||
WIDEN("FreeRDP Print %04d-%02d-%02d% 02d-%02d-%02d - Job %") WIDEN(PRIuz)
|
str, len,
|
||||||
WIDEN("\0"),
|
WIDEN("%s Print %04d-%02d-%02d% 02d-%02d-%02d - Job %") WIDEN(PRIuz) WIDEN("\0"),
|
||||||
tres.tm_year + 1900, tres.tm_mon + 1, tres.tm_mday, tres.tm_hour, tres.tm_min,
|
freerdp_getApplicationDetailsStringW(), tres.tm_year + 1900, tres.tm_mon + 1,
|
||||||
tres.tm_sec, id);
|
tres.tm_mday, tres.tm_hour, tres.tm_min, tres.tm_sec, id);
|
||||||
|
if (rc <= 0)
|
||||||
|
{
|
||||||
|
free(str);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
len = WINPR_ASSERTING_INT_CAST(size_t, rc) + 1ull;
|
||||||
|
} while (!str);
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user