]> granicus.if.org Git - php/commitdiff
* new methods get_errno, get_error to get errno and error string
authorBoris Lytochkin <lytboris@php.net>
Sat, 26 Feb 2011 08:27:26 +0000 (08:27 +0000)
committerBoris Lytochkin <lytboris@php.net>
Sat, 26 Feb 2011 08:27:26 +0000 (08:27 +0000)
    of last SNMP-related error
* formatting markup
* some fixes in max_oids logic: NULL will set it to default value,
    do not allow non-positive user-supplied values
* unit tests for changes

ext/snmp/php_snmp.h
ext/snmp/snmp.c
ext/snmp/tests/snmp-object-errno-errstr.phpt [new file with mode: 0644]
ext/snmp/tests/snmp-object-error.phpt
ext/snmp/tests/snmp-object-properties.phpt
ext/snmp/tests/snmp-object-set_security_error.phpt
ext/snmp/tests/snmp-object.phpt

index 4cda3f8fc871e9e28e0e316b7d6df9c952108412..62d1f2853202cde928d854fbb3143ca465738ea7 100644 (file)
@@ -79,17 +79,21 @@ PHP_METHOD(SNMP, get);
 PHP_METHOD(SNMP, getnext);
 PHP_METHOD(SNMP, walk);
 PHP_METHOD(SNMP, set);
+PHP_METHOD(SNMP, get_errno);
+PHP_METHOD(SNMP, get_error);
 
 typedef struct _php_snmp_object {
-      zend_object zo;
-      struct snmp_session *session;
-      int max_oids;
-      int valueretrieval;
-      int quick_print;
+       zend_object zo;
+       struct snmp_session *session;
+       int max_oids;
+       int valueretrieval;
+       int quick_print;
 #ifdef HAVE_NET_SNMP
-      int enum_print;
-      int oid_output_format;
+       int enum_print;
+       int oid_output_format;
 #endif
+       int snmp_errno;
+       char snmp_errstr[128];
 } php_snmp_object;
 
 
@@ -97,14 +101,21 @@ typedef int (*php_snmp_read_t)(php_snmp_object *snmp_object, zval **retval TSRML
 typedef int (*php_snmp_write_t)(php_snmp_object *snmp_object, zval *newval TSRMLS_DC);
 
 typedef struct _ptp_snmp_prop_handler {
-      const char *name;
-      size_t name_length;
-      php_snmp_read_t read_func;
-      php_snmp_write_t write_func;
+       const char *name;
+       size_t name_length;
+       php_snmp_read_t read_func;
+       php_snmp_write_t write_func;
 } php_snmp_prop_handler;
 
+typedef struct _snmpobjarg {
+       char *oid;
+       char type;
+       char *value;
+
+} snmpobjarg;
+
 ZEND_BEGIN_MODULE_GLOBALS(snmp)
-      int valueretrieval;
+       int valueretrieval;
 ZEND_END_MODULE_GLOBALS(snmp)
 
 #ifdef ZTS
@@ -113,6 +124,9 @@ ZEND_END_MODULE_GLOBALS(snmp)
 #define SNMP_G(v) (snmp_globals.v)
 #endif
 
+#define REGISTER_PDO_CLASS_CONST_LONG(const_name, value) \
+       zend_declare_class_constant_long(php_snmp_get_ce(), const_name, sizeof(const_name)-1, (long)value TSRMLS_CC);
+
 #else
 
 #define snmp_module_ptr NULL
index f139e79ed4ae65f53a42a8daa885746d93deffd2..4db81dd492f40811f88985b5b4b5e57b24103746 100644 (file)
@@ -161,7 +161,11 @@ typedef struct snmp_session php_snmp_session;
        } \
 }
 
-
+#define PHP_SNMP_ERRNO_NOERROR         0
+#define PHP_SNMP_ERRNO_GENERIC         1
+#define PHP_SNMP_ERRNO_TIMEOUT         2
+#define PHP_SNMP_ERRNO_ERROR_IN_REPLY  3
+#define PHP_SNMP_ERRNO_OID_NOT_INCREASING 4
 
 ZEND_DECLARE_MODULE_GLOBALS(snmp)
 static PHP_GINIT_FUNCTION(snmp);
@@ -177,6 +181,11 @@ static zend_object_handlers php_snmp_object_handlers;
 /* Class entries */
 zend_class_entry *php_snmp_class_entry;
 
