summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfoobar <sniper@php.net>2002-10-10 02:23:24 +0000
committerfoobar <sniper@php.net>2002-10-10 02:23:24 +0000
commit9029b356b2e095a2f421a84817649d98eb30b80f (patch)
tree7b99a2539a16d1bab0db50524426d2d73553e78e
parentbb607d2d62f85bc0187889dfa6eb3cf29a2a3917 (diff)
downloadphp-git-9029b356b2e095a2f421a84817649d98eb30b80f.tar.gz
- Cleaned up some code and used the proper macros for ZTS stuff.
- Fixed a memleak. - Fixed a bug in pfpro_process() when response contains only 2 entries. (random garbage added in the end of the value + key sometimes wrong) # Sorry for including the ws fixes..I got carried away when fixing that bug
-rw-r--r--ext/pfpro/pfpro.c154
-rw-r--r--ext/pfpro/php_pfpro.h7
2 files changed, 53 insertions, 108 deletions
diff --git a/ext/pfpro/pfpro.c b/ext/pfpro/pfpro.c
index 90ecc5b290..e56c0a35ef 100644
--- a/ext/pfpro/pfpro.c
+++ b/ext/pfpro/pfpro.c
@@ -19,29 +19,24 @@
/* $Id$ */
-/* {{{ includes */
-
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "php.h"
-#include "php_ini.h"
#include "php_pfpro.h"
-#include "pfpro.h"
-
#if HAVE_PFPRO
+/* {{{ includes */
+#include "php_ini.h"
+#include "ext/standard/info.h"
#include "ext/standard/php_string.h"
+#include <pfpro.h>
/* }}} */
/* {{{ zts */
-#ifdef ZTS
-int pfpro_globals_id;
-#else
-php_pfpro_globals pfpro_globals;
-#endif
+ZEND_DECLARE_MODULE_GLOBALS(pfpro)
/* }}} */
/* {{{ Function table */
@@ -65,7 +60,7 @@ zend_module_entry pfpro_module_entry = {
PHP_RINIT(pfpro), /* request start */
PHP_RSHUTDOWN(pfpro), /* request end */
PHP_MINFO(pfpro),
- NO_VERSION_YET,
+ NO_VERSION_YET,
STANDARD_MODULE_PROPERTIES
};
/* }}} */
@@ -78,24 +73,33 @@ ZEND_GET_MODULE(pfpro)
/* {{{ initialization defaults */
PHP_INI_BEGIN()
-#if PFPRO_VERSION < 3
- STD_PHP_INI_ENTRY("pfpro.defaulthost", "test.signio.com",
- PHP_INI_ALL, OnUpdateString, defaulthost, php_pfpro_globals, pfpro_globals)
-#else
- STD_PHP_INI_ENTRY("pfpro.defaulthost", "test-payflow.verisign.com",
- PHP_INI_ALL, OnUpdateString, defaulthost, php_pfpro_globals, pfpro_globals)
-#endif
- STD_PHP_INI_ENTRY("pfpro.defaultport", "443", PHP_INI_ALL, OnUpdateInt, defaultport, php_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.defaulttimeout", "30", PHP_INI_ALL, OnUpdateInt, defaulttimeout, php_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.proxyaddress", "", PHP_INI_ALL, OnUpdateString, proxyaddress, php_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.proxyport", "", PHP_INI_ALL, OnUpdateInt, proxyport, php_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.proxylogon", "", PHP_INI_ALL, OnUpdateString, proxylogon, php_pfpro_globals, pfpro_globals)
- STD_PHP_INI_ENTRY("pfpro.proxypassword", "", PHP_INI_ALL, OnUpdateString, proxypassword, php_pfpro_globals, pfpro_globals)
+ STD_PHP_INI_ENTRY("pfpro.defaulthost", "test-payflow.verisign.com", PHP_INI_ALL, OnUpdateString, defaulthost, zend_pfpro_globals, pfpro_globals)
+ STD_PHP_INI_ENTRY("pfpro.defaultport", "443", PHP_INI_ALL, OnUpdateInt, defaultport, zend_pfpro_globals, pfpro_globals)
+ STD_PHP_INI_ENTRY("pfpro.defaulttimeout", "30", PHP_INI_ALL, OnUpdateInt, defaulttimeout, zend_pfpro_globals, pfpro_globals)
+ STD_PHP_INI_ENTRY("pfpro.proxyaddress", "", PHP_INI_ALL, OnUpdateString, proxyaddress, zend_pfpro_globals, pfpro_globals)
+ STD_PHP_INI_ENTRY("pfpro.proxyport", "", PHP_INI_ALL, OnUpdateInt, proxyport, zend_pfpro_globals, pfpro_globals)
+ STD_PHP_INI_ENTRY("pfpro.proxylogon", "", PHP_INI_ALL, OnUpdateString, proxylogon, zend_pfpro_globals, pfpro_globals)
+ STD_PHP_INI_ENTRY("pfpro.proxypassword", "", PHP_INI_ALL, OnUpdateString, proxypassword, zend_pfpro_globals, pfpro_globals)
PHP_INI_END()
+/* {{{ php_extname_init_globals
+ */
+static void php_pfpro_init_globals(zend_pfpro_globals *pfpro_globals)
+{
+ pfpro_globals->initialized = 0;
+ pfpro_globals->defaulthost = NULL;
+ pfpro_globals->defaultport = 0;
+ pfpro_globals->defaulttimeout = 0;
+ pfpro_globals->proxyaddress = NULL;
+ pfpro_globals->proxyport = 0;
+ pfpro_globals->proxylogon = NULL;
+ pfpro_globals->proxypassword = NULL;
+}
+/* }}} */
PHP_MINIT_FUNCTION(pfpro)
{
+ ZEND_INIT_MODULE_GLOBALS(pfpro, php_pfpro_init_globals, NULL);
REGISTER_INI_ENTRIES();
return SUCCESS;
}
@@ -110,7 +114,7 @@ PHP_RINIT_FUNCTION(pfpro)
{
PFPROG(initialized) = 0;
- return SUCCESS;
+ return SUCCESS;
}
PHP_RSHUTDOWN_FUNCTION(pfpro)
@@ -119,7 +123,7 @@ PHP_RSHUTDOWN_FUNCTION(pfpro)
pfproCleanup();
}
- return SUCCESS;
+ return SUCCESS;
}
/* }}} */
@@ -127,7 +131,7 @@ PHP_RSHUTDOWN_FUNCTION(pfpro)
PHP_MINFO_FUNCTION(pfpro)
{
php_info_print_table_start();
- php_info_print_table_header(2, "Verisign Payflow Pro support", "enabled");
+ php_info_print_table_row(2, "Verisign Payflow Pro support", "enabled");
php_info_print_table_row(2, "libpfpro version", pfproVersion());
php_info_print_table_end();
@@ -184,7 +188,6 @@ PHP_FUNCTION(pfpro_cleanup)
PHP_FUNCTION(pfpro_process_raw)
{
zval ***args;
-
char *parmlist = NULL;
char *address = NULL;
int port = PFPROG(defaultport);
@@ -193,9 +196,7 @@ PHP_FUNCTION(pfpro_process_raw)
int proxyPort = PFPROG(proxyport);
char *proxyLogon = PFPROG(proxylogon);
char *proxyPassword = PFPROG(proxypassword);
-
int freeaddress = 0;
-
#if PFPRO_VERSION < 3
char response[512] = "";
#else
@@ -210,7 +211,7 @@ PHP_FUNCTION(pfpro_process_raw)
args = (zval ***) emalloc(sizeof(zval **) * ZEND_NUM_ARGS());
if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- php_error(E_WARNING, "Unable to read parameters in pfpro_process_raw()");
+ php_error(E_WARNING, "Unable to read parameters in pfpro_process_raw()");
efree(args);
RETURN_FALSE;
}
@@ -256,8 +257,6 @@ PHP_FUNCTION(pfpro_process_raw)
efree(args);
- /* Default to signio's test server */
-
if (address == NULL) {
address = estrdup(PFPROG(defaulthost));
freeaddress = 1;
@@ -298,13 +297,11 @@ PHP_FUNCTION(pfpro_process_raw)
PHP_FUNCTION(pfpro_process)
{
zval ***args;
-
HashTable *target_hash;
ulong num_key;
char *string_key;
zval **entry;
int pass;
-
char *parmlist = NULL;
char *address = NULL;
int port = PFPROG(defaultport);
@@ -313,23 +310,16 @@ PHP_FUNCTION(pfpro_process)
int proxyPort = PFPROG(proxyport);
char *proxyLogon = PFPROG(proxylogon);
char *proxyPassword = PFPROG(proxypassword);
-
int parmlength = 0;
int freeaddress = 0;
-
#if PFPRO_VERSION < 3
char response[512] = "";
#else
int context;
char *response;
#endif
-
char tmpbuf[128];
-
- char buf[128], sbuf[128];
- char *p1, *p2, *p_end, /* Pointers for string manipulation */
- *sp1, *sp2,
- *pdelim1="&", *pdelim2="=";
+ char *var,*val,*strtok_buf=NULL; /* Pointers for string manipulation */
if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 8) {
WRONG_PARAM_COUNT;
@@ -338,7 +328,7 @@ PHP_FUNCTION(pfpro_process)
args = (zval ***) emalloc(sizeof(zval **) * ZEND_NUM_ARGS());
if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
- php_error(E_ERROR, "Unable to read parameters in pfpro_process()");
+ php_error(E_ERROR, "Unable to read parameters in pfpro_process()");
efree(args);
RETURN_FALSE;
}
@@ -420,7 +410,7 @@ PHP_FUNCTION(pfpro_process)
case HASH_KEY_IS_LONG:
- sprintf(tmpbuf, "%d", num_key);
+ sprintf(tmpbuf, "%ld", num_key);
if (pass == 1)
strcpy(parmlist + parmlength, tmpbuf);
parmlength += strlen(tmpbuf);
@@ -442,8 +432,7 @@ PHP_FUNCTION(pfpro_process)
if (pass == 1)
strcpy(parmlist + parmlength, tmpbuf);
parmlength += strlen(tmpbuf);
- }
- else {
+ } else {
if (pass == 1)
strcpy(parmlist + parmlength, "=");
parmlength += 1;
@@ -456,7 +445,7 @@ PHP_FUNCTION(pfpro_process)
break;
case IS_LONG:
- sprintf(tmpbuf, "=%d", Z_LVAL_PP(entry));
+ sprintf(tmpbuf, "=%ld", Z_LVAL_PP(entry));
if (pass == 1)
strcpy(parmlist + parmlength, tmpbuf);
parmlength += strlen(tmpbuf);
@@ -486,10 +475,7 @@ PHP_FUNCTION(pfpro_process)
efree(args);
- /* Default to signio's test server */
-
if (address == NULL) {
- /* is it safe to just do address = "test.signio.com"; here? */
address = estrdup(PFPROG(defaulthost));
freeaddress = 1;
}
@@ -528,63 +514,23 @@ PHP_FUNCTION(pfpro_process)
efree(address);
}
+ if (pass) {
+ efree(parmlist);
+ }
- /* This final chunk of code is to walk the string returned by Signio
- and build a string array to return to the user */
-
- /* John, I suspect this code will fall over if there are less than
- 3 items in the response string -- david */
-
- /* Clean our str[n]cpy buffers */
- memset(buf, 0, sizeof(buf));
- memset(sbuf, 0, sizeof(sbuf));
-
- p_end = response + strlen(response);
- p1 = response;
- p2 = (char*)php_memnstr(response, pdelim1, 1, p_end);
-
- sp1 = (char*)php_memnstr(response, pdelim2, 1, p2);
- strncpy(buf, p1, sp1-p1);
-
- sp1++;
- strncpy(sbuf, sp1, p2-sp1);
-
- add_assoc_string(return_value, &buf[0], &sbuf[0], 1);
-
- do {
- memset(buf, 0, sizeof(buf));
- memset(sbuf, 0, sizeof(sbuf));
-
- p1 = p2+1;
-
- if ((sp2 = (char*)php_memnstr(p1, pdelim1, 1, p_end)) != NULL) {
- sp1 = (char*)php_memnstr(p1, pdelim2, 1, sp2);
- strncpy(buf, p1, sp1-p1);
-
- sp1++;
-
- strncpy(sbuf, sp1, sp2-sp1);
+ /* This final chunk of code is to walk the returned string
+ * and build the return array to the user.
+ */
+ var = php_strtok_r(response, "&", &strtok_buf);
- add_assoc_string(return_value, &buf[0], &sbuf[0], 1);
+ while (var) {
+ val = strchr(var, '=');
+ if (val) { /* have a value */
+ *val++ = '\0';
+ add_assoc_string(return_value, var, val, 1);
}
-
-
- } while ((p2 = (char*)php_memnstr(p1, pdelim1, 1, p_end)) != NULL);
-
- if (p1 <= p_end) {
- memset(buf, 0, sizeof(buf));
- memset(sbuf, 0, sizeof(sbuf));
-
- sp1 = (char*)php_memnstr(p1, pdelim2, 1, p_end);
- strncpy(buf, p1, sp1-p1);
-
- sp1++;
- strncpy(sbuf, sp1, p_end-sp1);
-
- add_assoc_string(return_value, &buf[0], &sbuf[0], 1);
+ var = php_strtok_r(NULL, "&", &strtok_buf);
}
-
-
}
/* }}} */
diff --git a/ext/pfpro/php_pfpro.h b/ext/pfpro/php_pfpro.h
index 7b93f1f843..bc67d6ac4b 100644
--- a/ext/pfpro/php_pfpro.h
+++ b/ext/pfpro/php_pfpro.h
@@ -51,8 +51,7 @@ PHP_FUNCTION(pfpro_cleanup); /* Shut down cleanly */
PHP_FUNCTION(pfpro_process_raw); /* Raw transaction processing */
PHP_FUNCTION(pfpro_process); /* Transaction processing */
-typedef struct {
- int le_pfpro;
+ZEND_BEGIN_MODULE_GLOBALS(pfpro)
int initialized;
char *defaulthost;
int defaultport;
@@ -61,10 +60,10 @@ typedef struct {
int proxyport;
char *proxylogon;
char *proxypassword;
-} php_pfpro_globals;
+ZEND_END_MODULE_GLOBALS(pfpro)
#ifdef ZTS
-#define PFPROG(v) TSRMG(pfpro_globals_id, php_pfpro_globals *, v)
+#define PFPROG(v) TSRMG(pfpro_globals_id, zend_pfpro_globals *, v)
#else
#define PFPROG(v) (pfpro_globals.v)
#endif