You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.2 KiB
156 lines
4.2 KiB
/*
|
|
* Copyright (C) 2016 The Android Open Source Project
|
|
* Copyright (C) 2016 Mopria Alliance, Inc.
|
|
* Copyright (C) 2013 Hewlett-Packard Development Company, L.P.
|
|
*
|
|
* 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 _IPP_HELPER_H_
|
|
#define _IPP_HELPER_H_
|
|
|
|
#include "lib_wprint.h"
|
|
#include "ifc_printer_capabilities.h"
|
|
#include "ippstatus_capabilities.h"
|
|
#include "ippstatus.h"
|
|
#include "ifc_status_monitor.h"
|
|
#include "http.h"
|
|
#include "ipp.h"
|
|
#include "ifc_wprint.h"
|
|
|
|
/* Default timeout for most operations */
|
|
#define DEFAULT_IPP_TIMEOUT (15 * 1000)
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // __cplusplus
|
|
|
|
/*
|
|
* Strcture of supported IPP versions
|
|
*/
|
|
typedef struct ipp_version_supported_s {
|
|
unsigned char supportsIpp10;
|
|
unsigned char supportsIpp11;
|
|
unsigned char supportsIpp20;
|
|
} ipp_version_supported_t;
|
|
|
|
/*
|
|
* Enumeration of IPP version states
|
|
*/
|
|
typedef enum {
|
|
NEW_REQUEST_SEQUENCE,
|
|
IPP_VERSION_RESOLVED,
|
|
IPP_VERSION_UNSUPPORTED,
|
|
} ipp_version_state;
|
|
|
|
#define IPP_SERVICE_ERROR_MAX_RETRIES 3
|
|
#define IPP_BAD_REQUEST_MAX_RETRIES 2
|
|
#define IPP_INTERNAL_ERROR_MAX_RETRIES 1
|
|
|
|
extern const ifc_wprint_t *ipp_wprint_ifc;
|
|
|
|
#define PAGE_STATUS_MAX 200
|
|
|
|
/*
|
|
* Structure for supported media sizes
|
|
*/
|
|
typedef struct media_supported_s {
|
|
// All supported media sizes
|
|
media_size_t media_size[PAGE_STATUS_MAX];
|
|
|
|
// Index to entry in keyword trans table.
|
|
int idxKeywordTranTable[PAGE_STATUS_MAX];
|
|
} media_supported_t;
|
|
|
|
/*
|
|
* Returns the status of a given printer
|
|
*/
|
|
extern ipp_status_t get_PrinterState(http_t *http, char *printer_uri,
|
|
printer_state_dyn_t *printer_state_dyn, ipp_pstate_t *printer_state);
|
|
|
|
/*
|
|
* Outputs printer state reasons int printer_state
|
|
*/
|
|
extern void get_PrinterStateReason(ipp_t *response, ipp_pstate_t *printer_state,
|
|
printer_state_dyn_t *printer_state_dyn);
|
|
|
|
/*
|
|
* Parses printer attributes from the IPP response and copies them to capabilities
|
|
*/
|
|
extern void parse_printerAttributes(ipp_t *response, printer_capabilities_t *capabilities);
|
|
|
|
/*
|
|
* Sets IPP version
|
|
*/
|
|
extern status_t set_ipp_version(ipp_t *, char *, http_t *, ipp_version_state);
|
|
|
|
/*
|
|
* Parses supported media from the IPP response and copies the list into capabilities
|
|
*/
|
|
extern void parse_getMediaSupported(ipp_t *response, media_supported_t *media_supported,
|
|
printer_capabilities_t *capabilities);
|
|
|
|
/*
|
|
* Logs printer capabilities
|
|
*/
|
|
extern void debuglist_printerCapabilities(printer_capabilities_t *capabilities);
|
|
|
|
/*
|
|
* Logs printer status
|
|
*/
|
|
extern void debuglist_printerStatus(printer_state_dyn_t *printer_state_dyn);
|
|
|
|
/*
|
|
* Logs an IPP attribute
|
|
*/
|
|
extern void print_attr(ipp_attribute_t *attr);
|
|
|
|
/*
|
|
* Returns index of the supported media size, else returns -1
|
|
*/
|
|
extern int ipp_find_media_size(const char *ipp_media_keyword, media_size_t *media_size);
|
|
|
|
/*
|
|
* Returns the PWG name of a media size given it's enumeration
|
|
*/
|
|
extern const char *mapDFMediaToIPPKeyword(media_size_t media_size);
|
|
|
|
/*
|
|
* Gets the requested resource from a printer
|
|
*/
|
|
extern void getResourceFromURI(const char *uri, char *resource, int resourcelen);
|
|
|
|
/*
|
|
* Set up a new CUPS connection. All parameters for connection should be in 'info' structure.
|
|
* The printer_uri is copied into the 'printer_uri' parameter.
|
|
*
|
|
* Returns (non-NULL) http session on success.
|
|
*/
|
|
http_t *ipp_cups_connect(const wprint_connect_info_t *info, char *printer_uri,
|
|
unsigned int uriLength);
|
|
|
|
/*
|
|
* Executes a CUPS request with the given ipp request structure
|
|
*/
|
|
ipp_t *ipp_doCupsRequest(http_t *http, ipp_t *request, char *http_resource, char *printer_uri);
|
|
|
|
#define IPP_PREFIX "ipp"
|
|
#define IPPS_PREFIX "ipps"
|
|
#define DEFAULT_IPP_URI_RESOURCE "/ipp/print"
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif // __cplusplus
|
|
|
|
#endif // !_IPP_HELPER_H_
|