+zend_class_entry *php_snmp_get_ce()
+{
+       return php_snmp_class_entry;
+}
+
 /* Class object properties */
 static HashTable php_snmp_properties;
 
@@ -409,13 +418,6 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_snmp_class_set_quick_print, 0, 0, 1)
 ZEND_END_ARG_INFO()
 /* }}} */
 
-typedef struct _snmpobjarg {
-       char *oid;
-       char type;
-       char *value;
-
-} snmpobjarg;
-
 struct objid_query {
        int count;
        int offset;
@@ -546,6 +548,39 @@ static zend_object_value php_snmp_object_new(zend_class_entry *class_type TSRMLS
        
 }
 
+/* {{{ php_snmp_error
+ *
+ * Record last SNMP-related error in object
+ *
+ */
+static void php_snmp_error(zval *object, const char *docref TSRMLS_DC, int type, const char *format, ...)
+{
+       va_list args;
+       php_snmp_object *snmp_object;
+
+       if (object) {
+               snmp_object = (php_snmp_object *)zend_object_store_get_object(object TSRMLS_CC);
+               if (type == PHP_SNMP_ERRNO_NOERROR) {
+                       memset(snmp_object->snmp_errstr, 0, sizeof(snmp_object->snmp_errstr));
+               } else {
+                       va_start(args, format);
+                       vsnprintf(snmp_object->snmp_errstr, sizeof(snmp_object->snmp_errstr) - 1, format, args);
+                       va_end(args);
+               }
+               snmp_object->snmp_errno = type;
+       }
+
+       if (type == PHP_SNMP_ERRNO_NOERROR) {
+               return;
+       }
+
+       va_start(args, format);
+       php_verror(docref, "", E_WARNING, format, args TSRMLS_CC);
+       va_end(args);
+}
+
+/* }}} */
+
 /* {{{ php_snmp_getvalue
 *
 * SNMP value to zval converter
@@ -697,6 +732,9 @@ static void php_snmp_internal(INTERNAL_FUNCTION_PARAMETERS, int st,
 
        /* we start with retval=FALSE. If any actual data is aquired, retval will be set to appropriate type */
        RETVAL_FALSE;
+       
+       /* reset errno and errstr */
+       php_snmp_error(getThis(), NULL TSRMLS_CC, PHP_SNMP_ERRNO_NOERROR, "");
 
        if (st & SNMP_CMD_WALK) {
                if (objid_query->count > 1) {
@@ -797,7 +835,7 @@ retry:
                                                }
                                                SNMP_SNPRINT_OBJID(buf, sizeof(buf), vars->name, vars->name_length);
                                                SNMP_SNPRINT_VALUE(buf2, sizeof(buf2), vars->name, vars->name_length, vars);
-                                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error in packet at '%s': %s", buf, buf2);
+                                               php_snmp_error(getThis(), NULL TSRMLS_CC, PHP_SNMP_ERRNO_ERROR_IN_REPLY, "Error in packet at '%s': %s", buf, buf2);
                                                continue;
                                        }
                                        
@@ -838,7 +876,7 @@ retry:
                                        /* OID increase check */
                                        if (st & SNMP_CMD_WALK) {
                                                if (snmp_oid_compare(name, name_length, vars->name, vars->name_length) >= 0) {
-                                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error: OID not increasing: %s",name);
+                                                       php_snmp_error(getThis(), NULL TSRMLS_CC, PHP_SNMP_ERRNO_OID_NOT_INCREASING, "Error: OID not increasing: %s", name);
                                                        keepwalking = 0;
                                                } else {
                                                        memmove((char *)name, (char *)vars->name,vars->name_length * sizeof(oid));
@@ -865,9 +903,9 @@ retry:
                                        }
                                        if (vars) {
                                                SNMP_SNPRINT_OBJID(buf, sizeof(buf), vars->name, vars->name_length);
-                                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error in packet at '%s': %s", buf, snmp_errstring(response->errstat));
+                                               php_snmp_error(getThis(), NULL TSRMLS_CC, PHP_SNMP_ERRNO_ERROR_IN_REPLY, "Error in packet at '%s': %s", buf, snmp_errstring(response->errstat));
                                        } else {
-                                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error in packet at %u object_id: %s", response->errindex, snmp_errstring(response->errstat));
+                                               php_snmp_error(getThis(), NULL TSRMLS_CC, PHP_SNMP_ERRNO_ERROR_IN_REPLY, "Error in packet at %u object_id: %s", response->errindex, snmp_errstring(response->errstat));
                                        }
                                        if (st & (SNMP_CMD_GET | SNMP_CMD_GETNEXT)) { /* cut out bogus OID and retry */
                                                if ((pdu = snmp_fix_pdu(response, ((st & SNMP_CMD_GET) ? SNMP_MSG_GET : SNMP_MSG_GETNEXT) )) != NULL) {
@@ -884,7 +922,7 @@ retry:
                                }
                        }
                } else if (status == STAT_TIMEOUT) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "No response from %s", session->peername);
