/*
- * "$Id$"
- *
* Common backend network APIs for CUPS.
*
- * Copyright 2007-2011 by Apple Inc.
- * Copyright 2006-2007 by Easy Software Products, all rights reserved.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
- * law. Distribution and use rights are outlined in the file "LICENSE.txt"
- * "LICENSE" which should have been included with this file. If this
- * file is missing or damaged, see the license at "http://www.cups.org/".
+ * Copyright © 2007-2016 by Apple Inc.
+ * Copyright © 2006-2007 by Easy Software Products, all rights reserved.
*
- * This file is subject to the Apple OS-Developed Software exception.
+ * Licensed under Apache License v2.0. See the file "LICENSE" for more
+ * information.
*/
/*
* 'backendCheckSideChannel()' - Check the side-channel for pending requests.
*/
-
void
backendCheckSideChannel(
int snmp_fd, /* I - SNMP socket */
}
+/*
+ * 'backendLookup()' - Lookup the given host and log addresses.
+ */
+
+http_addrlist_t * /* O - List of addresses or NULL */
+backendLookup(const char *hostname, /* I - Hostname */
+ int port, /* I - Port number */
+ int *cancel) /* I - Variable to watch for job cancel */
+{
+ char portname[32], /* Port number as string */
+ addrname[256]; /* Address as string */
+ http_addrlist_t *addrlist, /* List of addresses */
+ *current; /* Current address */
+
+
+ /*
+ * Lookup the address for the named host...
+ */
+
+ snprintf(portname, sizeof(portname), "%d", port);
+
+ fputs("STATE: +connecting-to-device\n", stderr);
+ fprintf(stderr, "DEBUG: Looking up \"%s\"...\n", hostname);
+
+ while ((addrlist = httpAddrGetList(hostname, AF_UNSPEC, portname)) == NULL)
+ {
+ _cupsLangPrintFilter(stderr, "INFO", _("Unable to locate printer \"%s\"."), hostname);
+ sleep(10);
+
+ if (getenv("CLASS") != NULL)
+ {
+ fputs("STATE: -connecting-to-device\n", stderr);
+ exit(CUPS_BACKEND_STOP);
+ }
+
+ if (cancel && *cancel)
+ {
+ fputs("STATE: -connecting-to-device\n", stderr);
+ exit(CUPS_BACKEND_OK);
+ }
+ }
+
+ fputs("STATE: -connecting-to-device\n", stderr);
+
+ /*
+ * Log the addresses we got...
+ */
+
+ for (current = addrlist; current; current = current->next)
+ fprintf(stderr, "DEBUG: %s=%s\n", hostname, httpAddrString(¤t->addr, addrname, sizeof(addrname)));
+
+ /*
+ * Return...
+ */
+
+ return (addrlist);
+}
+
+
/*
* 'backendNetworkSideCB()' - Handle common network side-channel commands.
*/
case CUPS_SC_CMD_GET_BIDI :
status = CUPS_SC_STATUS_OK;
- data[0] = use_bc;
+ data[0] = (char)use_bc;
datalen = 1;
break;
for (dataptr = data + strlen(data) + 1;
count > 0 && dataptr < (data + sizeof(data) - 1);
count --, dataptr += strlen(dataptr))
- strlcpy(dataptr, snmp_value, sizeof(data) - (dataptr - data));
+ strlcpy(dataptr, snmp_value, sizeof(data) - (size_t)(dataptr - data));
fprintf(stderr, "DEBUG: Returning %s %s\n", data,
data + strlen(data) + 1);
status = CUPS_SC_STATUS_OK;
- datalen = dataptr - data;
+ datalen = (int)(dataptr - data);
break;
}
{
if (_cupsSNMPRead(snmp_fd, &packet, 1.0))
{
- int i; /* Looping var */
+ size_t i; /* Looping var */
if (!_cupsSNMPOIDToString(packet.object_name, data, sizeof(data)))
switch (packet.object_type)
{
case CUPS_ASN1_BOOLEAN :
- snprintf(dataptr, sizeof(data) - (dataptr - data), "%d",
- packet.object_value.boolean);
+ snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%d", packet.object_value.boolean);
datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_INTEGER :
- snprintf(dataptr, sizeof(data) - (dataptr - data), "%d",
+ snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%d",
packet.object_value.integer);
datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_BIT_STRING :
case CUPS_ASN1_OCTET_STRING :
- if (packet.object_value.string.num_bytes < 0)
- i = 0;
- else if (packet.object_value.string.num_bytes <
- (sizeof(data) - (dataptr - data)))
+ if (packet.object_value.string.num_bytes < (sizeof(data) - (size_t)(dataptr - data)))
i = packet.object_value.string.num_bytes;
else
- i = (int)(sizeof(data) - (dataptr - data));
+ i = sizeof(data) - (size_t)(dataptr - data);
memcpy(dataptr, packet.object_value.string.bytes, i);
- datalen += i;
+ datalen += (int)i;
break;
case CUPS_ASN1_OID :
_cupsSNMPOIDToString(packet.object_value.oid, dataptr,
- sizeof(data) - (dataptr - data));
+ sizeof(data) - (size_t)(dataptr - data));
datalen += (int)strlen(dataptr);
break;
i < packet.object_value.string.num_bytes &&
dataptr < (data + sizeof(data) - 3);
i ++, dataptr += 2)
- sprintf(dataptr, "%02X",
- packet.object_value.string.bytes[i]);
+ sprintf(dataptr, "%02X", packet.object_value.string.bytes[i]);
datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_COUNTER :
- snprintf(dataptr, sizeof(data) - (dataptr - data), "%d",
- packet.object_value.counter);
+ snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%u", packet.object_value.counter);
datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_GAUGE :
- snprintf(dataptr, sizeof(data) - (dataptr - data), "%u",
- packet.object_value.gauge);
+ snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%u", packet.object_value.gauge);
datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_TIMETICKS :
- snprintf(dataptr, sizeof(data) - (dataptr - data), "%u",
- packet.object_value.timeticks);
+ snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%u", packet.object_value.timeticks);
datalen += (int)strlen(dataptr);
break;
default :
- fprintf(stderr, "DEBUG: Unknown OID value type %02X!\n",
- packet.object_type);
+ fprintf(stderr, "DEBUG: Unknown OID value type %02X.\n", packet.object_type);
case CUPS_ASN1_NULL_VALUE :
dataptr[0] = '\0';
datalen = 0;
break;
+ case CUPS_SC_CMD_GET_CONNECTED :
+ status = CUPS_SC_STATUS_OK;
+ data[0] = device_fd != -1;
+ datalen = 1;
+ break;
+
case CUPS_SC_CMD_GET_DEVICE_ID :
if (snmp_fd >= 0)
{
break;
}
- case CUPS_SC_CMD_GET_CONNECTED :
- status = CUPS_SC_STATUS_OK;
- data[0] = device_fd != -1;
- datalen = 1;
- break;
-
default :
status = CUPS_SC_STATUS_NOT_IMPLEMENTED;
datalen = 0;
return (cupsSideChannelWrite(command, status, data, datalen, 1.0));
}
-
-
-/*
- * End of "$Id$".
- */