* #39101: updated pjsip stack, many android build enhancements.

The main issue here is due to the build system of the stack compared to a pure Android
NDK project. Generating arm and x86 ABI at the same time does not seem to be possible.
diff --git a/jni/pjproject-android/pjlib-util/include/pjlib-util.h b/jni/pjproject-android/pjlib-util/include/pjlib-util.h
index b8cc0c7..d06a791 100644
--- a/jni/pjproject-android/pjlib-util/include/pjlib-util.h
+++ b/jni/pjproject-android/pjlib-util/include/pjlib-util.h
@@ -1,4 +1,4 @@
-/* $Id: pjlib-util.h 4688 2013-12-10 10:58:10Z bennylp $ */
+/* $Id: pjlib-util.h 4704 2014-01-16 05:30:46Z ming $ */
 /* 
  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -55,6 +55,9 @@
 /* XML */
 #include <pjlib-util/xml.h>
 
+/* JSON */
+#include <pjlib-util/json.h>
+
 /* Old STUN */
 #include <pjlib-util/stun_simple.h>
 
diff --git a/jni/pjproject-android/pjlib-util/include/pjlib-util/errno.h b/jni/pjproject-android/pjlib-util/include/pjlib-util/errno.h
index 5a1d9b4..4ab0458 100644
--- a/jni/pjproject-android/pjlib-util/include/pjlib-util/errno.h
+++ b/jni/pjproject-android/pjlib-util/include/pjlib-util/errno.h
@@ -1,4 +1,4 @@
-/* $Id: errno.h 4440 2013-03-14 07:18:13Z riza $ */
+/* $Id: errno.h 4704 2014-01-16 05:30:46Z ming $ */
 /* 
  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -117,6 +117,15 @@
 #define PJLIB_UTIL_EINXML	    (PJLIB_UTIL_ERRNO_START+20)	/* 320020 */
 
 