+                       php_snmp_error(getThis(), NULL TSRMLS_CC, PHP_SNMP_ERRNO_TIMEOUT, "No response from %s", session->peername);
                        if (objid_query->array_output) {
                                zval_dtor(return_value);
                        }
@@ -892,7 +930,7 @@ retry:
                        RETURN_FALSE;
                } else {    /* status == STAT_ERROR */
                        snmp_error(ss, NULL, NULL, &err);
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Fatal error: %s", err);
+                       php_snmp_error(getThis(), NULL TSRMLS_CC, PHP_SNMP_ERRNO_GENERIC, "Fatal error: %s", err);
                        free(err);
                        if (objid_query->array_output) {
                                zval_dtor(return_value);
@@ -1814,6 +1852,34 @@ PHP_METHOD(snmp, set_security)
 }
 /* }}} */
 
+/* {{{ proto long SNMP::get_errno() 
+       Get last error code number */
+PHP_METHOD(snmp, get_errno)
+{
+       php_snmp_object *snmp_object;
+       zval *object = getThis();
+
+       snmp_object = (php_snmp_object *)zend_object_store_get_object(object TSRMLS_CC);
+
+       RETVAL_LONG(snmp_object->snmp_errno);
+       return;
+}
+/* }}} */
+
+/* {{{ proto long SNMP::error() 
+       Get last error message */
+PHP_METHOD(snmp, get_error)
+{
+       php_snmp_object *snmp_object;
+       zval *object = getThis();
+
+       snmp_object = (php_snmp_object *)zend_object_store_get_object(object TSRMLS_CC);
+
+       RETVAL_STRING(snmp_object->snmp_errstr, 1);
+       return;
+}
+/* }}} */
+
 /* {{{ */
 void php_snmp_add_property(HashTable *h, const char *name, size_t name_length, php_snmp_read_t read_func, php_snmp_write_t write_func TSRMLS_DC)
 {
@@ -2053,7 +2119,11 @@ static int php_snmp_read_info(php_snmp_object *snmp_object, zval **retval TSRMLS
 static int php_snmp_read_max_oids(php_snmp_object *snmp_object, zval **retval TSRMLS_DC)
 {
        MAKE_STD_ZVAL(*retval);
-       ZVAL_LONG(*retval, snmp_object->max_oids);
+       if (snmp_object->max_oids > 0) {
+               ZVAL_LONG(*retval, snmp_object->max_oids);
+       } else {
+               ZVAL_NULL(*retval);
+       }
        return SUCCESS;
 }
 /* }}} */
@@ -2109,6 +2179,12 @@ static int php_snmp_write_max_oids(php_snmp_object *snmp_object, zval *newval TS
 {
        zval ztmp;
        int ret = SUCCESS;
+
+       if (Z_TYPE_P(newval) == IS_NULL) {
+               snmp_object->max_oids = 0;
+               return ret;
+       }
+
        if (Z_TYPE_P(newval) != IS_LONG) {
                ztmp = *newval;
                zval_copy_ctor(&ztmp);
@@ -2116,7 +2192,11 @@ static int php_snmp_write_max_oids(php_snmp_object *snmp_object, zval *newval TS
                newval = &ztmp;
        }
 
-       snmp_object->max_oids = Z_LVAL_P(newval);
+       if (Z_LVAL_P(newval) > 0) {
+               snmp_object->max_oids = Z_LVAL_P(newval);
+       } else {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "max_oids should be positive integer or NULL, got %ld", Z_LVAL_P(newval));
+       }
        
        if (newval == &ztmp) {
                zval_dtor(newval);
@@ -2131,6 +2211,7 @@ static int php_snmp_write_valueretrieval(php_snmp_object *snmp_object, zval *new
 {
        zval ztmp;
        int ret = SUCCESS;
+
        if (Z_TYPE_P(newval) != IS_LONG) {
                ztmp = *newval;
                zval_copy_ctor(&ztmp);
@@ -2244,6 +2325,8 @@ static zend_function_entry php_snmp_class_methods[] = {
        PHP_ME(snmp,     getnext,                       arginfo_snmp_get,               ZEND_ACC_PUBLIC)
        PHP_ME(snmp,     walk,                          arginfo_snmp_walk,              ZEND_ACC_PUBLIC)
        PHP_ME(snmp,     set,                           arginfo_snmp_set,               ZEND_ACC_PUBLIC)
+       PHP_ME(snmp,     get_errno,                     arginfo_snmp_void,              ZEND_ACC_PUBLIC)
+       PHP_ME(snmp,     get_error,                     arginfo_snmp_void,              ZEND_ACC_PUBLIC)
 
        PHP_MALIAS(snmp, __construct,   open,           arginfo_snmp_open,              ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
        {NULL, NULL, NULL}
@@ -2305,34 +2388,40 @@ PHP_MINIT_FUNCTION(snmp)
        PHP_SNMP_ADD_PROPERTIES(&php_snmp_properties, php_snmp_property_entries);
 
 #ifdef HAVE_NET_SNMP
-       REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_SUFFIX", NETSNMP_OID_OUTPUT_SUFFIX, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_MODULE", NETSNMP_OID_OUTPUT_MODULE, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_FULL", NETSNMP_OID_OUTPUT_FULL, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NUMERIC", NETSNMP_OID_OUTPUT_NUMERIC, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_UCD", NETSNMP_OID_OUTPUT_UCD, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NONE", NETSNMP_OID_OUTPUT_NONE, CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_SUFFIX",        NETSNMP_OID_OUTPUT_SUFFIX,      CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_MODULE",        NETSNMP_OID_OUTPUT_MODULE,      CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_FULL",          NETSNMP_OID_OUTPUT_FULL,        CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NUMERIC",       NETSNMP_OID_OUTPUT_NUMERIC,     CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_UCD",           NETSNMP_OID_OUTPUT_UCD,         CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_OID_OUTPUT_NONE",          NETSNMP_OID_OUTPUT_NONE,        CONST_CS | CONST_PERSISTENT);
 #endif
 
-       REGISTER_LONG_CONSTANT("SNMP_VALUE_LIBRARY", SNMP_VALUE_LIBRARY, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_VALUE_PLAIN", SNMP_VALUE_PLAIN, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_VALUE_OBJECT", SNMP_VALUE_OBJECT, CONST_CS | CONST_PERSISTENT);
-
-       REGISTER_LONG_CONSTANT("SNMP_BIT_STR", ASN_BIT_STR, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_OCTET_STR", ASN_OCTET_STR, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_OPAQUE", ASN_OPAQUE, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_NULL", ASN_NULL, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_OBJECT_ID", ASN_OBJECT_ID, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_IPADDRESS", ASN_IPADDRESS, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_COUNTER", ASN_GAUGE, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_UNSIGNED", ASN_UNSIGNED, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_TIMETICKS", ASN_TIMETICKS, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_UINTEGER", ASN_UINTEGER, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_INTEGER", ASN_INTEGER, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_COUNTER64", ASN_COUNTER64, CONST_CS | CONST_PERSISTENT);
-
-       REGISTER_LONG_CONSTANT("SNMP_VERSION_1", SNMP_VERSION_1, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_VERSION_2c", SNMP_VERSION_2c, CONST_CS | CONST_PERSISTENT);
-       REGISTER_LONG_CONSTANT("SNMP_VERSION_3", SNMP_VERSION_3, CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_VALUE_LIBRARY",    SNMP_VALUE_LIBRARY,     CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_VALUE_PLAIN",      SNMP_VALUE_PLAIN,       CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_VALUE_OBJECT",     SNMP_VALUE_OBJECT,      CONST_CS | CONST_PERSISTENT);
+
+       REGISTER_LONG_CONSTANT("SNMP_BIT_STR",          ASN_BIT_STR,    CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_OCTET_STR",        ASN_OCTET_STR,  CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_OPAQUE",           ASN_OPAQUE,     CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_NULL",             ASN_NULL,       CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_OBJECT_ID",        ASN_OBJECT_ID,  CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_IPADDRESS",        ASN_IPADDRESS,  CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_COUNTER",          ASN_GAUGE,      CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_UNSIGNED",         ASN_UNSIGNED,   CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_TIMETICKS",        ASN_TIMETICKS,  CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_UINTEGER",         ASN_UINTEGER,   CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_INTEGER",          ASN_INTEGER,    CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_COUNTER64",        ASN_COUNTER64,  CONST_CS | CONST_PERSISTENT);
+
+       REGISTER_LONG_CONSTANT("SNMP_VERSION_1",        SNMP_VERSION_1,         CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_VERSION_2c",       SNMP_VERSION_2c,        CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SNMP_VERSION_3",        SNMP_VERSION_3,         CONST_CS | CONST_PERSISTENT);
+
+       REGISTER_PDO_CLASS_CONST_LONG("ERRNO_NOERROR",                  (long)PHP_SNMP_ERRNO_NOERROR);
+       REGISTER_PDO_CLASS_CONST_LONG("ERRNO_GENERIC",                  (long)PHP_SNMP_ERRNO_GENERIC);
+       REGISTER_PDO_CLASS_CONST_LONG("ERRNO_TIMEOUT",                  (long)PHP_SNMP_ERRNO_TIMEOUT);
+       REGISTER_PDO_CLASS_CONST_LONG("ERRNO_ERROR_IN_REPLY",           (long)PHP_SNMP_ERRNO_ERROR_IN_REPLY);
+       REGISTER_PDO_CLASS_CONST_LONG("ERRNO_OID_NOT_INCREASING",       (long)PHP_SNMP_ERRNO_OID_NOT_INCREASING);
 
        return SUCCESS;
 }
diff --git a/ext/snmp/tests/snmp-object-errno-errstr.phpt b/ext/snmp/tests/snmp-object-errno-errstr.phpt
new file mode 100644 (file)
index 0000000..7695881
--- /dev/null
@@ -0,0 +1,63 @@
+--TEST--                                 
+OO API: get_errno & get_error functions
+--CREDITS--
+Boris Lytochkin
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__).'/skipif.inc');
+?>
+--FILE--
+<?php
+require_once(dirname(__FILE__).'/snmp_include.inc');
+
+//EXPECTF format is quickprint OFF
+snmp_set_enum_print(false);
+snmp_set_quick_print(false);
+snmp_set_valueretrieval(SNMP_VALUE_PLAIN);
+snmp_set_oid_output_format(SNMP_OID_OUTPUT_FULL);
+
+echo "SNMP::ERRNO_NOERROR\n";
+$session = new SNMP(SNMP_VERSION_2c, $hostname, $community, $timeout, $retries);
+var_dump(@$session->get('.1.3.6.1.2.1.1.1.0'));
+var_dump($session->get_errno() == SNMP::ERRNO_NOERROR);
+var_dump($session->get_error());
+$session->close();
+
+echo "SNMP::ERRNO_TIMEOUT\n";
+$session = new SNMP(SNMP_VERSION_2c, $hostname, 'timeout_community_432', $timeout, $retries);
+$session->valueretrieval = SNMP_VALUE_LIBRARY;
+var_dump(@$session->get('.1.3.6.1.2.1.1.1.0'));
+var_dump($session->get_errno() == SNMP::ERRNO_TIMEOUT);
+var_dump($session->get_error());
+$session->close();
+echo "SNMP::ERRNO_ERROR_IN_REPLY\n";
+$session = new SNMP(SNMP_VERSION_2c, $hostname, $community, $timeout, $retries);
+var_dump(@$session->get('.1.3.6.1.2.1.1.1.110'));
+var_dump($session->get_errno() == SNMP::ERRNO_ERROR_IN_REPLY);
+var_dump($session->get_error());
+$session->close();
+echo "SNMP::ERRNO_GENERIC\n";
+$session = new SNMP(SNMP_VERSION_3, $hostname, 'somebogususer', $timeout, $retries);
+$session->set_security('authPriv', 'MD5', $auth_pass, 'AES', $priv_pass);
+var_dump(@$session->get('.1.3.6.1.2.1.1.1.0'));
+var_dump($session->get_errno() == SNMP::ERRNO_GENERIC);
+var_dump($session->get_error());
+$session->close();
+?>
+--EXPECTF--
+SNMP::ERRNO_NOERROR
+%string|unicode%(%d) "%s"
+bool(true)
+%string|unicode%(0) ""
+SNMP::ERRNO_TIMEOUT
+bool(false)
+bool(true)
+%string|unicode%(%d) "No response from %s"
+SNMP::ERRNO_ERROR_IN_REPLY
+bool(false)
+bool(true)
+%string|unicode%(%d) "Error in packet %s"
+SNMP::ERRNO_GENERIC
+bool(false)
+bool(true)
+%string|unicode%(%d) "Fatal error: Unknown user name"
\ No newline at end of file
index 820ca2cbef3f2233fbf855821a144e37a9f32da2..5b771124089d07c20126d0ffad024eabe3cebd73 100644 (file)
@@ -1,5 +1,5 @@
 --TEST--                                 
-Errors in SNMP session-wise functions 
+OO API: Generic errors
 --CREDITS--
 Boris Lytochkin
 --SKIPIF--
@@ -51,6 +51,10 @@ var_dump($session->walk('.1.3.6.1.2.1.1', 0, ''));
 var_dump($session->get());
 var_dump($session->set());
 
+var_dump($session->max_oids);
+$session->max_oids = "ttt";
+$session->max_oids = 0;
+var_dump($session->max_oids);
 ?>
 --EXPECTF--
 SNMP::__construct() expects at least 3 parameters, 2 given
@@ -82,3 +86,9 @@ bool(false)
 
 Warning: SNMP::set() expects exactly 3 parameters, 0 given in %s on line %d
 bool(false)
+NULL
+
+Warning: main(): max_oids should be positive integer or NULL, got 0 in %s on line %d
+
+Warning: main(): max_oids should be positive integer or NULL, got 0 in %s on line %d
+NULL
\ No newline at end of file
index a67bf998e036a42c4aba913d21e2555c34509f77..6610d080012c1fb25eea4f2fb572c320a233eec5 100644 (file)
@@ -59,6 +59,9 @@ var_dump($session->oid_output_format);
 
 $session->info = array("blah" => 2);
 var_dump($session->info);
+
+$session->max_oids = NULL;
+var_dump($session->max_oids);
 ?>
 --EXPECTF--
 Check working
@@ -75,7 +78,7 @@ object(SNMP)#%d (%d) {
     int(%d)
   }
   ["max_oids"]=>
-  int(0)
+  NULL
   ["valueretrieval"]=>
   int(1)
   ["quick_print"]=>
@@ -183,4 +186,5 @@ array(4) {
   int(%i)
   ["retries"]=>
   int(%d)
-}
\ No newline at end of file
+}
+NULL
\ No newline at end of file
index c6cadb123b8309c3c65749f2471537c2a32206ac..596fb5322069acbb07f5aaa7cf8a505b0997a297 100644 (file)
@@ -1,5 +1,5 @@
 --TEST--                                 
-OO API SNMP::set_security (errors)
+OO API: SNMP::set_security (errors)
 --CREDITS--
 Boris Lytochkin
 --SKIPIF--
index c20be128769688b88a0545a0847f49ba75a8dcfb..70bc86a6c9155c624adfee6637a9fd6b5b85eace 100644 (file)
@@ -57,6 +57,16 @@ var_dump(key($z));
 var_dump(array_shift($z));
 var_dump($session->close());
 
+echo "WALK multiple on single OID, max_oids set to 30\n";
+$session = new SNMP(SNMP_VERSION_2c, $hostname, $community, $timeout, $retries);
+$session->max_oids = 30;
+$z = $session->walk('.1.3.6.1.2.1.1');
+var_dump(gettype($z));
+var_dump(count($z));
+var_dump(key($z));
+var_dump(array_shift($z));
+var_dump($session->close());
+
 echo "SNMPv3 (default security settings)\n";
 $session = new SNMP(SNMP_VERSION_3, $hostname, $user_noauth, $timeout, $retries);
 #$session->set_security($user_noauth, 'noAuthNoPriv', '', '', '', '', '', '');
@@ -134,6 +144,12 @@ int(%d)
 string(%d) "%S"
 string(%d) "%S"
 bool(true)
+WALK multiple on single OID, max_oids set to 30
+string(5) "array"
+int(%d)
+string(%d) "%S"
+string(%d) "%S"
+bool(true)
 SNMPv3 (default security settings)
 string(%d) "%S"
 string(%d) "%S"