diff options
author | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2008-05-19 23:16:59 +0000 |
---|---|---|
committer | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2008-05-19 23:16:59 +0000 |
commit | 20fbc9034781e607f8063453c8a52ec73fc5c293 (patch) | |
tree | 9c6f5a485fddc0431ca7a2b393a2f8e52aaf90e1 /backend | |
parent | 47879b8b63f262a11f53710f029e2969c5720b1f (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.c | 137 | ||||
-rw-r--r-- | backend/testbackend.c | 10 |
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); } |