summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2008-05-19 23:16:59 +0000
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2008-05-19 23:16:59 +0000
commit20fbc9034781e607f8063453c8a52ec73fc5c293 (patch)
tree9c6f5a485fddc0431ca7a2b393a2f8e52aaf90e1 /backend
parent47879b8b63f262a11f53710f029e2969c5720b1f (diff)
Merge changes from CUPS 1.4svn-r7594.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@779 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'backend')
-rw-r--r--backend/network.c137
-rw-r--r--backend/testbackend.c10
2 files changed, 138 insertions, 9 deletions
diff --git a/backend/network.c b/backend/network.c
index 46832a3d1..daf05cda5 100644
--- a/backend/network.c
+++ b/backend/network.c
@@ -34,12 +34,6 @@
/*
- * Local functions...
- */
-
-
-
-/*
* 'backendCheckSideChannel()' - Check the side-channel for pending requests.
*/
@@ -112,6 +106,126 @@ backendNetworkSideCB(
datalen = 1;
break;
+ case CUPS_SC_CMD_SNMP_GET :
+ case CUPS_SC_CMD_SNMP_GET_NEXT :
+ fprintf(stderr, "DEBUG: CUPS_SC_CMD_SNMP_%s: %d (%s)\n",
+ command == CUPS_SC_CMD_SNMP_GET ? "GET" : "GET_NEXT", datalen,
+ data);
+
+ if (datalen < 2)
+ {
+ status = CUPS_SC_STATUS_BAD_MESSAGE;
+ datalen = 0;
+ break;
+ }
+
+ if (snmp_fd >= 0)
+ {
+ cups_snmp_t packet; /* Packet from printer */
+
+
+ if (!_cupsSNMPStringToOID(data, packet.object_name, CUPS_SNMP_MAX_OID))
+ {
+ status = CUPS_SC_STATUS_BAD_MESSAGE;
+ datalen = 0;
+ break;
+ }
+
+ status = CUPS_SC_STATUS_IO_ERROR;
+ datalen = 0;
+
+ if (_cupsSNMPWrite(snmp_fd, addr, CUPS_SNMP_VERSION_1,
+ _cupsSNMPDefaultCommunity(),
+ command == CUPS_SC_CMD_SNMP_GET ?
+ CUPS_ASN1_GET_REQUEST :
+ CUPS_ASN1_GET_NEXT_REQUEST, 1,
+ packet.object_name))
+ {
+ if (_cupsSNMPRead(snmp_fd, &packet, 1.0))
+ {
+ char *dataptr; /* Pointer into data */
+ int i; /* Looping var */
+
+
+ if (!_cupsSNMPOIDToString(packet.object_name, data, sizeof(data)))
+ {
+ fputs("DEBUG: Bad OID returned!\n", stderr);
+ break;
+ }
+
+ datalen = (int)strlen(data) + 1;
+ dataptr = data + datalen;
+
+ switch (packet.object_type)
+ {
+ case CUPS_ASN1_BOOLEAN :
+ snprintf(dataptr, sizeof(data) - (dataptr - data), "%d",
+ packet.object_value.boolean);
+ break;
+
+ case CUPS_ASN1_INTEGER :
+ snprintf(dataptr, sizeof(data) - (dataptr - data), "%d",
+ packet.object_value.integer);
+ break;
+
+ case CUPS_ASN1_BIT_STRING :
+ case CUPS_ASN1_OCTET_STRING :
+ strlcpy(dataptr, packet.object_value.string,
+ sizeof(data) - (dataptr - data));
+ break;
+
+ case CUPS_ASN1_OID :
+ _cupsSNMPOIDToString(packet.object_value.oid, dataptr,
+ sizeof(data) - (dataptr - data));
+ break;
+
+ case CUPS_ASN1_HEX_STRING :
+ for (i = 0;
+ i < packet.object_value.hex_string.num_bytes &&
+ dataptr < (data + sizeof(data) - 3);
+ i ++, dataptr += 2)
+ sprintf(dataptr, "%02X",
+ packet.object_value.hex_string.bytes[i]);
+ break;
+
+ case CUPS_ASN1_COUNTER :
+ snprintf(dataptr, sizeof(data) - (dataptr - data), "%d",
+ packet.object_value.counter);
+ break;
+
+ case CUPS_ASN1_GAUGE :
+ snprintf(dataptr, sizeof(data) - (dataptr - data), "%u",
+ packet.object_value.gauge);
+ break;
+
+ case CUPS_ASN1_TIMETICKS :
+ snprintf(dataptr, sizeof(data) - (dataptr - data), "%u",
+ packet.object_value.timeticks);
+ break;
+
+ default :
+ fprintf(stderr, "DEBUG: Unknown OID value type %02X!\n",
+ packet.object_type);
+ break;
+ }
+
+ fprintf(stderr, "DEBUG: Returning %s %s\n", data, data + datalen);
+
+ status = CUPS_SC_STATUS_OK;
+ datalen += (int)strlen(data + datalen);
+ }
+ else
+ fputs("DEBUG: SNMP read error...\n", stderr);
+ }
+ else
+ fputs("DEBUG: SNMP write error...\n", stderr);
+ break;
+ }
+
+ status = CUPS_SC_STATUS_NOT_IMPLEMENTED;
+ datalen = 0;
+ break;
+
case CUPS_SC_CMD_GET_DEVICE_ID :
if (snmp_fd >= 0)
{
@@ -119,7 +233,12 @@ backendNetworkSideCB(
static const int ppmPrinterIEEE1284DeviceId[] =
{ CUPS_OID_ppmPrinterIEEE1284DeviceId,1,-1 };
- if (_cupsSNMPWrite(snmp_fd, addr, 1, _cupsSNMPDefaultCommunity(),
+
+ status = CUPS_SC_STATUS_IO_ERROR;
+ datalen = 0;
+
+ if (_cupsSNMPWrite(snmp_fd, addr, CUPS_SNMP_VERSION_1,
+ _cupsSNMPDefaultCommunity(),
CUPS_ASN1_GET_REQUEST, 1,
ppmPrinterIEEE1284DeviceId))
{
@@ -128,9 +247,11 @@ backendNetworkSideCB(
{
strlcpy(data, packet.object_value.string, sizeof(data));
datalen = (int)strlen(data);
- break;
+ status = CUPS_SC_STATUS_OK;
}
}
+
+ break;
}
if ((device_id = getenv("1284DEVICEID")) != NULL)
diff --git a/backend/testbackend.c b/backend/testbackend.c
index 4868beee1..363572a76 100644
--- a/backend/testbackend.c
+++ b/backend/testbackend.c
@@ -318,6 +318,8 @@ main(int argc, /* I - Number of command-line args */
};
+ sleep(2);
+
length = 0;
scstatus = cupsSideChannelDoRequest(CUPS_SC_CMD_DRAIN_OUTPUT, buffer,
&length, 5.0);
@@ -341,6 +343,12 @@ main(int argc, /* I - Number of command-line args */
printf("CUPS_SC_CMD_GET_STATE returned %s, %02X\n", statuses[scstatus],
buffer[0] & 255);
+ length = sizeof(buffer);
+ scstatus = cupsSideChannelSNMPGet(".1.3.6.1.2.1.43.10.2.1.4.1.1", buffer,
+ &length, 5.0);
+ printf("CUPS_SC_CMD_SNMP_GET returned %s, %s\n", statuses[scstatus],
+ buffer);
+
length = 0;
scstatus = cupsSideChannelDoRequest(CUPS_SC_CMD_SOFT_RESET, buffer,
&length, 5.0);
@@ -372,7 +380,7 @@ main(int argc, /* I - Number of command-line args */
static void
usage(void)
{
- fputs("Usage: betest [-ps] [-s] [-t] device-uri job-id user title copies "
+ fputs("Usage: testbackend [-ps] [-s] [-t] device-uri job-id user title copies "
"options [file]\n", stderr);
exit(1);
}