Skip to content

Commit 069ff87

Browse files
committed
Use single command with ENUM to set various options
1 parent 881d768 commit 069ff87

4 files changed

Lines changed: 198 additions & 93 deletions

File tree

ext/snmp/php_snmp.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ typedef struct _php_snmp_object {
5454
int numeric_timeticks;
5555
int extended_index;
5656
int dontprint_units;
57+
int escape_quotes;
58+
int print_hex_text;
59+
int string_output_format;
5760
int oid_output_format;
5861
int snmp_errno;
5962
int oid_increasing_check;

ext/snmp/snmp.c

Lines changed: 88 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,6 +1224,44 @@ static ZEND_ATTRIBUTE_NONNULL_ARGS(2) bool snmp_session_set_security(struct snmp
12241224
}
12251225
/* }}} */
12261226

1227+
/*
1228+
* Save the snmplib state into the given php_snmp_object
1229+
*/
1230+
static void save_snmplib_output_options(php_snmp_object *snmp_object)
1231+
{
1232+
// Booleans
1233+
snmp_object->quick_print = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT);
1234+
snmp_object->enum_print = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM);
1235+
snmp_object->numeric_index = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS);
1236+
snmp_object->numeric_timeticks = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_NUMERIC_TIMETICKS);
1237+
snmp_object->extended_index = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_EXTENDED_INDEX);
1238+
snmp_object->dontprint_units = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_PRINT_UNITS);
1239+
snmp_object->escape_quotes = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_ESCAPE_QUOTES);
1240+
snmp_object->print_hex_text = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_HEX_TEXT);
1241+
// Integers
1242+
snmp_object->string_output_format = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT);
1243+
snmp_object->oid_output_format = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT);
1244+
}
1245+
1246+
/*
1247+
* Set the snmplib output options using the given php_snmp_object
1248+
*/
1249+
static void set_snmplib_output_options(php_snmp_object *snmp_object)
1250+
{
1251+
// Booleans
1252+
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT, snmp_object->quick_print);
1253+
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM, snmp_object->enum_print);
1254+
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS, snmp_object->numeric_index);
1255+
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_NUMERIC_TIMETICKS, snmp_object->numeric_timeticks);
1256+
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_EXTENDED_INDEX, snmp_object->extended_index);
1257+
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_PRINT_UNITS, snmp_object->dontprint_units);
1258+
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_ESCAPE_QUOTES, snmp_object->escape_quotes);
1259+
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_HEX_TEXT, snmp_object->print_hex_text);
1260+
// Integers
1261+
netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT, snmp_object->string_output_format);
1262+
netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, snmp_object->oid_output_format);
1263+
}
1264+
12271265
/* {{{ php_snmp
12281266
*
12291267
* Generic SNMP handler for all versions.
@@ -1393,20 +1431,10 @@ static void php_snmp(INTERNAL_FUNCTION_PARAMETERS, int st, int version)
13931431
}
13941432
objid_query.oid_increasing_check = snmp_object->oid_increasing_check;
13951433
objid_query.valueretrieval = snmp_object->valueretrieval;
1396-
glob_snmp_object.enum_print = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM);
1397-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM, snmp_object->enum_print);
1398-
glob_snmp_object.numeric_index = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS);
1399-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS, snmp_object->numeric_index);
1400-
glob_snmp_object.numeric_timeticks = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_NUMERIC_TIMETICKS);
1401-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_NUMERIC_TIMETICKS, snmp_object->numeric_timeticks);
1402-
glob_snmp_object.extended_index = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_EXTENDED_INDEX);
1403-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_EXTENDED_INDEX, snmp_object->extended_index);
1404-
glob_snmp_object.dontprint_units = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_PRINT_UNITS);
1405-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_PRINT_UNITS, snmp_object->dontprint_units);
1406-
glob_snmp_object.quick_print = netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT);
1407-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT, snmp_object->quick_print);
1408-
glob_snmp_object.oid_output_format = netsnmp_ds_get_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT);
1409-
netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, snmp_object->oid_output_format);
1434+
1435+
// Save the global snmplib output options and set the options to those defined by the object instance
1436+
save_snmplib_output_options(&glob_snmp_object);
1437+
set_snmplib_output_options(snmp_object);
14101438
}
14111439

14121440
if (objid_query.max_repetitions < 0) {
@@ -1420,13 +1448,8 @@ static void php_snmp(INTERNAL_FUNCTION_PARAMETERS, int st, int version)
14201448
if (session_less_mode) {
14211449
snmp_session_free(&session);
14221450
} else {
1423-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM, glob_snmp_object.enum_print);
1424-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS, glob_snmp_object.numeric_index);
1425-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_NUMERIC_TIMETICKS, glob_snmp_object.numeric_timeticks);
1426-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_EXTENDED_INDEX, glob_snmp_object.extended_index);
1427-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_PRINT_UNITS, glob_snmp_object.dontprint_units);
1428-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_QUICK_PRINT, glob_snmp_object.quick_print);
1429-
netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_OID_OUTPUT_FORMAT, glob_snmp_object.oid_output_format);
1451+
// Restore the snmplib output options back to the global state
1452+
set_snmplib_output_options(&glob_snmp_object);
14301453
}
14311454
}
14321455
/* }}} */
@@ -1505,59 +1528,72 @@ PHP_FUNCTION(snmp_set_enum_print)
15051528
}
15061529
/* }}} */
15071530

