|
|
e20d04e |
commit 57ae84b2d8b2e0af1a66d529e4e94b21f3df319d
|
|
|
827ec03 |
Author: Björn Esser <besser82@fedoraproject.org>
|
|
|
e20d04e |
Date: Tue Dec 12 15:31:53 2017 +0100
|
|
|
827ec03 |
|
|
|
e20d04e |
modules/json: Properly detect json-c version and adaptions for v0.13
|
|
|
827ec03 |
|
|
|
e20d04e |
diff --git a/modules/json/Makefile b/modules/json/Makefile
|
|
|
e20d04e |
index 5c514655b..479bec701 100644
|
|
|
e20d04e |
--- a/modules/json/Makefile
|
|
|
e20d04e |
+++ b/modules/json/Makefile
|
|
|
e20d04e |
@@ -2,7 +2,7 @@
|
|
|
e20d04e |
#
|
|
|
e20d04e |
# Memcached implementation for memcache API.
|
|
|
e20d04e |
#
|
|
|
e20d04e |
-#
|
|
|
e20d04e |
+#
|
|
|
e20d04e |
# WARNING: do not run this directly, it should be run by the master Makefile
|
|
|
e20d04e |
|
|
|
e20d04e |
include ../../Makefile.defs
|
|
|
e20d04e |
@@ -23,8 +23,23 @@ ifeq ($(JSON_BUILDER),)
|
|
|
e20d04e |
DEFS += -I$(LOCALBASE)/include -I$(SYSBASE)/include
|
|
|
e20d04e |
LIBS += -L$(LOCALBASE)/lib -ljson
|
|
|
e20d04e |
else
|
|
|
e20d04e |
- JSON_LIB_VER = $(shell $(JSON_BUILDER) --modversion | sed "s/\.\([0-9]\)\./.0\1./g" | sed "s/\.\([0-9]\)\$$/.0\1/g" | tr -d "." | sed -e "s/^0*//" )
|
|
|
e20d04e |
- DEFS += $(shell $(JSON_BUILDER) --cflags) -DJSON_LIB_VERSION=$(JSON_LIB_VER)
|
|
|
e20d04e |
+ JSON_PKG_VER = $(shell $(JSON_BUILDER) --modversion)
|
|
|
e20d04e |
+ JSON_PKG_MAJOR = $(shell \
|
|
|
e20d04e |
+ ver_tmp=`echo '$(JSON_PKG_VER)' | cut -f1 -d.`; \
|
|
|
e20d04e |
+ if [ -z "$$ver_tmp" ]; then ver_tmp=0; fi; \
|
|
|
e20d04e |
+ echo "$$ver_tmp";)
|
|
|
e20d04e |
+ JSON_PKG_MINOR = $(shell \
|
|
|
e20d04e |
+ ver_tmp=`echo '$(JSON_PKG_VER)' | cut -f2 -d.`; \
|
|
|
e20d04e |
+ if [ -z "$$ver_tmp" ]; then ver_tmp=0; fi; \
|
|
|
e20d04e |
+ echo "$$ver_tmp";)
|
|
|
e20d04e |
+ JSON_PKG_MICRO = $(shell \
|
|
|
e20d04e |
+ ver_tmp=`echo '$(JSON_PKG_VER)' | cut -f3 -d.`; \
|
|
|
e20d04e |
+ if [ -z "$$ver_tmp" ]; then ver_tmp=0; fi; \
|
|
|
e20d04e |
+ echo "$$ver_tmp";)
|
|
|
e20d04e |
+ DEFS += $(shell $(JSON_BUILDER) --cflags) \
|
|
|
e20d04e |
+ -DJSON_PKG_MAJOR=$(JSON_PKG_MAJOR) \
|
|
|
e20d04e |
+ -DJSON_PKG_MINOR=$(JSON_PKG_MINOR) \
|
|
|
e20d04e |
+ -DJSON_PKG_MICRO=$(JSON_PKG_MICRO)
|
|
|
e20d04e |
LIBS += $(shell $(JSON_BUILDER) --libs)
|
|
|
e20d04e |
endif
|
|
|
e20d04e |
|
|
|
827ec03 |
diff --git a/modules/json/array_del.c b/modules/json/array_del.c
|
|
|
e20d04e |
index b23f6d3b3..9be6e2f84 100644
|
|
|
827ec03 |
--- a/modules/json/array_del.c
|
|
|
827ec03 |
+++ b/modules/json/array_del.c
|
|
|
e20d04e |
@@ -22,27 +22,34 @@
|
|
|
827ec03 |
* History:
|
|
|
827ec03 |
* ---------
|
|
|
827ec03 |
* 2009-09-04 first version (andreidragus)
|
|
|
e20d04e |
+ * 2017-12-12 use opensips_json_c_helper.h (besser82)
|
|
|
827ec03 |
*/
|
|
|
827ec03 |
|
|
|
e20d04e |
-#include <json.h>
|
|
|
e20d04e |
-#include <json_object_private.h>
|
|
|
e20d04e |
+#include "opensips_json_c_helper.h"
|
|
|
9cdfd17 |
|
|
|
9cdfd17 |
-void array_list_del_idx( struct array_list * arr, int idx)
|
|
|
e20d04e |
+#if JSON_C_VERSION_NUM < JSON_C_VER_013
|
|
|
827ec03 |
+void array_list_del_idx(struct array_list * arr, int idx)
|
|
|
9cdfd17 |
{
|
|
|
9cdfd17 |
int i;
|
|
|
9cdfd17 |
|
|
|
e20d04e |
- if( idx >= arr->length)
|
|
|
e20d04e |
+ if(idx >= arr->length)
|
|
|
e20d04e |
return;
|
|
|
e20d04e |
|
|
|
e20d04e |
|
|
|
e20d04e |
arr->free_fn(arr->array[idx]);
|
|
|
e20d04e |
arr->length--;
|
|
|
e20d04e |
|
|
|
e20d04e |
- for( i=idx; i<arr->length; i++ )
|
|
|
e20d04e |
+ for(i=idx; i<arr->length; i++)
|
|
|
827ec03 |
arr->array[i] = arr->array[i+1];
|
|
|
827ec03 |
};
|
|
|
827ec03 |
+#endif
|
|
|
9cdfd17 |
|
|
|
9cdfd17 |
void json_object_array_del(struct json_object* obj, int idx)
|
|
|
9cdfd17 |
{
|
|
|
e20d04e |
+#if JSON_C_VERSION_NUM >= JSON_C_VER_013
|
|
|
827ec03 |
+ struct array_list * arr = json_object_get_array(obj);
|
|
|
827ec03 |
+ array_list_del_idx(arr, idx, arr->length);
|
|
|
e20d04e |
+#else
|
|
|
e20d04e |
array_list_del_idx(obj->o.c_array, idx);
|
|
|
827ec03 |
+#endif
|
|
|
9cdfd17 |
};
|
|
|
827ec03 |
diff --git a/modules/json/json.c b/modules/json/json.c
|
|
|
e20d04e |
index 452e4a801..c709e44cf 100644
|
|
|
827ec03 |
--- a/modules/json/json.c
|
|
|
827ec03 |
+++ b/modules/json/json.c
|
|
|
827ec03 |
@@ -22,6 +22,7 @@
|
|
|
827ec03 |
* History:
|
|
|
827ec03 |
* ---------
|
|
|
827ec03 |
* 2009-09-04 first version (andreidragus)
|
|
|
e20d04e |
+ * 2017-12-12 use opensips_json_c_helper.h (besser82)
|
|
|
827ec03 |
*/
|
|
|
827ec03 |
|
|
|
827ec03 |
|
|
|
e20d04e |
@@ -43,14 +44,9 @@
|
|
|
e20d04e |
#include "../../mi/mi.h"
|
|
|
e20d04e |
#include "../tm/tm_load.h"
|
|
|
e20d04e |
#include "../rr/api.h"
|
|
|
e20d04e |
+#include "opensips_json_c_helper.h"
|
|
|
827ec03 |
|
|
|
827ec03 |
|
|
|
e20d04e |
-#include <json.h>
|
|
|
e20d04e |
-#include <json_object_private.h>
|
|
|
e20d04e |
-
|
|
|
e20d04e |
-
|
|
|
e20d04e |
-#define JSON_BUFF_SIZE 4096
|
|
|
e20d04e |
-
|
|
|
e20d04e |
enum
|
|
|
e20d04e |
{
|
|
|
e20d04e |
TAG_KEY = 1,
|
|
|
e20d04e |
@@ -93,7 +89,7 @@ typedef struct _json_name
|
|
|
e20d04e |
}json_name;
|
|
|
e20d04e |
|
|
|
e20d04e |
pv_json_t * all;
|
|
|
e20d04e |
-char buff[JSON_BUFF_SIZE];
|
|
|
e20d04e |
+char buff[JSON_FILE_BUF_SIZE];
|
|
|
827ec03 |
|
|
|
e20d04e |
static int mod_init(void);
|
|
|
e20d04e |
static int child_init(int );
|
|
|
e20d04e |
@@ -298,19 +294,16 @@ json_t * get_object(pv_json_t * var, pv_param_t* pvp , json_tag ** tag,
|
|
|
e20d04e |
!json_object_is_type( cur_obj, json_type_object ) )
|
|
|
e20d04e |
goto error;
|
|
|
e20d04e |
|
|
|
e20d04e |
-#if JSON_LIB_VERSION < 10
|
|
|
e20d04e |
+#if JSON_C_VERSION_NUM >= JSON_C_VER_010
|
|
|
e20d04e |
+ if (!json_object_object_get_ex( cur_obj,buff, &cur_obj ) &&
|
|
|
e20d04e |
+ tag == NULL)
|
|
|
e20d04e |
+ goto error;
|
|
|
e20d04e |
+#else
|
|
|
e20d04e |
cur_obj = json_object_object_get( cur_obj, buff );
|
|
|
827ec03 |
|
|
|
e20d04e |
if( cur_obj == NULL && tag == NULL)
|
|
|
e20d04e |
goto error;
|
|
|
e20d04e |
-#else
|
|
|
e20d04e |
- if (!json_object_object_get_ex( cur_obj,buff, &cur_obj ) &&
|
|
|
e20d04e |
- tag == NULL)
|
|
|
e20d04e |
- goto error;
|
|
|
e20d04e |
#endif
|
|
|
e20d04e |
-
|
|
|
e20d04e |
-
|
|
|
e20d04e |
-
|
|
|
e20d04e |
}
|
|
|
e20d04e |
|
|
|
e20d04e |
if( cur_tag->type & TAG_IDX )
|
|
|
e20d04e |
@@ -418,7 +411,7 @@ int pv_get_json (struct sip_msg* msg, pv_param_t* pvp, pv_value_t* val)
|
|
|
e20d04e |
{
|
|
|
e20d04e |
val->flags = PV_VAL_STR;
|
|
|
e20d04e |
val->rs.s = (char*)json_object_get_string( obj );
|
|
|
e20d04e |
-#if JSON_LIB_VERSION >= 10
|
|
|
e20d04e |
+#if JSON_C_VERSION_NUM >= JSON_C_VER_010
|
|
|
e20d04e |
val->rs.len = json_object_get_string_len( obj );
|
|
|
e20d04e |
#else
|
|
|
e20d04e |
val->rs.len = strlen(val->rs.s);
|
|
|
e20d04e |
@@ -590,7 +583,7 @@ int pv_set_json (struct sip_msg* msg, pv_param_t* pvp, int flag ,
|
|
|
e20d04e |
if (obj == NULL)
|
|
|
e20d04e |
{
|
|
|
e20d04e |
LM_ERR("Error parsing json: %s\n",
|
|
|
e20d04e |
-#if JSON_LIB_VERSION >= 10
|
|
|
e20d04e |
+#if JSON_C_VERSION_NUM >= JSON_C_VER_010
|
|
|
e20d04e |
json_tokener_error_desc(parse_status)
|
|
|
e20d04e |
#else
|
|
|
e20d04e |
json_tokener_errors[(unsigned long)obj]
|
|
|
e20d04e |
diff --git a/modules/json/opensips_json_c_helper.h b/modules/json/opensips_json_c_helper.h
|
|
|
e20d04e |
new file mode 100644
|
|
|
e20d04e |
index 000000000..71c5c2189
|
|
|
e20d04e |
--- /dev/null
|
|
|
e20d04e |
+++ b/modules/json/opensips_json_c_helper.h
|
|
|
e20d04e |
@@ -0,0 +1,70 @@
|
|
|
e20d04e |
+/*
|
|
|
e20d04e |
+ * Copyright (C) 2017 Björn Esser <besser82@fedoraproject.org>
|
|
|
e20d04e |
+ *
|
|
|
e20d04e |
+ * This file is part of opensips, a free SIP server.
|
|
|
e20d04e |
+ *
|
|
|
e20d04e |
+ * opensips is free software; you can redistribute it and/or modify
|
|
|
e20d04e |
+ * it under the terms of the GNU General Public License as published by
|
|
|
e20d04e |
+ * the Free Software Foundation; either version 2 of the License, or
|
|
|
e20d04e |
+ * (at your option) any later version.
|
|
|
e20d04e |
+ *
|
|
|
e20d04e |
+ * opensips is distributed in the hope that it will be useful,
|
|
|
e20d04e |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
e20d04e |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
e20d04e |
+ * GNU General Public License for more details.
|
|
|
e20d04e |
+ *
|
|
|
e20d04e |
+ * You should have received a copy of the GNU General Public License
|
|
|
e20d04e |
+ * along with this program; if not, write to the Free Software
|
|
|
e20d04e |
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
e20d04e |
+ *
|
|
|
e20d04e |
+ *
|
|
|
e20d04e |
+ * History:
|
|
|
e20d04e |
+ * ---------
|
|
|
e20d04e |
+ * 2017-12-12 first version (besser82)
|
|
|
e20d04e |
+ */
|
|
|
e20d04e |
+
|
|
|
e20d04e |
+#ifndef OPENSIPS_JSON_C_HELPER_H
|
|
|
e20d04e |
+#define OPENSIPS_JSON_C_HELPER_H
|
|
|
e20d04e |
+
|
|
|
e20d04e |
+// If those are not defined, we assume to build against json-c v0.9.
|
|
|
e20d04e |
+// Starting with v0.11 there is json_c_version.h, which we prefer
|
|
|
e20d04e |
+// anyways, so there are no regressions in this case. Everything
|
|
|
e20d04e |
+// conditionalized for v0.10 or later doesn't produce any fallout,
|
|
|
e20d04e |
+// when we are asuming v0.9 and building against v0.10.
|
|
|
e20d04e |
+#ifndef JSON_PKG_MAJOR
|
|
|
e20d04e |
+#define JSON_PKG_MAJOR 0
|
|
|
e20d04e |
+#endif
|
|
|
e20d04e |
+#ifndef JSON_PKG_MINOR
|
|
|
e20d04e |
+#define JSON_PKG_MINOR 9
|
|
|
e20d04e |
+#endif
|
|
|
e20d04e |
+#ifndef JSON_PKG_MICRO
|
|
|
e20d04e |
+#define JSON_PKG_MICRO 0
|
|
|
e20d04e |
+#endif
|
|
|
e20d04e |
+
|
|
|
e20d04e |
+// json.h automatically includes json_c_version.h, if available.
|
|
|
e20d04e |
+#include <json.h>
|
|
|
e20d04e |
+
|
|
|
e20d04e |
+// We prefer JSON_C_VERSION_NUM defined in json_c_version.h. If it is
|
|
|
e20d04e |
+// not defined, we construct it the same way from our JSON_PKG_* defines.
|
|
|
e20d04e |
+#ifndef JSON_C_VERSION_NUM
|
|
|
e20d04e |
+#define JSON_C_VERSION_NUM (JSON_PKG_MAJOR << 16) | \
|
|
|
e20d04e |
+ (JSON_PKG_MINOR << 8) | \
|
|
|
e20d04e |
+ JSON_PKG_MICRO
|
|
|
e20d04e |
+#endif
|
|
|
e20d04e |
+
|
|
|
e20d04e |
+// Macros for checking specific versions.
|
|
|
e20d04e |
+#define JSON_C_VER_010 (10 << 8)
|
|
|
e20d04e |
+#define JSON_C_VER_013 (13 << 8)
|
|
|
e20d04e |
+
|
|
|
e20d04e |
+// json_object_private.h is gone and not needed anymore in json-c v0.13+.
|
|
|
e20d04e |
+#if JSON_C_VERSION_NUM < JSON_C_VER_013
|
|
|
e20d04e |
+#include <json_object_private.h>
|
|
|
e20d04e |
+#endif
|
|
|
e20d04e |
+
|
|
|
e20d04e |
+// Newer versions of json-c define this in their headers, so we prefer
|
|
|
e20d04e |
+// their definition in that case.
|
|
|
e20d04e |
+#ifndef JSON_FILE_BUF_SIZE
|
|
|
e20d04e |
+#define JSON_FILE_BUF_SIZE 4096
|
|
|
e20d04e |
+#endif
|
|
|
e20d04e |
+
|
|
|
e20d04e |
+#endif // OPENSIPS_JSON_C_HELPER_H
|