You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
447 lines
11 KiB
447 lines
11 KiB
--- a/geoip.c 2015/02/15 15:08:09 335947
|
|
+++ b/geoip.c 2015/02/15 17:56:49 335948
|
|
@@ -129,11 +129,19 @@
|
|
{
|
|
if (stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) {
|
|
GEOIP_G(set_runtime_custom_directory) = 1;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ geoip_change_custom_directory(new_value->val);
|
|
+#else
|
|
geoip_change_custom_directory(new_value);
|
|
+#endif
|
|
return SUCCESS;
|
|
}
|
|
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ return OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
|
|
+#else
|
|
return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
|
|
+#endif
|
|
}
|
|
/* }}} */
|
|
#endif
|
|
@@ -251,7 +259,7 @@
|
|
/* {{{ proto boolean geoip_db_avail( [ int database ] ) */
|
|
PHP_FUNCTION(geoip_db_avail)
|
|
{
|
|
- long edition;
|
|
+ zend_long edition;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &edition) == FAILURE) {
|
|
return;
|
|
@@ -270,7 +278,7 @@
|
|
/* {{{ proto string geoip_db_filename( [ int database ] ) */
|
|
PHP_FUNCTION(geoip_db_filename)
|
|
{
|
|
- long edition;
|
|
+ zend_long edition;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &edition) == FAILURE) {
|
|
return;
|
|
@@ -283,7 +291,11 @@
|
|
}
|
|
|
|
if (NULL != GeoIPDBFileName[edition])
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ RETURN_STRING(GeoIPDBFileName[edition]);
|
|
+#else
|
|
RETURN_STRING(GeoIPDBFileName[edition], 1);
|
|
+#endif
|
|
}
|
|
/* }}} */
|
|
|
|
@@ -298,16 +310,31 @@
|
|
{
|
|
if (NULL != GeoIPDBDescription[i])
|
|
{
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ zval real_row;
|
|
+ zval *row = &real_row;
|
|
+
|
|
+ array_init(row);
|
|
+#else
|
|
zval *row;
|
|
ALLOC_INIT_ZVAL(row);
|
|
array_init(row);
|
|
+#endif
|
|
|
|
add_assoc_bool(row, "available", GeoIP_db_avail(i));
|
|
if (GeoIPDBDescription[i]) {
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ add_assoc_string(row, "description", (char *)GeoIPDBDescription[i]);
|
|
+#else
|
|
add_assoc_string(row, "description", (char *)GeoIPDBDescription[i], 1);
|
|
+#endif
|
|
}
|
|
if (GeoIPDBFileName[i]) {
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ add_assoc_string(row, "filename", GeoIPDBFileName[i]);
|
|
+#else
|
|
add_assoc_string(row, "filename", GeoIPDBFileName[i], 1);
|
|
+#endif
|
|
}
|
|
|
|
add_index_zval(return_value, i, row);
|
|
@@ -322,7 +349,7 @@
|
|
{
|
|
GeoIP * gi;
|
|
char * db_info;
|
|
- long edition = GEOIP_COUNTRY_EDITION;
|
|
+ zend_long edition = GEOIP_COUNTRY_EDITION;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &edition) == FAILURE) {
|
|
return;
|
|
@@ -347,12 +374,45 @@
|
|
db_info = GeoIP_database_info(gi);
|
|
GeoIP_delete(gi);
|
|
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ RETVAL_STRING(db_info);
|
|
+#else
|
|
RETVAL_STRING(db_info, 1);
|
|
+#endif
|
|
free(db_info);
|
|
}
|
|
/* }}} */
|
|
|
|
/* {{{ */
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+#define GEOIPDEF(php_func, c_func, db_type) \
|
|
+ PHP_FUNCTION(php_func) \
|
|
+ { \
|
|
+ GeoIP * gi; \
|
|
+ char * hostname = NULL; \
|
|
+ const char * return_code; \
|
|
+ size_t arglen; \
|
|
+ \
|
|
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) { \
|
|
+ return; \
|
|
+ } \
|
|
+ \
|
|
+ if (GeoIP_db_avail(db_type)) { \
|
|
+ gi = GeoIP_open_type(db_type, GEOIP_STANDARD); \
|
|
+ } else { \
|
|
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Required database not available at %s.", GeoIPDBFileName[db_type]); \
|
|
+ return; \
|
|
+ } \
|
|
+ \
|
|
+ return_code = c_func(gi, hostname); \
|
|
+ GeoIP_delete(gi); \
|
|
+ if (return_code == NULL) { \
|
|
+ RETURN_FALSE; \
|
|
+ } \
|
|
+ RETURN_STRING((char*)return_code); \
|
|
+ \
|
|
+ }
|
|
+#else
|
|
#define GEOIPDEF(php_func, c_func, db_type) \
|
|
PHP_FUNCTION(php_func) \
|
|
{ \
|
|
@@ -380,6 +440,7 @@
|
|
RETURN_STRING((char*)return_code, 1); \
|
|
\
|
|
}
|
|
+#endif
|
|
#include "geoip.def"
|
|
#undef GEOIPDEF
|
|
/* }}} */
|
|
@@ -391,7 +452,11 @@
|
|
GeoIP * gi;
|
|
char * hostname = NULL;
|
|
int id;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ size_t arglen;
|
|
+#else
|
|
int arglen;
|
|
+#endif
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
|
|
return;
|
|
@@ -409,7 +474,11 @@
|
|
if (id == 0) {
|
|
RETURN_FALSE;
|
|
}
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ RETURN_STRING((char *)GeoIP_country_continent[id]);
|
|
+#else
|
|
RETURN_STRING((char *)GeoIP_country_continent[id], 1);
|
|
+#endif
|
|
}
|
|
/* }}} */
|
|
|
|
@@ -420,7 +489,11 @@
|
|
GeoIP * gi;
|
|
char * hostname = NULL;
|
|
char * org;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ size_t arglen;
|
|
+#else
|
|
int arglen;
|
|
+#endif
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
|
|
return;
|
|
@@ -438,7 +511,11 @@
|
|
if (org == NULL) {
|
|
RETURN_FALSE;
|
|
}
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ RETVAL_STRING(org);
|
|
+#else
|
|
RETVAL_STRING(org, 1);
|
|
+#endif
|
|
free(org);
|
|
}
|
|
/* }}} */
|
|
@@ -450,7 +527,11 @@
|
|
GeoIP * gi;
|
|
char * hostname = NULL;
|
|
char * org;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ size_t arglen;
|
|
+#else
|
|
int arglen;
|
|
+#endif
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
|
|
return;
|
|
@@ -468,7 +549,11 @@
|
|
if (org == NULL) {
|
|
RETURN_FALSE;
|
|
}
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ RETVAL_STRING(org);
|
|
+#else
|
|
RETVAL_STRING(org, 1);
|
|
+#endif
|
|
free(org);
|
|
}
|
|
/* }}} */
|
|
@@ -480,7 +565,11 @@
|
|
GeoIP * gi;
|
|
char * hostname = NULL;
|
|
char * org;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ size_t arglen;
|
|
+#else
|
|
int arglen;
|
|
+#endif
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
|
|
return;
|
|
@@ -498,7 +587,11 @@
|
|
if (org == NULL) {
|
|
RETURN_FALSE;
|
|
}
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ RETVAL_STRING(org);
|
|
+#else
|
|
RETVAL_STRING(org, 1);
|
|
+#endif
|
|
free(org);
|
|
}
|
|
/* }}} */
|
|
@@ -511,7 +604,11 @@
|
|
GeoIP * gi;
|
|
char * hostname = NULL;
|
|
char * org;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ size_t arglen;
|
|
+#else
|
|
int arglen;
|
|
+#endif
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
|
|
return;
|
|
@@ -529,7 +626,11 @@
|
|
if (org == NULL) {
|
|
RETURN_FALSE;
|
|
}
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ RETVAL_STRING(org);
|
|
+#else
|
|
RETVAL_STRING(org, 1);
|
|
+#endif
|
|
free(org);
|
|
}
|
|
/* }}} */
|
|
@@ -541,7 +642,11 @@
|
|
{
|
|
GeoIP * gi;
|
|
char * hostname = NULL;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ size_t arglen;
|
|
+#else
|
|
int arglen;
|
|
+#endif
|
|
GeoIPRecord * gir;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
|
|
@@ -567,15 +672,27 @@
|
|
}
|
|
|
|
array_init(return_value);
|
|
-#if LIBGEOIP_VERSION >= 1004003
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+# if LIBGEOIP_VERSION >= 1004003
|
|
+ add_assoc_string(return_value, "continent_code", (gir->continent_code == NULL) ? "" : gir->continent_code);
|
|
+# endif
|
|
+ add_assoc_string(return_value, "country_code", (gir->country_code == NULL) ? "" : gir->country_code);
|
|
+ add_assoc_string(return_value, "country_code3", (gir->country_code3 == NULL) ? "" : gir->country_code3);
|
|
+ add_assoc_string(return_value, "country_name", (gir->country_name == NULL) ? "" : gir->country_name);
|
|
+ add_assoc_string(return_value, "region", (gir->region == NULL) ? "" : gir->region);
|
|
+ add_assoc_string(return_value, "city", (gir->city == NULL) ? "" : gir->city);
|
|
+ add_assoc_string(return_value, "postal_code", (gir->postal_code == NULL) ? "" : gir->postal_code);
|
|
+#else
|
|
+# if LIBGEOIP_VERSION >= 1004003
|
|
add_assoc_string(return_value, "continent_code", (gir->continent_code == NULL) ? "" : gir->continent_code, 1);
|
|
-#endif
|
|
+# endif
|
|
add_assoc_string(return_value, "country_code", (gir->country_code == NULL) ? "" : gir->country_code, 1);
|
|
add_assoc_string(return_value, "country_code3", (gir->country_code3 == NULL) ? "" : gir->country_code3, 1);
|
|
add_assoc_string(return_value, "country_name", (gir->country_name == NULL) ? "" : gir->country_name, 1);
|
|
add_assoc_string(return_value, "region", (gir->region == NULL) ? "" : gir->region, 1);
|
|
add_assoc_string(return_value, "city", (gir->city == NULL) ? "" : gir->city, 1);
|
|
add_assoc_string(return_value, "postal_code", (gir->postal_code == NULL) ? "" : gir->postal_code, 1);
|
|
+#endif
|
|
add_assoc_double(return_value, "latitude", gir->latitude);
|
|
add_assoc_double(return_value, "longitude", gir->longitude);
|
|
#if LIBGEOIP_VERSION >= 1004005
|
|
@@ -595,7 +712,11 @@
|
|
{
|
|
GeoIP * gi;
|
|
char * hostname = NULL;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ size_t arglen;
|
|
+#else
|
|
int arglen;
|
|
+#endif
|
|
int netspeed;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
|
|
@@ -621,7 +742,11 @@
|
|
{
|
|
GeoIP * gi;
|
|
char * hostname = NULL;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ size_t arglen;
|
|
+#else
|
|
int arglen;
|
|
+#endif
|
|
GeoIPRegion * region;
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
|
|
@@ -647,9 +772,14 @@
|
|
}
|
|
|
|
array_init(return_value);
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ add_assoc_string(return_value, "country_code", region->country_code);
|
|
+ add_assoc_string(return_value, "region", region->region);
|
|
+#else
|
|
add_assoc_string(return_value, "country_code", region->country_code, 1);
|
|
add_assoc_string(return_value, "region", region->region, 1);
|
|
-
|
|
+#endif
|
|
+
|
|
GeoIPRegion_delete(region);
|
|
}
|
|
/* }}} */
|
|
@@ -661,7 +791,11 @@
|
|
GeoIP * gi;
|
|
char * hostname = NULL;
|
|
char * isp;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ size_t arglen;
|
|
+#else
|
|
int arglen;
|
|
+#endif
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
|
|
return;
|
|
@@ -679,7 +813,11 @@
|
|
if (isp == NULL) {
|
|
RETURN_FALSE;
|
|
}
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ RETVAL_STRING(isp);
|
|
+#else
|
|
RETVAL_STRING(isp, 1);
|
|
+#endif
|
|
free(isp);
|
|
}
|
|
|
|
@@ -691,7 +829,11 @@
|
|
char * country_code = NULL;
|
|
char * region_code = NULL;
|
|
const char * region_name;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ size_t countrylen, regionlen;
|
|
+#else
|
|
int countrylen, regionlen;
|
|
+#endif
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &country_code, &countrylen, ®ion_code, ®ionlen) == FAILURE) {
|
|
return;
|
|
@@ -706,7 +848,11 @@
|
|
if (region_name == NULL) {
|
|
RETURN_FALSE;
|
|
}
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ RETURN_STRING((char*)region_name);
|
|
+#else
|
|
RETURN_STRING((char*)region_name, 1);
|
|
+#endif
|
|
}
|
|
/* }}} */
|
|
#endif
|
|
@@ -719,7 +865,11 @@
|
|
char * country = NULL;
|
|
char * region = NULL;
|
|
const char * timezone;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ size_t countrylen, arg2len;
|
|
+#else
|
|
int countrylen, arg2len;
|
|
+#endif
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &country, &countrylen, ®ion, &arg2len) == FAILURE) {
|
|
return;
|
|
@@ -734,7 +884,11 @@
|
|
if (timezone == NULL) {
|
|
RETURN_FALSE;
|
|
}
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ RETURN_STRING((char*)timezone);
|
|
+#else
|
|
RETURN_STRING((char*)timezone, 1);
|
|
+#endif
|
|
}
|
|
/* }}} */
|
|
#endif
|
|
@@ -745,7 +899,11 @@
|
|
PHP_FUNCTION(geoip_setup_custom_directory)
|
|
{
|
|
char * dir = NULL;
|
|
+#if PHP_MAJOR_VERSION >= 7
|
|
+ size_t dirlen;
|
|
+#else
|
|
int dirlen;
|
|
+#endif
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &dir, &dirlen) == FAILURE) {
|
|
return;
|
|
--- a/php_geoip.h 2015/02/15 15:08:09 335947
|
|
+++ b/php_geoip.h 2015/02/15 17:56:49 335948
|
|
@@ -26,6 +26,10 @@
|
|
|
|
#define PHP_GEOIP_VERSION "1.1.1-dev"
|
|
|
|
+#if PHP_MAJOR_VERSION < 7
|
|
+typedef long zend_long;
|
|
+#endif
|
|
+
|
|
#ifdef PHP_WIN32
|
|
#define PHP_GEOIP_API __declspec(dllexport)
|
|
#else
|