summaryrefslogtreecommitdiff
path: root/ext/ccvs/ccvs.c
diff options
context:
space:
mode:
authorBrendan W. McAdams <bmcadams@php.net>2000-08-08 22:36:56 +0000
committerBrendan W. McAdams <bmcadams@php.net>2000-08-08 22:36:56 +0000
commitf3b757eeada296b30626f63c553e529b62dd4683 (patch)
tree5f1a102d1d1e57c21c731bea259b0b1dca170785 /ext/ccvs/ccvs.c
parent472c727186dad9a283c384e7b8146f370708411b (diff)
downloadphp-git-f3b757eeada296b30626f63c553e529b62dd4683.tar.gz
First commit of these files. We have had them working for about 3 weeks, very well, as a DL. The straight compile-into PHP support should work fine; I've got it compiling on my Slackware 7 i386 box with Apache 1.3.12 + mod_ssl. Documentation, module info and example code are forthcoming.
Diffstat (limited to 'ext/ccvs/ccvs.c')
-rw-r--r--ext/ccvs/ccvs.c469
1 files changed, 469 insertions, 0 deletions
diff --git a/ext/ccvs/ccvs.c b/ext/ccvs/ccvs.c
new file mode 100644
index 0000000000..31e9a7d028
--- /dev/null
+++ b/ext/ccvs/ccvs.c
@@ -0,0 +1,469 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP version 4.0 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 2.02 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | http://www.php.net/license/2_02.txt. |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Brendan W. McAdams <brendan@plexmedia.com> |
+ | Doug DeJulio <ddj@redhat.com> |
+ +----------------------------------------------------------------------+
+ */
+/*
+* cvvs.c $Revision$ - PHP4 Interface to the RedHat CCVS API
+* -------
+* Interfaces RedHat's CCVS [Credit Card Verification System] <http://www.redhat.com/products/ccvs/>
+* This code is ported from an original php3 interface written by RedHat's Doug DeJulio <ddj@redhat.com>
+* The code was subsequently ported to the Zend API by Brendan W. McAdams <brendan@plexmedia.com>
+* -------
+*/
+
+/*
+* Code started on 2000.07.24@09.04.EST by Brendan W. McAdams <brendan@plexmedia.com>
+* $Revision$
+*/
+
+static char const cvsid[] = "$Id$";
+
+#include <php.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ccvs.h>
+
+/* Full Functions (The actual CCVS functions and any internal php hooked functions such as MINFO) */
+
+ZEND_FUNCTION(ccvs_init) /* cv_init() */
+{
+ zval **name;
+ void *vsess;
+ char *p;
+
+ if ((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &name) != SUCCESS))
+ /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(name);
+
+ vsess = cv_init((*name)->value.str.val);
+
+ /*
+ * -- In the case that we don't run error checking on the return value... --
+ * On 32 bit systems a failure of the cv_init call returns 0,0,0,0 ; on 64 bit systems its 0,0,0,0,0,0,0,0
+ * This unconsistent error (not to mention a string of comma seperated zeros in and of itself) is hard to
+ * Trap for in PHP (or any language). However, we can also grab cv_init to return CV_SESS_BAD on
+ * failure at the C API level, and return a set, fixed error code to the user which the user then knows to
+ * trap for... e.g. a NULL Value which PHP can then trap by:
+ * if (!($string = cv_init($config)) { or some such...
+ */
+
+ if (vsess == CV_SESS_BAD) /* if the cv_init() call failed... */
+ {
+
+ p = ""; /* set p, the value we will return, to NULL */
+
+ }
+ else /* we got a valid session returned, which means it worked */
+ {
+
+ p = hks_ptr_ptrtostring(vsess); /* Convert the (void*) into a string representation. */
+
+ }
+
+ RETVAL_STRING(p, 1);
+
+ free(p);
+ return;
+}
+
+ZEND_FUNCTION(ccvs_done) /* cv_done() */
+{
+ zval **sess;
+ void *vsess;
+
+ if ((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &sess) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(sess);
+
+ /* Convert from the string representation back to a (void*) */
+ vsess = hks_ptr_stringtoptr((*sess)->value.str.val);
+ cv_done(vsess);
+
+ RETURN_STRING("OK", 1);
+}
+
+ZEND_FUNCTION(ccvs_new) /* cv_new() */
+{
+ zval **psess;
+ zval **pinvoice;
+ void *sess;
+ char *invoice;
+ int r;
+
+ if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+
+ convert_to_string_ex(pinvoice);
+ invoice = (*pinvoice)->value.str.val;
+
+ r = cv_new(sess, invoice);
+
+ RETURN_STRING(cv_ret2str(r), 1);
+}
+
+ZEND_FUNCTION(ccvs_add) /* cv_add() */
+{
+ zval **psess;
+ zval **pinvoice;
+ zval **pargtype;
+ zval **pargval;
+ void *sess;
+ char *invoice;
+ int argtype;
+ char *argval;
+ register int r;
+
+ if ((ZEND_NUM_ARGS() != 4) || (zend_get_parameters_ex(4, &psess, &pinvoice, &pargtype, &pargval) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ /* Get meaningful arguments. */
+ convert_to_string_ex(psess);
+ convert_to_string_ex(pinvoice);
+ convert_to_string_ex(pargtype);
+ convert_to_string_ex(pargval);
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+ invoice = (*pinvoice)->value.str.val;
+ argtype = cv_str2arg((*pargtype)->value.str.val);
+ argval = (*pargval)->value.str.val;
+
+ r = cv_add(sess, invoice, argtype, argval);
+
+ RETURN_STRING(cv_ret2str(r), 1);
+}
+
+/*
+* cv_create can't be implemented because of vararg limits in PHP3's C API.
+* (COMMENT BY DDJ [from original code])
+*
+* BWM: I looked into this, checking in on what cv_create was; it is a deprecated function left in for
+* backwards compatibility according
+* to the CCVS C API ref. I didn't try to implement it for that reason. If anyone needs it, they can add it in
+* themselves I'm sure.
+*/
+ZEND_FUNCTION(ccvs_delete) /* cv_delete() */
+{
+ zval **psess;
+ zval **pinvoice;
+ void *sess;
+ char *invoice;
+ register int r;
+
+ if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ convert_to_string_ex(pinvoice);
+ invoice = (*pinvoice)->value.str.val;
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+
+ r = cv_delete(sess, invoice);
+
+ RETURN_STRING(cv_ret2str(r), 1);
+}
+
+ZEND_FUNCTION(ccvs_auth) /* cv_auth() */
+{
+ zval **psess;
+ zval **pinvoice;
+ void *sess;
+ char *invoice;
+ register int r;
+
+ if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ convert_to_string_ex(pinvoice);
+ invoice = (*pinvoice)->value.str.val;
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+
+ r = cv_auth(sess, invoice);
+
+ RETURN_STRING(cv_ret2str(r), 1);
+}
+
+ZEND_FUNCTION(ccvs_return) /* cv_return() */
+{
+ zval **psess;
+ zval **pinvoice;
+ void *sess;
+ char *invoice;
+ register int r;
+
+ if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ convert_to_string_ex(pinvoice);
+ invoice = (*pinvoice)->value.str.val;
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+
+ r = cv_return(sess, invoice);
+
+ RETURN_STRING(cv_ret2str(r), 1);
+}
+
+ZEND_FUNCTION(ccvs_reverse) /* cv_reverse() */
+{
+ zval **psess;
+ zval **pinvoice;
+ void *sess;
+ char *invoice;
+ register int r;
+
+ if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ convert_to_string_ex(pinvoice);
+ invoice = (*pinvoice)->value.str.val;
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+
+ r = cv_reverse(sess, invoice);
+
+ RETURN_STRING(cv_ret2str(r), 1);
+}
+
+ZEND_FUNCTION(ccvs_sale) /* cv_sale() */
+{
+ zval **psess;
+ zval **pinvoice;
+ void *sess;
+ char *invoice;
+ register int r;
+
+ if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(ht, 2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ convert_to_string_ex(pinvoice);
+ invoice = (*pinvoice)->value.str.val;
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+
+ r = cv_sale(sess, invoice);
+
+ RETURN_STRING(cv_ret2str(r), 1);
+}
+
+ZEND_FUNCTION(ccvs_void) /* cv_void() */
+{
+ zval **psess;
+ zval **pinvoice;
+ void *sess;
+ char *invoice;
+ register int r;
+
+ if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ convert_to_string_ex(pinvoice);
+ invoice = (*pinvoice)->value.str.val;
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+
+ r = cv_void(sess, invoice);
+
+ RETURN_STRING(cv_ret2str(r), 1);
+}
+
+ZEND_FUNCTION(ccvs_status) /* cv_status() */
+{
+ zval **psess;
+ zval **pinvoice;
+ void *sess;
+ char *invoice;
+ register int r;
+
+ if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &pinvoice) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ convert_to_string_ex(pinvoice);
+ invoice = (*pinvoice)->value.str.val;
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+
+ r = cv_status(sess, invoice);
+
+ RETURN_STRING(cv_stat2str(r), 1);
+}
+
+ZEND_FUNCTION(ccvs_count) /* cv_count() */
+{
+ zval **psess;
+ zval **ptype;
+ void *sess;
+ int type;
+ register int r;
+
+ if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &ptype) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ convert_to_string_ex(ptype);
+ type = cv_str2stat((*ptype)->value.str.val);
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+
+ r = cv_count(sess, type);
+
+ RETURN_LONG(r);
+}
+
+ZEND_FUNCTION(ccvs_lookup) /* cv_lookup() */
+{
+ zval **psess;
+ zval **ptype;
+ zval **pinum;
+ void *sess;
+ int type;
+ long inum;
+ register int r;
+
+ if ((ZEND_NUM_ARGS() != 3) || (zend_get_parameters_ex(3, &psess, &ptype, &pinum) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+ convert_to_string_ex(ptype);
+ type = cv_str2stat((*ptype)->value.str.val);
+ convert_to_long_ex(pinum);
+ inum = (*pinum)->value.lval;
+
+ r = cv_lookup(sess, type, inum);
+
+ RETURN_STRING(cv_textvalue(sess), 1);
+}
+
+ZEND_FUNCTION(ccvs_report) /* cv_report() */
+{
+ zval **psess;
+ zval **ptype;
+ void *sess;
+ int type;
+ long inum;
+ register int r;
+
+ if ((ZEND_NUM_ARGS() != 2) || (zend_get_parameters_ex(2, &psess, &ptype) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+ convert_to_string_ex(ptype);
+ type = cv_str2rep((*ptype)->value.str.val);
+
+ r = cv_report(sess, type);
+
+ RETURN_STRING(cv_stat2str(r), 1);
+}
+
+ZEND_FUNCTION(ccvs_command) /* cv_command() */
+{
+ zval **psess;
+ zval **ptype;
+ zval **pargval;
+ void *sess;
+ int type;
+ register int r;
+ char *argval;
+
+ if ((ZEND_NUM_ARGS() != 3) || (zend_get_parameters_ex(3, &psess, &ptype, &pargval) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+ convert_to_string_ex(ptype);
+ type = cv_str2cmd((*ptype)->value.str.val);
+ convert_to_string_ex(pargval);
+ argval = (*pargval)->value.str.val;
+
+ r = cv_command(sess, type, argval);
+
+ RETURN_STRING(cv_stat2str(r), 1);
+}
+
+ZEND_FUNCTION(ccvs_textvalue) /* cv_textvalue() */
+{
+ zval **psess;
+ void *sess;
+
+ if ((ZEND_NUM_ARGS() != 1) || (zend_get_parameters_ex(1, &psess) != SUCCESS)) /* accept only SUCCESS in case something weird gets returned instead of 'FAILURE' on fail */
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(psess);
+ sess = hks_ptr_stringtoptr((*psess)->value.str.val);
+
+ RETURN_STRING(cv_textvalue(sess), 1);
+}
+
+/*
+* Our Info Function which reports info on this module out to PHP's phpinfo() function
+* Brendan W. McAdams <brendan@plexmedia.com> on 2000.07.26@16:22.EST
+*/
+
+PHP_MINFO_FUNCTION(ccvs)
+{
+ php_info_print_table_start();
+ php_info_print_table_header(2, "RedHat CCVS support", "enabled");
+ php_info_print_table_row(2,"CCVS Support by","Brendan W. McAdams &lt;brendan@plexmedia.com&gt;");
+ php_info_print_table_row(2,"Release ID",cvsid);
+ php_info_print_table_end();
+
+ /* DISPLAY_INI_ENTRIES(); */
+
+ /*
+ * In the future, we will probably have entries in php.ini for runtime config, in which case we will
+ * Uncomment the DISPLAY_INI_ENTRIES call...
+ */
+
+} \ No newline at end of file