Merge "chan_sip: Fix negotiation of iLBC 30."
authorJoshua Colp <jcolp@digium.com>
Wed, 12 Aug 2015 18:36:08 +0000 (13:36 -0500)
committerGerrit Code Review <gerrit2@gerrit.digium.api>
Wed, 12 Aug 2015 18:36:08 +0000 (13:36 -0500)
15 files changed:
configure
configure.ac
include/asterisk/autoconfig.h.in
include/asterisk/format.h
include/asterisk/time.h
main/Makefile
main/format.c
makeopts.in
res/res_format_attr_silk.c
res/res_http_websocket.c
res/res_pjsip.c
tests/test_core_format.c
tests/test_dns.c
tests/test_dns_query_set.c
tests/test_dns_recurring.c

index 25bfc58..9956476 100755 (executable)
--- a/configure
+++ b/configure
@@ -756,6 +756,10 @@ PBX_SUPPSERV
 SUPPSERV_DIR
 SUPPSERV_INCLUDE
 SUPPSERV_LIB
+PBX_RT
+RT_DIR
+RT_INCLUDE
+RT_LIB
 PBX_OPENSSL
 OPENSSL_DIR
 OPENSSL_INCLUDE
 
 
 
+RT_DESCRIP="Realtime functions"
+
+RT_DIR=${rt_DIR}
+
+PBX_RT=0
+
+
+
+
+
+
+
     SUPPSERV_DESCRIP="mISDN Supplemental Services"
     SUPPSERV_OPTION="suppserv"
     PBX_SUPPSERV=0
@@ -12978,6 +12994,112 @@ if test "x$JANSSON_LIB" == "x"; then
   as_fn_error $? "*** JSON support not found (this typically means the libjansson development package is missing)" "$LINENO" 5
 fi
 
