/** * FreeRDP: A Remote Desktop Protocol Implementation * Print Virtual Channel * * Copyright 2010-2011 Vic Lee * Copyright 2015 Thincast Technologies GmbH * Copyright 2015 DI (FH) Martin Haimberger * Copyright 2016 Armin Novak * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef FREERDP_CHANNEL_PRINTER_CLIENT_PRINTER_H #define FREERDP_CHANNEL_PRINTER_CLIENT_PRINTER_H #include typedef struct rdp_printer_driver rdpPrinterDriver; typedef struct rdp_printer rdpPrinter; typedef struct rdp_print_job rdpPrintJob; typedef void (*pcReferencePrinterDriver)(rdpPrinterDriver* driver); typedef rdpPrinter** (*pcEnumPrinters)(rdpPrinterDriver* driver); typedef void (*pcReleaseEnumPrinters)(rdpPrinter** printers); typedef rdpPrinter* (*pcGetPrinter)(rdpPrinterDriver* driver, const char* name, const char* driverName); typedef void (*pcReferencePrinter)(rdpPrinter* printer); struct rdp_printer_driver { pcEnumPrinters EnumPrinters; pcReleaseEnumPrinters ReleaseEnumPrinters; pcGetPrinter GetPrinter; pcReferencePrinterDriver AddRef; pcReferencePrinterDriver ReleaseRef; }; typedef rdpPrintJob* (*pcCreatePrintJob)(rdpPrinter* printer, UINT32 id); typedef rdpPrintJob* (*pcFindPrintJob)(rdpPrinter* printer, UINT32 id); struct rdp_printer { size_t id; char* name; char* driver; BOOL is_default; size_t references; rdpPrinterDriver* backend; pcCreatePrintJob CreatePrintJob; pcFindPrintJob FindPrintJob; pcReferencePrinter AddRef; pcReferencePrinter ReleaseRef; }; typedef UINT (*pcWritePrintJob)(rdpPrintJob* printjob, const BYTE* data, size_t size); typedef void (*pcClosePrintJob)(rdpPrintJob* printjob); struct rdp_print_job { UINT32 id; rdpPrinter* printer; pcWritePrintJob Write; pcClosePrintJob Close; }; #endif /* FREERDP_CHANNEL_PRINTER_CLIENT_PRINTER_H */