1508-
/* {{{ Print table index numerically */
1509-
PHP_FUNCTION(snmp_set_numeric_index)
1531+
/* {{{ Set walk option. */
1532+
PHP_FUNCTION(snmp_set_mib_option)
15101533
{
1511-
bool a1;
1534+
zend_long a1, a2;
15121535

1513-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "b", &a1) == FAILURE) {
1536+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &a1, &a2) == FAILURE) {
15141537
RETURN_THROWS();
15151538
}
15161539

1517-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS, (int) a1);
1518-
RETURN_TRUE;
1519-
}
1520-
/* }}} */
1521-
1522-
/* {{{ Print timetick values as integers */
1523-
PHP_FUNCTION(snmp_set_numeric_timeticks)
1524-
{
1525-
bool a1;
1526-
1527-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "b", &a1) == FAILURE) {
1528-
RETURN_THROWS();
1540+
switch (a1) {
1541+
case NETSNMP_DS_LIB_MIB_PARSE_LABEL:
1542+
case NETSNMP_DS_LIB_MIB_COMMENT_TERM:
1543+
case NETSNMP_DS_LIB_MIB_REPLACE:
1544+
netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, a1, (int) a2);
1545+
default:
1546+
zend_argument_value_error(1, "must be an SNMP_MIB_* constant");
1547+
RETURN_THROWS();
15291548
}
1530-
1531-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_NUMERIC_TIMETICKS, (int) a1);
1532-
RETURN_TRUE;
15331549
}
15341550
/* }}} */
15351551

1536-
/* {{{ Use extended table format when printing tables */
1537-
PHP_FUNCTION(snmp_set_extended_index)
1552+
/* {{{ Set the string output format. */
1553+
PHP_FUNCTION(snmp_set_string_output_format)
15381554
{
1539-
bool a1;
1555+
zend_long a1;
15401556

1541-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "b", &a1) == FAILURE) {
1557+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &a1) == FAILURE) {
15421558
RETURN_THROWS();
15431559
}
15441560

1545-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_EXTENDED_INDEX, (int) a1);
1546-
RETURN_TRUE;
1561+
switch (a1) {
1562+
case NETSNMP_STRING_OUTPUT_GUESS:
1563+
case NETSNMP_STRING_OUTPUT_ASCII:
1564+
case NETSNMP_STRING_OUTPUT_HEX:
1565+
netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_STRING_OUTPUT_FORMAT, a1);
1566+
default:
1567+
zend_argument_value_error(1, "must be an SNMP_STRING_OUTPUT_* constant");
1568+
RETURN_THROWS();
1569+
}
15471570
}
15481571
/* }}} */
15491572

1550-
/* {{{ Use extended table format */
1551-
PHP_FUNCTION(snmp_set_dontprint_units)
1573+
/* {{{ Set output format option. */
1574+
PHP_FUNCTION(snmp_set_output_option)
15521575
{
1553-
bool a1;
1576+
zend_long a1, a2;
15541577

1555-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "b", &a1) == FAILURE) {
1578+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lb", &a1, &a2) == FAILURE) {
15561579
RETURN_THROWS();
15571580
}
15581581

1559-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_DONT_PRINT_UNITS, (int) a1);
1560-
RETURN_TRUE;
1582+
switch (a1) {
1583+
case NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS:
1584+
case NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM:
1585+
case NETSNMP_DS_LIB_ESCAPE_QUOTES:
1586+
case NETSNMP_DS_LIB_QUICK_PRINT:
1587+
case NETSNMP_DS_LIB_NUMERIC_TIMETICKS:
1588+
case NETSNMP_DS_LIB_PRINT_HEX_TEXT:
1589+
case NETSNMP_DS_LIB_DONT_PRINT_UNITS:
1590+
case NETSNMP_DS_LIB_PRINT_BARE_VALUE:
1591+
case NETSNMP_DS_LIB_EXTENDED_INDEX:
1592+
netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID, a1, (int) a2);
1593+
default:
1594+
zend_argument_value_error(1, "must be an SNMP_OUTPUT_* constant");
1595+
RETURN_THROWS();
1596+
}
15611597
}
15621598
/* }}} */
15631599

@@ -1686,20 +1722,6 @@ PHP_FUNCTION(snmp_get_valueretrieval)
16861722
}
16871723
/* }}} */
16881724