+# See if clock_gettime is in librt
+
+if test "x${PBX_RT}" != "x1" -a "${USE_RT}" != "no"; then
+   pbxlibdir=""
+   # if --with-RT=DIR has been specified, use it.
+   if test "x${RT_DIR}" != "x"; then
+      if test -d ${RT_DIR}/lib; then
+         pbxlibdir="-L${RT_DIR}/lib"
+      else
+         pbxlibdir="-L${RT_DIR}"
+      fi
+   fi
+   pbxfuncname="clock_gettime"
+   if test "x${pbxfuncname}" = "x" ; then   # empty lib, assume only headers
+      AST_RT_FOUND=yes
+   else
+      ast_ext_lib_check_save_CFLAGS="${CFLAGS}"
+      CFLAGS="${CFLAGS} "
+      as_ac_Lib=`$as_echo "ac_cv_lib_rt_${pbxfuncname}" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${pbxfuncname} in -lrt" >&5
+$as_echo_n "checking for ${pbxfuncname} in -lrt... " >&6; }
+if eval \${$as_ac_Lib+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrt ${pbxlibdir}  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ${pbxfuncname} ();
+int
+main ()
+{
+return ${pbxfuncname} ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$as_ac_Lib=yes"
+else
+  eval "$as_ac_Lib=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+eval ac_res=\$$as_ac_Lib
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  AST_RT_FOUND=yes
+else
+  AST_RT_FOUND=no
+fi
+
+      CFLAGS="${ast_ext_lib_check_save_CFLAGS}"
+   fi
+
+   # now check for the header.
+   if test "${AST_RT_FOUND}" = "yes"; then
+      RT_LIB="${pbxlibdir} -lrt "
+      # if --with-RT=DIR has been specified, use it.
+      if test "x${RT_DIR}" != "x"; then
+         RT_INCLUDE="-I${RT_DIR}/include"
+      fi
+      RT_INCLUDE="${RT_INCLUDE} "
+      if test "x" = "x" ; then # no header, assume found
+         RT_HEADER_FOUND="1"
+      else                             # check for the header
+         ast_ext_lib_check_saved_CPPFLAGS="${CPPFLAGS}"
+         CPPFLAGS="${CPPFLAGS} ${RT_INCLUDE}"
+         ac_fn_c_check_header_mongrel "$LINENO" "" "ac_cv_header_" "$ac_includes_default"
+if test "x$ac_cv_header_" = xyes; then :
+  RT_HEADER_FOUND=1
+else
+  RT_HEADER_FOUND=0
+fi
+
+
+         CPPFLAGS="${ast_ext_lib_check_saved_CPPFLAGS}"
+      fi
+      if test "x${RT_HEADER_FOUND}" = "x0" ; then
+         RT_LIB=""
+         RT_INCLUDE=""
+      else
+         if test "x${pbxfuncname}" = "x" ; then                # only checking headers -> no library
+            RT_LIB=""
+         fi
+         PBX_RT=1
+         cat >>confdefs.h <<_ACEOF
+#define HAVE_RT 1
+_ACEOF
+
+      fi
+   fi
+fi
+
+
+
 
                if test "x${PBX_LIBXML2}" != "x1" -a "${USE_LIBXML2}" != "no"; then
                PBX_LIBXML2=0
@@ -13531,7 +13653,7 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
@@ -13577,7 +13699,7 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
@@ -13601,7 +13723,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
@@ -13646,7 +13768,7 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
@@ -13670,7 +13792,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
index 50a7c73..d22abdf 100644 (file)
@@ -506,6 +506,7 @@ AST_EXT_LIB_SETUP([SQLITE3], [SQLite], [sqlite3])
 AST_EXT_LIB_SETUP([SRTP], [Secure RTP], [srtp])
 AST_EXT_LIB_SETUP_OPTIONAL([SRTP_SHUTDOWN], [SRTP Library Shutdown Function], [SRTP], [srtp])
 AST_EXT_LIB_SETUP([OPENSSL], [OpenSSL Secure Sockets Layer], [ssl])
+AST_EXT_LIB_SETUP_OPTIONAL([RT], [Realtime functions], [rt])
 AST_EXT_LIB_SETUP([SUPPSERV], [mISDN Supplemental Services], [suppserv])
 AST_EXT_LIB_SETUP([FREETDS], [FreeTDS], [tds])
 AST_EXT_LIB_SETUP([TERMCAP], [Termcap], [termcap])
@@ -578,6 +579,9 @@ if test "x$JANSSON_LIB" == "x"; then
   AC_MSG_ERROR([*** JSON support not found (this typically means the libjansson development package is missing)])
 fi
 
+# See if clock_gettime is in librt
+AST_EXT_LIB_CHECK([RT], [rt], [clock_gettime])
+
 AST_EXT_TOOL_CHECK([LIBXML2], [xml2-config], , ,
         [#include <libxml/tree.h>
         #include <libxml/parser.h>],
index 965b329..17aac1d 100644 (file)
 /* Define to 1 if you have the `roundl' function. */
 #undef HAVE_ROUNDL
 
+/* Define to 1 if rt has the Realtime functions feature. */
+#undef HAVE_RT
+
 /* Define if your system has the RTLD_NOLOAD headers. */
 #undef HAVE_RTLD_NOLOAD
 
index c99c8f3..a5ca038 100644 (file)
@@ -120,6 +120,18 @@ struct ast_format_interface {
         */
        void (* const format_generate_sdp_fmtp)(const struct ast_format *format, unsigned int payload,
                struct ast_str **str);
+
+       /*!
+        * \since 13.6.0
+        * \brief Retrieve a particular format attribute setting
+        *
+        * \param format The format containing attributes
+        * \param name The name of the attribute to retrieve
+        *
+        * \retval NULL if the parameter is not set on the format
+        * \retval non-NULL the format attribute value
+        */
+       const void *(* const format_attribute_get)(const struct ast_format *format, const char *name);
 };
 
 /*!
@@ -204,6 +216,17 @@ struct ast_format *ast_format_attribute_set(const struct ast_format *format, con
        const char *value);
 
 /*!
+ * \since 13.6.0
+ *
+ * \param format The format to retrieve the attribute from
+ * \param name Attribute name
+ *
+ * \retval non-NULL the attribute value
+ * \retval NULL the attribute does not exist or is unset
+ */
+const void *ast_format_attribute_get(const struct ast_format *format, const char *name);
+
+/*!
  * \brief This function is used to have a media format aware module parse and interpret
  * SDP attribute information. Once interpreted this information is stored on the format
  * itself using Asterisk format attributes.
index f2382df..5294906 100644 (file)
 #ifndef _ASTERISK_TIME_H
 #define _ASTERISK_TIME_H
 
+#include "asterisk/autoconfig.h"
+
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
 
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
 #include "asterisk/inline_api.h"
 
 /* We have to let the compiler learn what types to use for the elements of a
@@ -142,6 +148,34 @@ struct timeval ast_tvnow(void),
 )
 
 /*!
+ * \brief Returns current timespec. Meant to avoid calling ast_tvnow() just to
+ * create a timespec from the timeval it returns.
+ */
+#if defined _POSIX_TIMERS && _POSIX_TIMERS > 0
+AST_INLINE_API(
+struct timespec ast_tsnow(void),
+{
+       struct timespec ts;
+       clock_gettime(CLOCK_REALTIME, &ts);
+       return ts;
+}
+)
+#else
+AST_INLINE_API(
+struct timespec ast_tsnow(void),
+{
+       struct timeval tv = ast_tvnow();
+       struct timespec ts;
+       /* Can't use designated initializer, because it does odd things with
+        * the AST_INLINE_API macro. Go figure. */
+       ts.tv_sec = tv.tv_sec;
+       ts.tv_nsec = tv.tv_usec * 1000;
+       return ts;
+}
+)
+#endif
+
+/*!
  * \brief Returns the sum of two timevals a + b
  */
 struct timeval ast_tvadd(struct timeval a, struct timeval b);