+/************************************************************
+ * JSON ERROR
+ ***********************************************************/
+/**
+ * @hideinitializer
+ * General invalid JSON message.
+ */
+#define PJLIB_UTIL_EINJSON	    (PJLIB_UTIL_ERRNO_START+30)	/* 320030 */
+
 
 /************************************************************
  * DNS ERROR
diff --git a/jni/pjproject-android/pjlib-util/include/pjlib-util/json.h b/jni/pjproject-android/pjlib-util/include/pjlib-util/json.h
new file mode 100644
index 0000000..7232f46
--- /dev/null
+++ b/jni/pjproject-android/pjlib-util/include/pjlib-util/json.h
@@ -0,0 +1,228 @@
+/* $Id: json.h 4704 2014-01-16 05:30:46Z ming $ */
+/*
+ * Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+#ifndef __PJLIB_UTIL_JSON_H__
+#define __PJLIB_UTIL_JSON_H__
+
+
+/**
+ * @file json.h
+ * @brief PJLIB JSON Implementation
+ */
+
+#include <pj/types.h>
+#include <pj/list.h>
+#include <pj/pool.h>
+
+PJ_BEGIN_DECL
+
+/**
+ * @defgroup PJ_JSON JSON Writer and Loader
+ * @ingroup PJ_FILE_FMT
+ * @{
+ * This API implements JSON file format according to RFC 4627. It can be used
+ * to parse, write, and manipulate JSON documents.
+ */
+
+/**
+ * Type of JSON value.
+ */
+typedef enum pj_json_val_type
+{
+    PJ_JSON_VAL_NULL,		/**< Null value (null)			*/
+    PJ_JSON_VAL_BOOL,		/**< Boolean value (true, false)	*/
+    PJ_JSON_VAL_NUMBER,		/**< Numeric (float or fixed point)	*/
+    PJ_JSON_VAL_STRING,		/**< Literal string value.		*/
+    PJ_JSON_VAL_ARRAY,		/**< Array				*/
+    PJ_JSON_VAL_OBJ		/**< Object.				*/
+} pj_json_val_type;
+
+/* Forward declaration for JSON element */
+typedef struct pj_json_elem pj_json_elem;
+
+/**
+ * JSON list to store child elements.
+ */
+typedef struct pj_json_list
+{
+    PJ_DECL_LIST_MEMBER(pj_json_elem);
+} pj_json_list;
+
+/**
+ * This represents JSON element. A JSON element is basically a name/value
+ * pair, where the name is a string and the value can be one of null, boolean
+ * (true and false constants), number, string, array (containing zero or more
+ * elements), or object. An object can be viewed as C struct, that is a
+ * compound element containing other elements, each having name/value pair.
+ */
+struct pj_json_elem
+{
+    PJ_DECL_LIST_MEMBER(pj_json_elem);
+    pj_str_t		name;		/**< ELement name.		*/
+    pj_json_val_type	type;		/**< Element type.		*/
+    union
+    {
+	pj_bool_t	is_true;	/**< Boolean value.		*/
+	float		num;		/**< Number value.		*/
+	pj_str_t	str;		/**< String value.		*/
+	pj_json_list	children;	/**< Object and array children	*/
+    } value;				/**< Element value.		*/
+};
+
+/**
+ * Structure to be specified to pj_json_parse() to be filled with additional
+ * info when parsing failed.
+ */
+typedef struct pj_json_err_info
+{
+    unsigned	line;		/**< Line location of the error		*/
+    unsigned	col;		/**< Column location of the error	*/
+    int		err_char;	/**< The offending character.		*/
+} pj_json_err_info;
+
+/**
+ * Type of function callback to write JSON document in pj_json_writef().
+ *
+ * @param s		The string to be written to the document.
+ * @param size		The length of the string
+ * @param user_data	User data that was specified to pj_json_writef()
+ *
+ * @return		If the callback returns non-PJ_SUCCESS, it will
+ * 			stop the pj_json_writef() function and this error
+ * 			will be returned to caller.
+ */
+typedef pj_status_t (*pj_json_writer)(const char *s,
+				      unsigned size,
+				      void *user_data);
+
+/**
+ * Initialize null element.
+ *
+ * @param el		The element.
+ * @param name		Name to be given to the element, or NULL.
+ */
+PJ_DECL(void) pj_json_elem_null(pj_json_elem *el, pj_str_t *name);
+
+/**
+ * Initialize boolean element with the specified value.
+ *
+ * @param el		The element.
+ * @param name		Name to be given to the element, or NULL.
+ * @param val		The value.
+ */
+PJ_DECL(void) pj_json_elem_bool(pj_json_elem *el, pj_str_t *name,
+                                pj_bool_t val);
+
+/**
+ * Initialize number element with the specified value.
+ *
+ * @param el		The element.
+ * @param name		Name to be given to the element, or NULL.
+ * @param val		The value.
+ */
+PJ_DECL(void) pj_json_elem_number(pj_json_elem *el, pj_str_t *name,
+                                  float val);
+
+/**
+ * Initialize string element with the specified value.
+ *
+ * @param el		The element.
+ * @param name		Name to be given to the element, or NULL.
+ * @param val		The value.
+ */
+PJ_DECL(void) pj_json_elem_string(pj_json_elem *el, pj_str_t *name,
+                                  pj_str_t *val);
+
+/**
+ * Initialize element as an empty array
+ *
+ * @param el		The element.
+ * @param name		Name to be given to the element, or NULL.
+ */
+PJ_DECL(void) pj_json_elem_array(pj_json_elem *el, pj_str_t *name);
+
+/**
+ * Initialize element as an empty object
+ *
+ * @param el		The element.
+ * @param name		Name to be given to the element, or NULL.
+ */
+PJ_DECL(void) pj_json_elem_obj(pj_json_elem *el, pj_str_t *name);
+
+/**
+ * Add an element to an object or array.
+ *
+ * @param el		The object or array element.
+ * @param child		Element to be added to the object or array.
+ */
+PJ_DECL(void) pj_json_elem_add(pj_json_elem *el, pj_json_elem *child);
+
+/**
+ * Parse a JSON document in the buffer. The buffer MUST be NULL terminated,
+ * or if not then it must have enough size to put the NULL character.
+ *
+ * @param pool		The pool to allocate memory for creating elements.
+ * @param buffer	String buffer containing JSON document.
+ * @param size		Size of the document.
+ * @param err_info	Optional structure to be filled with info when
+ * 			parsing failed.
+ *
+ * @return		The root element from the document.
+ */
+PJ_DECL(pj_json_elem*) pj_json_parse(pj_pool_t *pool,
+                                     char *buffer,
+                                     unsigned *size,
+                                     pj_json_err_info *err_info);
+
+/**
+ * Write the specified element to the string buffer.
+ *
+ * @param elem		The element to be written.
+ * @param buffer	Output buffer.
+ * @param size		On input, it must be set to the size of the buffer.
+ * 			Upon successful return, this will be set to
+ * 			the length of the written string.
+ *
+ * @return		PJ_SUCCESS on success or the appropriate error.
+ */
+PJ_DECL(pj_status_t)   pj_json_write(const pj_json_elem *elem,
+                                     char *buffer, unsigned *size);
+
+/**
+ * Incrementally write the element to arbitrary medium using the specified
+ * callback to write the document chunks.
+ *
+ * @param elem		The element to be written.
+ * @param writer	Callback function which will be called to write
+ * 			text chunks.
+ * @param user_data	Arbitrary user data which will be given back when
+ * 			calling the callback.
+ *
+ * @return		PJ_SUCCESS on success or the appropriate error.
+ */
+PJ_DECL(pj_status_t)   pj_json_writef(const pj_json_elem *elem,
+                                      pj_json_writer writer,
+                                      void *user_data);
+
+/**
+ * @}
+ */
+
+PJ_END_DECL
+
+#endif	/* __PJLIB_UTIL_JSON_H__ */