kopia lustrzana https://gitlab.com/sane-project/backends
Utilise MakeAndModel pour le device au hack.
rodzic
ece6d7d5e7
commit
9dd8319a01
|
@ -228,9 +228,6 @@ escl_device_add(int port_nb,
|
|||
}
|
||||
model = (char*)(tmp[0] != 0 ? tmp : model_name);
|
||||
current->model_name = strdup(model);
|
||||
if (strcasestr(current->model_name, "LaserJet FlowMFP M578") ||
|
||||
strcasestr(current->model_name, "LaserJet MFP M630"))
|
||||
current->hack = curl_slist_append(NULL, "Host: localhost");
|
||||
current->ip_address = strdup(ip_address);
|
||||
memset(tmp, 0, PATH_MAX);
|
||||
snprintf(tmp, sizeof(tmp), "%s scanner", (is ? is : "flatbed or ADF"));
|
||||
|
@ -474,8 +471,6 @@ attach_one_config(SANEI_Config __sane_unused__ *config, const char *line,
|
|||
escl_device->is = strdup("flatbed or ADF scanner");
|
||||
escl_device->type = strdup("In url");
|
||||
escl_device->uuid = NULL;
|
||||
if (opt_hack && !strcmp(opt_hack, "hack=localhost"))
|
||||
escl_device->hack = curl_slist_append(NULL, "Host: localhost");
|
||||
}
|
||||
|
||||
if (strncmp(line, "[device]", 8) == 0) {
|
||||
|
@ -1098,6 +1093,50 @@ escl_parse_name(SANE_String_Const name, ESCL_Device *device)
|
|||
return SANE_STATUS_GOOD;
|
||||
}
|
||||
|
||||
static void
|
||||
_get_hack(SANE_String_Const name, ESCL_Device *device)
|
||||
{
|
||||
FILE *fp;
|
||||
SANE_Char line[PATH_MAX];
|
||||
DBG (3, "_get_hack: start\n");
|
||||
if (device->model_name &&
|
||||
(strcasestr(device->model_name, "LaserJet FlowMFP M578") ||
|
||||
strcasestr(device->model_name, "LaserJet MFP M630"))) {
|
||||
device->hack = curl_slist_append(NULL, "Host: localhost");
|
||||
DBG (3, "_get_hack: finish\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* open configuration file */
|
||||
fp = sanei_config_open (ESCL_CONFIG_FILE);
|
||||
if (!fp)
|
||||
{
|
||||
DBG (2, "_get_hack: couldn't access %s\n", ESCL_CONFIG_FILE);
|
||||
DBG (3, "_get_hack: exit\n");
|
||||
}
|
||||
|
||||
/* loop reading the configuration file, all line beginning by "option " are
|
||||
* parsed for value to store in configuration structure, other line are
|
||||
* used are device to try to attach
|
||||
*/
|
||||
while (sanei_config_read (line, PATH_MAX, fp))
|
||||
{
|
||||
if (strstr(line, name)) {
|
||||
DBG (3, "_get_hack: idevice found\n");
|
||||
if (strstr(line, "hack=localhost")) {
|
||||
DBG (3, "_get_hack: device found\n");
|
||||
device->hack = curl_slist_append(NULL, "Host: localhost");
|
||||
}
|
||||
goto finish_hack;
|
||||
}
|
||||
}
|
||||
finish_hack:
|
||||
DBG (3, "_get_hack: finish\n");
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* \fn SANE_Status sane_open(SANE_String_Const name, SANE_Handle *h)
|
||||
* \brief Function that establishes a connection with the device named by 'name',
|
||||
|
@ -1139,6 +1178,8 @@ sane_open(SANE_String_Const name, SANE_Handle *h)
|
|||
escl_free_handler(handler);
|
||||
return (status);
|
||||
}
|
||||
_get_hack(name, device);
|
||||
|
||||
status = init_options(NULL, handler);
|
||||
if (status != SANE_STATUS_GOOD) {
|
||||
escl_free_handler(handler);
|
||||
|
@ -1723,8 +1764,12 @@ escl_curl_url(CURL *handle, const ESCL_Device *device, SANE_String_Const path)
|
|||
DBG( 1, "escl_curl_url: URL: %s\n", url );
|
||||
curl_easy_setopt(handle, CURLOPT_URL, url);
|
||||
free(url);
|
||||
if (device->hack)
|
||||
DBG( 1, "Before use hack\n");
|
||||
if (device->hack) {
|
||||
DBG( 1, "Use hack\n");
|
||||
curl_easy_setopt(handle, CURLOPT_HTTPHEADER, device->hack);
|
||||
}
|
||||
DBG( 1, "After use hack\n");
|
||||
if (device->https) {
|
||||
DBG( 1, "Ignoring safety certificates, use https\n");
|
||||
curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 0L);
|
||||
|
|
|
@ -229,7 +229,7 @@ SANE_Status escl_status(const ESCL_Device *device,
|
|||
const char* jobId,
|
||||
SANE_Status *job);
|
||||
|
||||
capabilities_t *escl_capabilities(const ESCL_Device *device,
|
||||
capabilities_t *escl_capabilities(ESCL_Device *device,
|
||||
SANE_Status *status);
|
||||
|
||||
char *escl_newjob(capabilities_t *scanner,
|
||||
|
|
|
@ -392,36 +392,39 @@ find_true_variables(xmlNode *node, capabilities_t *scanner, int type)
|
|||
* \return 0
|
||||
*/
|
||||
static int
|
||||
print_xml_c(xmlNode *node, capabilities_t *scanner, int type)
|
||||
print_xml_c(xmlNode *node, ESCL_Device *device, capabilities_t *scanner, int type)
|
||||
{
|
||||
while (node) {
|
||||
if (node->type == XML_ELEMENT_NODE) {
|
||||
if (find_nodes_c(node) && type != -1)
|
||||
find_true_variables(node, scanner, type);
|
||||
}
|
||||
if (!strcmp((const char *)node->name, "PlatenInputCaps")) {
|
||||
if (!strcmp((const char *)node->name, "MakeAndModel")){
|
||||
device->model_name = strdup((const char *)xmlNodeGetContent(node));
|
||||
}
|
||||
else if (!strcmp((const char *)node->name, "PlatenInputCaps")) {
|
||||
scanner->Sources[PLATEN] = (SANE_String_Const)strdup(SANE_I18N ("Flatbed"));
|
||||
scanner->SourcesSize++;
|
||||
scanner->source = PLATEN;
|
||||
print_xml_c(node->children, scanner, PLATEN);
|
||||
print_xml_c(node->children, device, scanner, PLATEN);
|
||||
scanner->caps[PLATEN].duplex = 0;
|
||||
}
|
||||
else if (!strcmp((const char *)node->name, "AdfSimplexInputCaps")) {
|
||||
scanner->Sources[ADFSIMPLEX] = (SANE_String_Const)strdup(SANE_I18N("ADF"));
|
||||
scanner->SourcesSize++;
|
||||
if (scanner->source == -1) scanner->source = ADFSIMPLEX;
|
||||
print_xml_c(node->children, scanner, ADFSIMPLEX);
|
||||
print_xml_c(node->children, device, scanner, ADFSIMPLEX);
|
||||
scanner->caps[ADFSIMPLEX].duplex = 0;
|
||||
}
|
||||
else if (!strcmp((const char *)node->name, "AdfDuplexInputCaps")) {
|
||||
scanner->Sources[ADFDUPLEX] = (SANE_String_Const)strdup(SANE_I18N ("ADF Duplex"));
|
||||
scanner->SourcesSize++;
|
||||
if (scanner->source == -1) scanner->source = ADFDUPLEX;
|
||||
print_xml_c(node->children, scanner, ADFDUPLEX);
|
||||
print_xml_c(node->children, device, scanner, ADFDUPLEX);
|
||||
scanner->caps[ADFDUPLEX].duplex = 1;
|
||||
}
|
||||
else if (find_struct_variables(node, scanner) == 0)
|
||||
print_xml_c(node->children, scanner, type);
|
||||
print_xml_c(node->children, device, scanner, type);
|
||||
node = node->next;
|
||||
}
|
||||
return (0);
|
||||
|
@ -460,7 +463,7 @@ _reduce_color_modes(capabilities_t *scanner)
|
|||
* \return scanner (the structure that stocks all the capabilities elements)
|
||||
*/
|
||||
capabilities_t *
|
||||
escl_capabilities(const ESCL_Device *device, SANE_Status *status)
|
||||
escl_capabilities(ESCL_Device *device, SANE_Status *status)
|
||||
{
|
||||
capabilities_t *scanner = (capabilities_t*)calloc(1, sizeof(capabilities_t));
|
||||
CURL *curl_handle = NULL;
|
||||
|
@ -504,7 +507,7 @@ escl_capabilities(const ESCL_Device *device, SANE_Status *status)
|
|||
scanner->Sources = (SANE_String_Const *)malloc(sizeof(SANE_String_Const) * 4);
|
||||
for (i = 0; i < 4; i++)
|
||||
scanner->Sources[i] = NULL;
|
||||
print_xml_c(node, scanner, -1);
|
||||
print_xml_c(node, device, scanner, -1);
|
||||
_reduce_color_modes(scanner);
|
||||
clean:
|
||||
xmlFreeDoc(data);
|
||||
|
|
Ładowanie…
Reference in New Issue