index bfdfb46..b25fb45 100644 (file)
@@ -41,6 +41,7 @@ AST_LIBS+=$(URIPARSER_LIB)
 AST_LIBS+=$(UUID_LIB)
 AST_LIBS+=$(CRYPT_LIB)
 AST_LIBS+=$(AST_CLANG_BLOCKS_LIBS)
+AST_LIBS+=$(RT_LIB)
 
 ifneq ($(findstring $(OSARCH), linux-gnu uclinux linux-uclibc kfreebsd-gnu),)
   ifneq ($(findstring LOADABLE_MODULES,$(MENUSELECT_CFLAGS)),)
index bbfb697..b9931e5 100644 (file)
@@ -298,6 +298,17 @@ struct ast_format *ast_format_attribute_set(const struct ast_format *format, con
        return interface->format_attribute_set(format, name, value);
 }
 
+const void *ast_format_attribute_get(const struct ast_format *format, const char *name)
+{
+       const struct ast_format_interface *interface = format->interface;
+
+       if (!interface || !interface->format_attribute_get) {
+               return NULL;
+       }
+
+       return interface->format_attribute_get(format, name);
+}
+
 struct ast_format *ast_format_parse_sdp_fmtp(const struct ast_format *format, const char *attributes)
 {
        const struct ast_format_interface *interface = format->interface;
index 69636f1..d91dc9b 100644 (file)
@@ -243,6 +243,8 @@ PRI_LIB=@PRI_LIB@
 RESAMPLE_INCLUDE=@RESAMPLE_INCLUDE@
 RESAMPLE_LIB=@RESAMPLE_LIB@
 
+RT_LIB=@RT_LIB@
+
 SS7_INCLUDE=@SS7_INCLUDE@
 SS7_LIB=@SS7_LIB@
 
index 3467f5a..f3f4382 100644 (file)
@@ -200,12 +200,36 @@ static struct ast_format *silk_set(const struct ast_format *format, const char *
        return cloned;
 }
 
+static const void *silk_get(const struct ast_format *format, const char *name)
+{
+       struct silk_attr *attr = ast_format_get_attribute_data(format);
+       unsigned int *val;
+
+       if (!strcasecmp(name, "sample_rate")) {
+               val = &attr->samplerate;
+       } else if (!strcasecmp(name, "max_bitrate")) {
+               val = &attr->maxbitrate;
+       } else if (!strcasecmp(name, "dtx")) {
+               val = &attr->dtx;
+       } else if (!strcasecmp(name, "fec")) {
+               val = &attr->fec;
+       } else if (!strcasecmp(name, "packetloss_percentage")) {
+               val = &attr->packetloss_percentage;
+       } else {
+               ast_log(LOG_WARNING, "unknown attribute type %s\n", name);
+               return NULL;
+       }
+
+       return val;
+}
+
 static struct ast_format_interface silk_interface = {
        .format_destroy = silk_destroy,
        .format_clone = silk_clone,
        .format_cmp = silk_cmp,
        .format_get_joint = silk_getjoint,
        .format_attribute_set = silk_set,
+       .format_attribute_get = silk_get,
        .format_parse_sdp_fmtp = silk_parse_sdp_fmtp,
        .format_generate_sdp_fmtp = silk_generate_sdp_fmtp,
 };
index 9e5c60d..7a2552e 100644 (file)
@@ -351,7 +351,7 @@ int AST_OPTIONAL_API_NAME(ast_websocket_write)(struct ast_websocket *session, en
        if (length == 126) {
                put_unaligned_uint16(&frame[2], htons(actual_length));
        } else if (length == 127) {
-               put_unaligned_uint64(&frame[2], htobe64(actual_length));
+               put_unaligned_uint64(&frame[2], htonll(actual_length));
        }
 
        ao2_lock(session);
index 25a35c0..04e16c4 100644 (file)
@@ -2645,6 +2645,12 @@ int ast_sip_create_rdata(pjsip_rx_data *rdata, char *packet, const char *src_nam
 {
        pj_str_t tmp;
 
+       /*
+        * Initialize the error list in case there is a parse error
+        * in the given packet.
+        */
+       pj_list_init(&rdata->msg_info.parse_err);
+
        rdata->tp_info.transport = PJ_POOL_ZALLOC_T(rdata->tp_info.pool, pjsip_transport);
        if (!rdata->tp_info.transport) {
                return -1;
@@ -2655,7 +2661,7 @@ int ast_sip_create_rdata(pjsip_rx_data *rdata, char *packet, const char *src_nam
        rdata->pkt_info.src_port = src_port;
 
        pjsip_parse_rdata(packet, strlen(packet), rdata);
-       if (!rdata->msg_info.msg) {
+       if (!rdata->msg_info.msg || !pj_list_empty(&rdata->msg_info.parse_err)) {
                return -1;
        }
 
index 12e44d2..2140029 100644 (file)
@@ -45,6 +45,7 @@ static int test_core_format_clone(const struct ast_format *src, struct ast_forma
 static enum ast_format_cmp_res test_core_format_cmp(const struct ast_format *format1, const struct ast_format *format2);
 static struct ast_format *test_core_format_get_joint(const struct ast_format *format1, const struct ast_format *format2);
 static struct ast_format *test_core_format_attribute_set(const struct ast_format *format, const char *name, const char *value);
+static const void *test_core_format_attribute_get(const struct ast_format *format, const char *name);
 static struct ast_format *test_core_format_parse_sdp_fmtp(const struct ast_format *format, const char *attributes);
 static void test_core_format_generate_sdp_fmtp(const struct ast_format *format, unsigned int payload, struct ast_str **str);
 
@@ -55,6 +56,7 @@ static struct ast_format_interface test_core_format_attr = {
        .format_cmp = &test_core_format_cmp,
        .format_get_joint = &test_core_format_get_joint,
        .format_attribute_set = &test_core_format_attribute_set,
+       .format_attribute_get = &test_core_format_attribute_get,
        .format_parse_sdp_fmtp = &test_core_format_parse_sdp_fmtp,
        .format_generate_sdp_fmtp = &test_core_format_generate_sdp_fmtp,
 };
@@ -202,6 +204,19 @@ static struct ast_format *test_core_format_attribute_set(const struct ast_format
        return clone;
 }
 
+/*! \brief Format attribute callback for retrieving an attribute */
+static const void *test_core_format_attribute_get(const struct ast_format *format, const char *name)
+{
+       struct test_core_format_pvt *pvt = ast_format_get_attribute_data(format);
+
+       if (!strcmp(name, "one")) {
+               return &pvt->field_one;
+       } else if (!strcmp(name, "two")) {
+               return &pvt->field_two;
+       }
+       return NULL;
+}
+
 /*! \brief Format attribute callback to construct a format from an SDP fmtp line */
 static struct ast_format *test_core_format_parse_sdp_fmtp(const struct ast_format *format, const char *attributes)
 {
@@ -333,6 +348,55 @@ AST_TEST_DEFINE(format_create_attr)
        return AST_TEST_PASS;
 }
 
+AST_TEST_DEFINE(format_retrieve_attr)
+{
+       RAII_VAR(struct ast_codec *, codec, NULL, ao2_cleanup);
+       RAII_VAR(struct ast_format *, format, NULL, ao2_cleanup);
+       RAII_VAR(struct ast_format *, format_w_attr, NULL, ao2_cleanup);
+
+       switch (cmd) {
+       case TEST_INIT:
+               info->name = __PRETTY_FUNCTION__;
+               info->category = TEST_CATEGORY;
+               info->summary = "Format attribute retrieval unit test";
+               info->description =
+                       "Test retrieval of format attributes";
+               return AST_TEST_NOT_RUN;
+       case TEST_EXECUTE:
+               break;
+       }
+
+       codec = ast_codec_get("test_core_format_codec", AST_MEDIA_TYPE_AUDIO, 8000);
+       if (!codec) {
+               ast_test_status_update(test, "Could not retrieve test_core_format_codec codec\n");
+               return AST_TEST_FAIL;
+       }
+
+       format = ast_format_create(codec);
+       if (!format) {
+               ast_test_status_update(test, "Could not create format using test_core_format_codec codec\n");
+               return AST_TEST_FAIL;
+       }
+
+       format_w_attr = ast_format_attribute_set(format, "one", "1");
+       if (!format_w_attr) {
+               ast_test_status_update(test, "Could not create format with attributes using test_core_format_codec codec\n");
+               return AST_TEST_FAIL;
+       }
+
+       if (*((int *)ast_format_attribute_get(format_w_attr, "one")) != 1) {
+               ast_test_status_update(test, "Could not retrieve valid format attribute\n");
+               return AST_TEST_FAIL;
+       }
+
+       if (ast_format_attribute_get(format_w_attr, "foo") != NULL) {
+               ast_test_status_update(test, "Retrieved invalid format attribute\n");
+               return AST_TEST_FAIL;
+       }
+
+       return AST_TEST_PASS;
+}
+
 AST_TEST_DEFINE(format_clone)
 {
        RAII_VAR(struct ast_codec *, codec, NULL, ao2_cleanup);
@@ -829,6 +893,43 @@ AST_TEST_DEFINE(format_attribute_set_without_interface)
        return AST_TEST_PASS;
 }
 
+AST_TEST_DEFINE(format_attribute_get_without_interface)
+{
+       RAII_VAR(struct ast_codec *, codec, NULL, ao2_cleanup);
+       RAII_VAR(struct ast_format *, format, NULL, ao2_cleanup);
+
+       switch (cmd) {
+       case TEST_INIT:
+               info->name = __PRETTY_FUNCTION__;
+               info->category = TEST_CATEGORY;
+               info->summary = "Format attribute retrieval unit test";
+               info->description =
+                       "Test that attribute retrieval on a format without an interface fails";
+               return AST_TEST_NOT_RUN;
+       case TEST_EXECUTE:
+               break;
+       }
+
+       codec = ast_codec_get("ulaw", AST_MEDIA_TYPE_AUDIO, 8000);
+       if (!codec) {
+               ast_test_status_update(test, "Could not retrieve built-in ulaw codec\n");
+               return AST_TEST_FAIL;
+       }
+
+       format = ast_format_create(codec);
+       if (!format) {
+               ast_test_status_update(test, "Could not create format using built-in codec\n");
+               return AST_TEST_FAIL;
+       }
+
+       if (ast_format_attribute_get(format, "bees") != NULL) {
+               ast_test_status_update(test, "Successfully retrieved an attribute on a format without an interface\n");
+               return AST_TEST_FAIL;
+       }
+
+       return AST_TEST_PASS;
+}
+
 AST_TEST_DEFINE(format_parse_sdp_fmtp_without_interface)
 {
        RAII_VAR(struct ast_codec *, codec, NULL, ao2_cleanup);
@@ -925,6 +1026,7 @@ static int unload_module(void)
 {
        AST_TEST_UNREGISTER(format_create);
        AST_TEST_UNREGISTER(format_create_attr);
+       AST_TEST_UNREGISTER(format_retrieve_attr);
        AST_TEST_UNREGISTER(format_clone);
        AST_TEST_UNREGISTER(format_cmp_same_codec);
        AST_TEST_UNREGISTER(format_attr_cmp_same_codec);
@@ -934,6 +1036,7 @@ static int unload_module(void)
        AST_TEST_UNREGISTER(format_joint_different_codec);
        AST_TEST_UNREGISTER(format_copy);
        AST_TEST_UNREGISTER(format_attribute_set_without_interface);
+       AST_TEST_UNREGISTER(format_attribute_get_without_interface);
        AST_TEST_UNREGISTER(format_parse_sdp_fmtp_without_interface);
        AST_TEST_UNREGISTER(format_parse_and_generate_sdp_fmtp);
 
@@ -955,6 +1058,7 @@ static int load_module(void)
 
        AST_TEST_REGISTER(format_create);
        AST_TEST_REGISTER(format_create_attr);
+       AST_TEST_REGISTER(format_retrieve_attr);
        AST_TEST_REGISTER(format_clone);
        AST_TEST_REGISTER(format_cmp_same_codec);
        AST_TEST_REGISTER(format_attr_cmp_same_codec);
@@ -964,6 +1068,7 @@ static int load_module(void)
        AST_TEST_REGISTER(format_joint_different_codec);
        AST_TEST_REGISTER(format_copy);
        AST_TEST_REGISTER(format_attribute_set_without_interface);
+       AST_TEST_REGISTER(format_attribute_get_without_interface);
        AST_TEST_REGISTER(format_parse_sdp_fmtp_without_interface);
        AST_TEST_REGISTER(format_parse_and_generate_sdp_fmtp);
 
index 9bbb7da..fbc329b 100644 (file)
@@ -676,7 +676,7 @@ static void *resolution_thread(void *dns_query)
        static const size_t V4_BUFSIZE = sizeof(struct in_addr);
        char v4_buf[V4_BUFSIZE];
 
-       clock_gettime(CLOCK_REALTIME, &timeout);
+       timeout = ast_tsnow();
        timeout.tv_sec += 5;
 
        ast_mutex_lock(&test_resolver_data.lock);
@@ -1071,7 +1071,7 @@ AST_TEST_DEFINE(resolver_resolve_async)
                goto cleanup;
        }
 
-       clock_gettime(CLOCK_REALTIME, &timeout);
+       timeout = ast_tsnow();
        timeout.tv_sec += 10;
        ast_mutex_lock(&async_data->lock);
        while (!async_data->complete) {
@@ -1261,7 +1261,7 @@ AST_TEST_DEFINE(resolver_resolve_async_cancel)
                goto cleanup;
        }
 
-       clock_gettime(CLOCK_REALTIME, &timeout);
+       timeout = ast_tsnow();
        timeout.tv_sec += 10;
        ast_mutex_lock(&async_data->lock);
        while (!async_data->complete) {
index 98a6051..aeb61c7 100644 (file)
@@ -245,7 +245,7 @@ static enum ast_test_result_state query_set_test(struct ast_test *test, int reso
                }
        }
 
-       clock_gettime(CLOCK_REALTIME, &timeout);
+       timeout = ast_tsnow();
        timeout.tv_sec += 10;
 
        ast_mutex_lock(&qsdata->lock);
index b5736c2..d1add6e 100644 (file)
@@ -210,7 +210,7 @@ static int wait_for_resolution(struct ast_test *test, struct recurring_data *rda
        struct timespec timeout;
        int secdiff;
 
-       clock_gettime(CLOCK_REALTIME, &begin);
+       begin = ast_tsnow();
 
        timeout.tv_sec = begin.tv_sec + 20;
        timeout.tv_nsec = begin.tv_nsec;
@@ -229,7 +229,7 @@ static int wait_for_resolution(struct ast_test *test, struct recurring_data *rda
        }
 
        rdata->query_complete = 0;
-       clock_gettime(CLOCK_REALTIME, &end);
+       end = ast_tsnow();
 
        secdiff = end.tv_sec - begin.tv_sec;
 
@@ -504,7 +504,7 @@ AST_TEST_DEFINE(recurring_query_cancel_between)
        /* Query has been canceled, so let's wait to make sure that we don't get
         * told another query has occurred.
         */
-       clock_gettime(CLOCK_REALTIME, &timeout);
+       timeout = ast_tsnow();
        timeout.tv_sec += 10;
 
        ast_mutex_lock(&rdata->lock);
@@ -602,7 +602,7 @@ AST_TEST_DEFINE(recurring_query_cancel_during)
        }
 
        /* Now ensure that no more queries get completed after cancellation. */
-       clock_gettime(CLOCK_REALTIME, &timeout);
+       timeout = ast_tsnow();
        timeout.tv_sec += 10;
 
        ast_mutex_lock(&rdata->lock);