felipe          Wed Aug 13 14:05:56 2008 UTC

  Modified files:              
    /php-src/ext/snmp   snmp.c 
  Log:
  - New parameter parsing API
  
http://cvs.php.net/viewvc.cgi/php-src/ext/snmp/snmp.c?r1=1.117&r2=1.118&diff_format=u
Index: php-src/ext/snmp/snmp.c
diff -u php-src/ext/snmp/snmp.c:1.117 php-src/ext/snmp/snmp.c:1.118
--- php-src/ext/snmp/snmp.c:1.117       Tue Jul  1 19:14:28 2008
+++ php-src/ext/snmp/snmp.c     Wed Aug 13 14:05:55 2008
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: snmp.c,v 1.117 2008/07/01 19:14:28 felipe Exp $ */
+/* $Id: snmp.c,v 1.118 2008/08/13 14:05:55 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -785,60 +785,63 @@
 */
 static void php_snmp(INTERNAL_FUNCTION_PARAMETERS, int st, int version) 
 {
-       zval **a1, **a2, **a3, **a4, **a5, **a6, **a7;
+       char *a1, **a2, **a3;
+       int a1_len, a2_len, a3_len;
+       zval **a4 = NULL, **a5 = NULL;
+       long a6 = 0, a7 = 0;
        struct snmp_session session;
-       long timeout=SNMP_DEFAULT_TIMEOUT;
-       long retries=SNMP_DEFAULT_RETRIES;
-       int myargc = ZEND_NUM_ARGS();
+       long timeout = SNMP_DEFAULT_TIMEOUT;
+       long retries = SNMP_DEFAULT_RETRIES;
        char type = (char) 0;
        char *value = (char *) 0;
        char hostname[MAX_NAME_LEN];
        int remote_port = 161;
        char *pptr;
+       int argc = ZEND_NUM_ARGS();
 
-       if (myargc < 3 || myargc > 7 ||
-               zend_get_parameters_ex(myargc, &a1, &a2, &a3, &a4, &a5, &a6, 
&a7) == FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (st == SNMP_CMD_SET) {
+               if (zend_parse_parameters(argc TSRMLS_CC, "sssZZ|ll", &a1, 
&a1_len, &a2, &a2_len, &a3, &a3_len, &a4, &a5, &a6, &a7) == FAILURE) {
+                       return;
+               }
+       } else {
+               /* SNMP_CMD_GET
+                * SNMP_CMD_GETNEXT
+                * SNMP_CMD_WALK
+                * SNMP_CMD_REALWALK
+                */
+               if (zend_parse_parameters(argc TSRMLS_CC, "sss|ZZ", &a1, 
&a1_len, &a2, &a2_len, &a3, &a3_len, &a4, &a5) == FAILURE) {
+                       return;
+               }
        }
-
-       convert_to_string_ex(a1);
-       convert_to_string_ex(a2);
-       convert_to_string_ex(a3);
        
        if (st == SNMP_CMD_SET) {
-               if (myargc < 5) {
-                       WRONG_PARAM_COUNT;
-               }
-
                convert_to_string_ex(a4);
                convert_to_string_ex(a5);
 
-               if(myargc > 5) {
-                       convert_to_long_ex(a6);
-                       timeout = Z_LVAL_PP(a6);
+               if (argc > 5) {
+                       timeout = a6;
                }
 
-               if(myargc > 6) {
-                       convert_to_long_ex(a7);
-                       retries = Z_LVAL_PP(a7);
+               if (argc > 6) {
+                       retries = a7;
                }
 
                type = Z_STRVAL_PP(a4)[0];
                value = Z_STRVAL_PP(a5);
        } else {
-               if(myargc > 3) {
+               if (argc > 3) {
                        convert_to_long_ex(a4);
                        timeout = Z_LVAL_PP(a4);
                }
 
-               if(myargc > 4) {
+               if (argc > 4) {
                        convert_to_long_ex(a5);
                        retries = Z_LVAL_PP(a5);
                }
        }
 
        snmp_sess_init(&session);
-       strlcpy(hostname, Z_STRVAL_PP(a1), sizeof(hostname));
+       strlcpy(hostname, a1, sizeof(hostname));
        if ((pptr = strchr (hostname, ':'))) {
                remote_port = strtol (pptr + 1, NULL, 0);
        }
@@ -853,17 +856,17 @@
        * memory it did not allocate
        */
 #ifdef UCD_SNMP_HACK
-       session.community = (u_char *)strdup(Z_STRVAL_PP(a2)); /* memory freed 
by SNMP library, strdup NOT estrdup */
+       session.community = (u_char *)strdup(a2); /* memory freed by SNMP 
library, strdup NOT estrdup */
 #else
-       session.community = (u_char *)Z_STRVAL_PP(a2);
+       session.community = (u_char *)a2;
 #endif
-       session.community_len = Z_STRLEN_PP(a2);
+       session.community_len = a2_len;
        session.retries = retries;
        session.timeout = timeout;
        
        session.authenticator = NULL;
 
-       php_snmp_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU, st, &session, 
Z_STRVAL_PP(a3), type, value);
+       php_snmp_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU, st, &session, a3, 
type, value);
 }
 /* }}} */
 
@@ -919,10 +922,9 @@
    Return all objects including their respective object id withing the 
specified one */
 PHP_FUNCTION(snmp_set_quick_print)
 {
-       int argc = ZEND_NUM_ARGS();
        long a1;
 
-       if (zend_parse_parameters(argc TSRMLS_CC, "l", &a1) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &a1) == 
FAILURE) {
                return;
        }
 
@@ -939,10 +941,9 @@
    Return all values that are enums with their enum value instead of the raw 
integer */
 PHP_FUNCTION(snmp_set_enum_print)
 {
-       int argc = ZEND_NUM_ARGS();
        long a1;
 
-       if (zend_parse_parameters(argc TSRMLS_CC, "l", &a1) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &a1) == 
FAILURE) {
                return;
        }
 
@@ -954,10 +955,9 @@
    Set the OID output format. */
 PHP_FUNCTION(snmp_set_oid_output_format)
 {
-       int argc = ZEND_NUM_ARGS();
        long a1;
 
-       if (zend_parse_parameters(argc TSRMLS_CC, "l", &a1) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &a1) == 
FAILURE) {
                return;
        }
 
@@ -1211,20 +1211,35 @@
 */
 static void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)
 {
-       zval **a1, **a2, **a3, **a4, **a5, **a6, **a7, **a8, **a9, **a10, 
**a11, **a12;
+       zval **a9 = NULL, **a10 = NULL;
+       char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;
+       int a1_len, a2_len, a3_len, a4_len, a5_len, a6_len, a7_len, a8_len;
+       long a11 = 0, a12 = 0;
        struct snmp_session session;
-       long timeout=SNMP_DEFAULT_TIMEOUT;
-       long retries=SNMP_DEFAULT_RETRIES;
-       int myargc = ZEND_NUM_ARGS();
+       long timeout = SNMP_DEFAULT_TIMEOUT;
+       long retries = SNMP_DEFAULT_RETRIES;
        char type = (char) 0;
        char *value = (char *) 0;
        char hostname[MAX_NAME_LEN];
        int remote_port = 161;
        char *pptr;
-
-       if (myargc < 8 || myargc > 12 ||
-               zend_get_parameters_ex(myargc, &a1, &a2, &a3, &a4, &a5, &a6, 
&a7, &a8, &a9, &a10, &a11, &a12) == FAILURE) {
-               WRONG_PARAM_COUNT;
+       int argc = ZEND_NUM_ARGS();
+       
+       if (st == SNMP_CMD_SET) {       
+               if (zend_parse_parameters(argc TSRMLS_CC, "ssssssssZZ|ll", &a1, 
&a1_len, &a2, &a2_len, &a3, &a3_len,
+                       &a4, &a4_len, &a5, &a5_len, &a6, &a6_len, &a7, &a7_len, 
&a8, &a8_len, &a9, &a10, &a11, &a12) == FAILURE) {
+                       return;
+               }
+       } else {
+               /* SNMP_CMD_GET
+                * SNMP_CMD_GETNEXT
+                * SNMP_CMD_WALK
+                * SNMP_CMD_REALWALK
+                */
+               if (zend_parse_parameters(argc TSRMLS_CC, "ssssssss|ZZ", &a1, 
&a1_len, &a2, &a2_len, &a3, &a3_len,
+                       &a4, &a4_len, &a5, &a5_len, &a6, &a6_len, &a7, &a7_len, 
&a8, &a8_len, &a9, &a10) == FAILURE) {
+                       return;
+               }
        }
 
        snmp_sess_init(&session);
@@ -1232,80 +1247,66 @@
        session.version = SNMP_VERSION_3;
 
        /* Reading the hostname and its optional non-default port number */
-       convert_to_string_ex(a1);
-       strlcpy(hostname, Z_STRVAL_PP(a1), sizeof(hostname));
-       if ((pptr = strchr (hostname, ':'))) {
-               remote_port = strtol (pptr + 1, NULL, 0);
+       strlcpy(hostname, a1, sizeof(hostname));
+       if ((pptr = strchr(hostname, ':'))) {
+               remote_port = strtol(pptr + 1, NULL, 0);
        }
        session.peername = hostname;
        session.remote_port = remote_port;
 
        /* Setting the security name. */
-       convert_to_string_ex(a2);
-       if (netsnmp_session_set_sec_name(&session, Z_STRVAL_PP(a2))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could net set 
security name: %s", Z_STRVAL_PP(a2));
+       if (netsnmp_session_set_sec_name(&session, a2)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could net set 
security name: %s", a2);
                RETURN_FALSE;
        }
 
        /* Setting the security level. */
-       convert_to_string_ex(a3);
-       if (netsnmp_session_set_sec_level(&session, Z_STRVAL_PP(a3) TSRMLS_CC)) 
{
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid security 
level: %s", Z_STRVAL_PP(a3));
+       if (netsnmp_session_set_sec_level(&session, a3 TSRMLS_CC)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid security 
level: %s", a3);
                RETURN_FALSE;
        }
 
        /* Setting the authentication protocol. */
-       convert_to_string_ex(a4);
-       if (netsnmp_session_set_auth_protocol(&session, Z_STRVAL_PP(a4) 
TSRMLS_CC)) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid 
authentication protocol: %s", Z_STRVAL_PP(a4));
+       if (netsnmp_session_set_auth_protocol(&session, a4 TSRMLS_CC)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid 
authentication protocol: %s", a4);
                RETURN_FALSE;
        }
 
        /* Setting the authentication passphrase. */
-       convert_to_string_ex(a5);
-       if (netsnmp_session_gen_auth_key(&session, Z_STRVAL_PP(a5) TSRMLS_CC)) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not generate 
key for authentication pass phrase: %s", Z_STRVAL_PP(a4));
+       if (netsnmp_session_gen_auth_key(&session, a5 TSRMLS_CC)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not generate 
key for authentication pass phrase: %s", a5);
                RETURN_FALSE;
        }
 
        /* Setting the security protocol. */
-       convert_to_string_ex(a6);
-       if (netsnmp_session_set_sec_protocol(&session, Z_STRVAL_PP(a6) 
TSRMLS_CC) &&
-                       (0 != strlen(Z_STRVAL_PP(a6)))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid security 
protocol: %s", Z_STRVAL_PP(a6));
+       if (netsnmp_session_set_sec_protocol(&session, a6 TSRMLS_CC) && a6_len) 
{
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid security 
protocol: %s", a6);
                RETURN_FALSE;
        }
 
        /* Setting the security protocol passphrase. */
-       convert_to_string_ex(a7);
-       if (netsnmp_session_gen_sec_key(&session, Z_STRVAL_PP(a7) TSRMLS_CC) &&
-                                                       (0 != 
strlen(Z_STRVAL_PP(a7)))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not generate 
key for security pass phrase: %s", Z_STRVAL_PP(a7));
+       if (netsnmp_session_gen_sec_key(&session, a7 TSRMLS_CC) && a7_len) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not generate 
key for security pass phrase: %s", a7);
                RETURN_FALSE;
        }
 
        if (st == SNMP_CMD_SET) {
-               if (myargc < 10) {
-                       WRONG_PARAM_COUNT;
+               if (argc > 10) {
+                       timeout = a11;
                }
-               if (myargc > 10) {
-                       convert_to_long_ex(a11);
-                       timeout = Z_LVAL_PP(a11);
-               }
-               if (myargc > 11) {
-                       convert_to_long_ex(a12);
-                       retries = Z_LVAL_PP(a12);
+               if (argc > 11) {
+                       retries = a12;
                }
                convert_to_string_ex(a9);
                convert_to_string_ex(a10);
                type = Z_STRVAL_PP(a9)[0];
                value = Z_STRVAL_PP(a10);
        } else {
-               if (myargc > 8) {
+               if (argc > 8) {
                        convert_to_long_ex(a9);
                        timeout = Z_LVAL_PP(a9);
                }
-               if (myargc > 9) {
+               if (argc > 9) {
                        convert_to_long_ex(a10);
                        retries = Z_LVAL_PP(a10);
                }
@@ -1314,7 +1315,7 @@
        session.retries = retries;
        session.timeout = timeout;
 
-       php_snmp_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU, st, &session, 
Z_STRVAL_PP(a8), type, value);
+       php_snmp_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU, st, &session, a8, 
type, value);
 }
 /* }}} */
 
@@ -1358,23 +1359,18 @@
 }
 /* }}} */
 
-/* {{{ proto int snmp_set_valueretrieval(int method)
+/* {{{ proto void snmp_set_valueretrieval(int method)
    Specify the method how the SNMP values will be returned */
 PHP_FUNCTION(snmp_set_valueretrieval)
 {
-       zval **method;
+       long method;
 
-       if (ZEND_NUM_ARGS() != 1 ||
-               zend_get_parameters_ex(ZEND_NUM_ARGS(), &method) == FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &method) == 
FAILURE) {
+               return;
        }
 
-       convert_to_long_ex(method);
-
-       if ((Z_LVAL_PP(method) == SNMP_VALUE_LIBRARY) ||
-           (Z_LVAL_PP(method) == SNMP_VALUE_PLAIN) ||
-           (Z_LVAL_PP(method) == SNMP_VALUE_OBJECT)) {
-               SNMP_G(valueretrieval) = Z_LVAL_PP(method);
+       if ((method == SNMP_VALUE_LIBRARY) || (method == SNMP_VALUE_PLAIN) || 
(method == SNMP_VALUE_OBJECT)) {
+               SNMP_G(valueretrieval) = method;
        }
 }
 /* }}} */
@@ -1391,21 +1387,19 @@
    Reads and parses a MIB file into the active MIB tree. */
 PHP_FUNCTION(snmp_read_mib)
 {
-       zval **filename;
+       char *filename;
+       int filename_len;
 
-       if (ZEND_NUM_ARGS() != 1 ||
-               zend_get_parameters_ex(ZEND_NUM_ARGS(), &filename) == FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, 
&filename_len) == FAILURE) {
+               return;
        }
 
-       convert_to_string_ex(filename);
-
        /* Prevent read_mib() from printing any errors. */
        snmp_disable_stderrlog();
        
-       if (!read_mib(Z_STRVAL_PP(filename))) {
+       if (!read_mib(filename)) {
                char *error = strerror(errno);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error while 
reading MIB file '%s': %s", Z_STRVAL_PP(filename), error);
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error while 
reading MIB file '%s': %s", filename, error);
                RETURN_FALSE;
        }
        RETURN_TRUE;

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to