1689-
/* {{{ Allow underscores in MIBs. */
1690-
PHP_FUNCTION(snmp_mib_allow_underscores)
1691-
{
1692-
bool a1;
1693-
1694-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "b", &a1) == FAILURE) {
1695-
RETURN_THROWS();
1696-
}
1697-
1698-
netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_MIB_PARSE_LABEL, (int) a1);
1699-
RETURN_TRUE;
1700-
}
1701-
/* }}} */
1702-
17031725
/* {{{ Reads and parses a MIB file into the active MIB tree. */
17041726
PHP_FUNCTION(snmp_read_mib)
17051727
{

ext/snmp/snmp.stub.php

Lines changed: 77 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,22 @@
22

33
/** @generate-class-entries */
44

5+
/**
6+
* @var int
7+
* @cvalue NETSNMP_DS_LIB_MIB_PARSE_LABEL
8+
*/
9+
const SNMP_MIB_ALLOW_UNDERSCORES = UNKNOWN;
10+
/**
11+
* @var int
12+
* @cvalue NETSNMP_DS_LIB_MIB_COMMENT_TERM
13+
*/
14+
const SNMP_MIB_COMMENT_TERM = UNKNOWN;
15+
/**
16+
* @var int
17+
* @cvalue NETSNMP_DS_LIB_MIB_REPLACE
18+
*/
19+
const SNMP_MIB_REPLACE = UNKNOWN;
20+
521
/**
622
* @var int
723
* @cvalue NETSNMP_OID_OUTPUT_SUFFIX
@@ -33,6 +49,63 @@
3349
*/
3450
const SNMP_OID_OUTPUT_NONE = UNKNOWN;
3551

52+
/**
53+
* @var int
54+
* @cvalue NETSNMP_DS_LIB_DONT_BREAKDOWN_OIDS
55+
*/
56+
const SNMP_OUTPUT_NUMERIC_INDEX = UNKNOWN;
57+
/**
58+
* @var int
59+
* @cvalue NETSNMP_DS_LIB_PRINT_NUMERIC_ENUM
60+
*/
61+
const SNMP_OUTPUT_ENUM_PRINT = UNKNOWN;
62+
/**
63+
* @var int
64+
* @cvalue NETSNMP_DS_LIB_ESCAPE_QUOTES
65+
*/
66+
const SNMP_OUTPUT_ESCAPE_QUOTES = UNKNOWN;
67+
/**
68+
* @var int
69+
* @cvalue NETSNMP_DS_LIB_QUICK_PRINT
70+
*/
71+
const SNMP_OUTPUT_QUICK_PRINT = UNKNOWN;
72+
/**
73+
* @var int
74+
* @cvalue NETSNMP_DS_LIB_NUMERIC_TIMETICKS
75+
*/
76+
const SNMP_OUTPUT_NUMERIC_TIMETICKS = UNKNOWN;
77+
/**
78+
* @var int
79+
* @cvalue NETSNMP_DS_LIB_PRINT_HEX_TEXT
80+
*/
81+
const SNMP_OUTPUT_PRINT_HEX_TEXT = UNKNOWN;
82+
/**
83+
* @var int
84+
* @cvalue NETSNMP_DS_LIB_DONT_PRINT_UNITS
85+
*/
86+
const SNMP_OUTPUT_DONT_PRINT_UNITS = UNKNOWN;
87+
/**
88+
* @var int
89+
* @cvalue NETSNMP_DS_LIB_EXTENDED_INDEX
90+
*/
91+
const SNMP_OUTPUT_EXTENDED_INDEX = UNKNOWN;
92+
93+
/**
94+
* @var int
95+
* @cvalue NETSNMP_STRING_OUTPUT_GUESS
96+
*/
97+
const SNMP_STRING_OUTPUT_GUESS = UNKNOWN;
98+
/**
99+
* @var int
100+
* @cvalue NETSNMP_STRING_OUTPUT_ASCII
101+
*/
102+
const SNMP_STRING_OUTPUT_ASCII = UNKNOWN;
103+
/**
104+
* @var int
105+
* @cvalue NETSNMP_STRING_OUTPUT_HEX
106+
*/
107+
const SNMP_STRING_OUTPUT_HEX = UNKNOWN;
108+
36109
/**
37110
* @var int
38111
* @cvalue SNMP_VALUE_LIBRARY
@@ -129,15 +202,13 @@ function snmp_set_quick_print(bool $enable): true {}
129202

130203
function snmp_set_enum_print(bool $enable): true {}
131204

132-
function snmp_set_numeric_index(bool $enable): true {}
133-
134-
function snmp_set_numeric_timeticks(bool $enable): true {}
205+
function snmp_set_mib_option(int $option, bool $enable): void {}
135206

136-
function snmp_set_extended_index(bool $enable): true {}
207+
function snmp_set_oid_output_format(int $format): true {}
137208

138-
function snmp_set_dontprint_units(bool $enable): true {}
209+
function snmp_set_output_option(int $option, bool $enable): void {}
139210

140-
function snmp_set_oid_output_format(int $format): true {}
211+
function snmp_set_string_output(int $format): void {}
141212

142213
/** @alias snmp_set_oid_output_format */
143214
function snmp_set_oid_numeric_print(int $format): true {}
@@ -187,8 +258,6 @@ function snmp_set_valueretrieval(int $method): true {}
187258

188259
function snmp_get_valueretrieval(): int {}
189260

190-
function snmp_mib_allow_underscores(bool $enable): true {}
191-
192261
function snmp_read_mib(string $filename): bool {}
193262

194263
class SNMP

0 commit comments

Comments
 (0)