Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package re for openSUSE:Factory checked in 
at 2026-09-04 12:38:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/re (Old)
 and      /work/SRC/openSUSE:Factory/.re.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "re"

Fri Sep  4 12:38:37 2026 rev:24 rq:1375427 version:4.11.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/re/re.changes    2026-07-23 23:14:14.712499308 
+0200
+++ /work/SRC/openSUSE:Factory/.re.new.1265/re.changes  2026-09-04 
12:39:07.963892668 +0200
@@ -1,0 +2,18 @@
+Wed Sep  2 13:48:24 UTC 2026 - Martin Hauke <[email protected]>
+
+- Update to version 4.11.0
+  Security Fixes
+  * libre's HTTP Basic auth verifier accept empty or prefix
+    credential blindly fixed by #1601.
+  * libre allows one spoofed UDP packet forges RTCP control
+    messages fixed by #1600.
+  Changes
+  * btrace: optimize addr2line handling.
+  * aubuf: remove adaptive mode.
+  * httpauth/basic: fix mem_seccmp cmp length.
+  * srtcp: fix/add AES-GCM no encryption flag auth.
+  * mem_pool: fix mem_pool_flush free list handling.
+  * mem/mem_pool: check mem_pool_borrow_extend empty pool param.
+  * json/decode_odict: fix possible container dangling pointer.
+
+-------------------------------------------------------------------

Old:
----
  re-4.10.0.tar.gz

New:
----
  re-4.11.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ re.spec ++++++
--- /var/tmp/diff_new_pack.vITCwO/_old  2026-09-04 12:39:08.742920035 +0200
+++ /var/tmp/diff_new_pack.vITCwO/_new  2026-09-04 12:39:08.744920105 +0200
@@ -17,10 +17,10 @@
 #
 
 
-%global sover   44
+%global sover   45
 %global libname lib%{name}%{sover}
 Name:           re
-Version:        4.10.0
+Version:        4.11.0
 Release:        0
 Summary:        Library for real-time communications with async I/O support
 License:        BSD-3-Clause

++++++ re-4.10.0.tar.gz -> re-4.11.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/CHANGELOG.md new/re-4.11.0/CHANGELOG.md
--- old/re-4.10.0/CHANGELOG.md  2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/CHANGELOG.md  2026-08-24 13:03:29.000000000 +0200
@@ -5,6 +5,21 @@
 The format is based on [Keep a 
Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic 
Versioning](https://semver.org/spec/v2.0.0.html).
 
+## v4.11.0 - 2026-08-25
+
+## What's Changed
+* btrace: optimize addr2line handling by @sreimers in 
https://github.com/baresip/re/pull/1598
+* aubuf: remove adaptive mode by @cspiel1 in 
https://github.com/baresip/re/pull/1597
+* httpauth/basic: fix mem_seccmp cmp length by @sreimers in 
https://github.com/baresip/re/pull/1601
+* srtcp: fix/add AES-GCM no encryption flag auth by @sreimers in 
https://github.com/baresip/re/pull/1600
+* mem_pool: fix mem_pool_flush free list handling by @sreimers in 
https://github.com/baresip/re/pull/1604
+* mem/mem_pool: check mem_pool_borrow_extend empty pool param by @sreimers in 
https://github.com/baresip/re/pull/1606
+* json/decode_odict: fix possible container dangling pointer by @sreimers in 
https://github.com/baresip/re/pull/1605
+
+
+**Full Changelog**: https://github.com/baresip/re/compare/v4.10.0...v4.11.0
+
+
 ## v4.10.0 - 2026-07-22
 
 ### What's Changed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/CMakeLists.txt new/re-4.11.0/CMakeLists.txt
--- old/re-4.10.0/CMakeLists.txt        2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/CMakeLists.txt        2026-08-24 13:03:29.000000000 +0200
@@ -14,13 +14,13 @@
 cmake_minimum_required(VERSION 3.18...4.0)
 
 project(re
-  VERSION 4.10.0
+  VERSION 4.11.0
   LANGUAGES C
   HOMEPAGE_URL https://github.com/baresip/re
   DESCRIPTION "Generic library for real-time communications"
 )
 
-set(PROJECT_SOVERSION 44) # bump if ABI breaks
+set(PROJECT_SOVERSION 45) # bump if ABI breaks
 
 # Pre-release identifier, comment out on a release
 # Increment for breaking changes (dev2, dev3...)
@@ -416,7 +416,6 @@
   rem/au/fmt.c
   rem/au/util.c
   rem/aubuf/aubuf.c
-  rem/aubuf/ajb.c
   rem/auconv/auconv.c
   rem/aufile/aufile.c
   rem/aufile/wave.c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/include/rem_aubuf.h 
new/re-4.11.0/include/rem_aubuf.h
--- old/re-4.10.0/include/rem_aubuf.h   2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/include/rem_aubuf.h   2026-08-24 13:03:29.000000000 +0200
@@ -5,16 +5,9 @@
  */
 struct aubuf;
 
-enum aubuf_mode {
-       AUBUF_FIXED,
-       AUBUF_ADAPTIVE
-};
-
 int  aubuf_alloc(struct aubuf **abp, size_t min_sz, size_t max_sz);
 void aubuf_set_id(struct aubuf *ab, struct pl *id);
 void aubuf_set_live(struct aubuf *ab, bool live);
-void aubuf_set_mode(struct aubuf *ab, enum aubuf_mode mode);
-void aubuf_set_silence(struct aubuf *ab, double silence);
 int  aubuf_resize(struct aubuf *ab, size_t min_sz, size_t max_sz);
 int  aubuf_write_auframe(struct aubuf *ab, const struct auframe *af);
 int  aubuf_append_auframe(struct aubuf *ab, struct mbuf *mb,
@@ -27,7 +20,6 @@
 size_t aubuf_cur_size(const struct aubuf *ab);
 size_t aubuf_maxsz(const struct aubuf *ab);
 bool aubuf_started(const struct aubuf *ab);
-void aubuf_drop_auframe(struct aubuf *ab, const struct auframe *af);
 
 
 static inline int aubuf_append(struct aubuf *ab, struct mbuf *mb)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/mk/Doxyfile new/re-4.11.0/mk/Doxyfile
--- old/re-4.10.0/mk/Doxyfile   2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/mk/Doxyfile   2026-08-24 13:03:29.000000000 +0200
@@ -4,7 +4,7 @@
 # Project related configuration options
 #---------------------------------------------------------------------------
 PROJECT_NAME           = libre
-PROJECT_NUMBER         = 4.10.0
+PROJECT_NUMBER         = 4.11.0
 OUTPUT_DIRECTORY       = ../re-dox
 CREATE_SUBDIRS         = NO
 OUTPUT_LANGUAGE        = English
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/rem/aubuf/ajb.c 
new/re-4.11.0/rem/aubuf/ajb.c
--- old/re-4.10.0/rem/aubuf/ajb.c       2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/rem/aubuf/ajb.c       1970-01-01 01:00:00.000000000 +0100
@@ -1,447 +0,0 @@
-/**
- * @file ajb.c  Adaptive Jitter Buffer algorithm
- *
- * Copyright (C) 2022 Commend.com - [email protected]
- *
- * The adaptive jitter buffer algorithm (ajb) for audio buffer can be activated
- * by invoking `aubuf_set_mode(ab, AUBUF_ADAPTIVE)`. The ajb algorithm
- * increases the number of packets in the audio buffer during periods of high
- * network jitter. It reduces the number of packets if the network condition
- * improves.
- *
- * @section jitter Computing the jitter
- *
- * The jitter \f$j\f$ is the moving mean absolute deviation (MAD) of the
- * time period buffered in `aubuf` \f$D\f$. It is estimated by the iterative
- * formula
- *
- * \f$j_n = j_{n-1} + (|D - \overline{D}| - j_{n-1})\kappa\f$
- *
- * where \f$\kappa\f$ is the weight that influences how fast the jitter value
- * changes.
- *
- * We choose a higher value for the weight \f$\kappa\f$ if
- * \f$|D - \overline{D}| > j_{n-1}\f$. Thus the jitter rises fast if e.g.
- * suddenly a network jitter appears. In contrast when the network condition
- * improves the jitter value slowly shrinks. The reason for different
- * rising and falling speed is that we have to react fast to avoid buffer
- * under-runs, whereas reducing of the latency is not so time-critical.
- *
- * In the following sections we will describe how the computed jitter is used
- * to detect situations where the buffered packets should be increased due to
- * a high jitter. We call this situation **Low** situation. When the jitter
- * shrinks below some specific value it is a good idea to reduce the buffer in
- * order to reduce the audio latency. We call this situation **High**
- * situation. Surely, the Low/High situations have to be decided somehow.
- *
- * @section reduce_increase Reduce/Increase buffered packets
- *
- * When a Low situation is detected we increase the number of packets in
- * `aubuf` by holding back a packet during one call to function
- * `aubuf_read_auframe()`. While when a High situation is detected we reduce
- * the number of packets by reading another audio frame. This overwrites one
- * frame. By means of a silence detection `aubuf` is able to drop frames that
- * are not important for the speech quality. This reduces the audio latency
- * down to the value before the High situation.
- *
- * @section smooth_latency Computing a smooth latency
- *
- * The audio frames that are buffered at a concrete point in time in `aubuf`
- * lead to a temporary latency value \f$D\f$. Let \f$f_0, ..., f_m\f$ be the
- * audio frames currently stored in `aubuf`. Then
- *
- * \f$D = t_m - t_0 + D_p\f$
- *
- * where \f$t_i\f$ is the timestamp of frame \f$f_i\f$ and \f$D_p\f$ is the
- * packet time `ptime`. The packet time is a constant that is specified at the
- * beginning of a SIP call.
- *
- * The temporary latency \f$D\f$ is discontinuous over time and not adequate
- * for deciding or detecting Low or High situations. Therefore we again use an
- * exponential moving average (EMA) to smooth \f$D\f$. Let \f$\kappa\f$ be an
- * adequate moving average speed factor, then the smoothed latency
- *
- * \f$l_n = l_{n-1} + (D - l_{n-1})\kappa\f$.
- *
- * We use \f$l_n\f$ to estimate the average buffer time \f$\overline{D}\f$.
- * Low/High situations are decided when the smoothed latency \f$l_n\f$ runs out
- * of some boundaries that are computed from the jitter.
- *
- * @section low_high Deciding Low/High situations
- *
- * During each iteration (each call to `aubuf_write_frame()`) the jitter and
- * the latency are computed. Additionally we compute the bottom boundary
- * \f$D_b\f$ and the top boundary \f$D_t\f$ with
- *
- * \f$D_b = max(m . l_n, \frac{2}{3} D_p)\f$ and
- *
- * \f$D_t = max(M . l_n, D_b + D_p)\f$,
- *
- * where \f$1 < m < M\f$.
- *
- * Finally we have everything for deciding Low and High situations. That is if
- * \f$l_n\f$ moves out of the boundaries
- *
- * \f$D_b < l_n < D_t\f$,
- *
- * then we fire a Low/High.
- *
- * @section early_adjustment Early adjustment of the latency
- *
- * If we detect a Low/High situation we increase/reduce the number of packets.
- * Now we immediately increment/decrement the smoothed latency \f$l_n\f$ by
- * \f$D_p\f$.
- * Thus early adjustment for a Low situation is
- *
- * \f$l_{n+1} = l_n + D_p\f$
- *
- * and for a High situation
- *
- * \f$l_{n+1} = l_n - D_p\f$.
- *
- * This avoids multiple Low/High detections in a row.
- *
- * @section silence Silence detection
- *
- * It is preferable to drop an audio frame only if it contains nearly silence.
- *
- * @section symbols Math symbols vs. C-variables
- *
- * In order to avoid float computation we use micro seconds to measure the time
- * differences, the jitter and buffer time. Symbols used in this document are
- * mapped to the C-variables in `src/aubuf/ajb.c` like this table shows:
- *
- * Symbol  |Variable
- * --------|--------
- *  \f$j_n\f$   | `jitter`
- *  \f$D\f$     | `buftime`
- *  \f$l_n\f$   | `avbuftime`
- *  \f$D_b\f$   | `bufmin`
- *  \f$D_t\f$   | `bufmax`
- *  \f$D_p\f$   | `ptime`
- */
-
-#include <stdlib.h>
-#include <re.h>
-#include <rem_au.h>
-#include <rem_aulevel.h>
-#include <rem_auframe.h>
-#include <rem_aubuf.h>
-#include "ajb.h"
-
-#define DEBUG_LEVEL 5
-
-/**
- * @defgroup The adaptive jitter computation is done by means of an exponential
- * moving average (EMA).
- *j_i = j_{i-1} + a (c - j_{i-1})
- *
- * Where $a$ ist the EMA coefficient and $c$ is the current value.
- */
-
-enum {
-       JITTER_EMA_COEFF   = 512,  /* Divisor for jitter EMA coefficient */
-       JITTER_UP_SPEED    = 64,   /* 64 times faster up than down       */
-       BUFTIME_EMA_COEFF  = 128,  /* Divisor for Buftime EMA coeff.     */
-       BUFTIME_LO         = 125,  /* 125% of jitter                     */
-       BUFTIME_HI         = 175,  /* 175% of jitter                     */
-       SKEW_MAX           = 10,   /* Max skew in [ms]                   */
-};
-
-
-/** Adaptive jitter buffer statistics */
-struct ajb {
-       int32_t jitter;      /**< Jitter in [us]                  */
-       mtx_t *lock;
-
-       uint64_t ts;         /**< previous timestamp              */
-       uint64_t ts0;        /**< reference timestamp             */
-       uint64_t tr0;        /**< reference time of arrival       */
-       uint64_t tr00;       /**< arrival of first packet         */
-#ifdef RE_AUBUF_TRACE
-       struct {
-               int32_t d;
-               uint32_t buftime;
-               uint32_t bufmin;
-               uint32_t bufmax;
-               enum ajb_state as;
-       } plot;
-
-       char buf[136];       /**< Buffer for trace                */
-#endif
-
-       enum ajb_state as;   /**< computed jitter buffer state    */
-
-       int32_t avbuftime;   /**< average buffered time [us]      */
-       bool started;        /**< Started flag                    */
-       size_t wish_sz;      /**< Wish size of buffer [Bytes]     */
-       uint32_t dropped;    /**< Dropped audio frames counter    */
-       double silence;      /**< Silence audio level             */
-};
-
-
-static void destructor(void *arg)
-{
-       struct ajb *ajb = arg;
-
-       mem_deref(ajb->lock);
-}
-
-
-#ifdef RE_AUBUF_TRACE
-static void plot_ajb(struct ajb *ajb, uint64_t tr)
-{
-       uint32_t treal;
-
-       if (!ajb->tr00)
-               ajb->tr00 = tr;
-
-       treal = (uint32_t) (tr - ajb->tr00);
-       re_snprintf(ajb->buf, sizeof(ajb->buf),
-                   "%s, 0x%p, %u, %i, %u, %u, %u, %i, %i, %u",
-                       __func__,               /* row 1  - grep */
-                       ajb,                    /* row 2  - grep optional */
-                       treal,                  /* row 3  - plot x-axis */
-                       ajb->plot.d,            /* row 4  - plot */
-                       ajb->jitter,            /* row 5  - plot */
-                       ajb->plot.buftime,      /* row 6  - plot */
-                       ajb->avbuftime,         /* row 7  - plot */
-                       ajb->plot.bufmin,       /* row 8  - plot */
-                       ajb->plot.bufmax,       /* row 9  - plot */
-                       ajb->plot.as);          /* row 10 - plot */
-       re_trace_event("ajb", "plot", 'P', NULL, RE_TRACE_ARG_STRING_COPY,
-                      "line", ajb->buf);
-}
-#endif
-
-
-/**
- * Initializes the adaptive jitter buffer statistics
- *
- * @param silence Silence audio level
- * @param wish_sz Wish size of buffer [Bytes]
- *
- * @return ajb    Adaptive jitter buffer statistics
- */
-struct ajb *ajb_alloc(double silence, size_t wish_sz)
-{
-       struct ajb *ajb;
-       int err;
-
-       ajb = mem_zalloc(sizeof(*ajb), destructor);
-       if (!ajb)
-               return NULL;
-
-       err = mutex_alloc(&ajb->lock);
-       if (err)
-               goto out;
-
-       ajb->ts0 = 0;
-       ajb->tr0 = 0;
-       ajb->as = AJB_GOOD;
-       ajb->silence = silence;
-       ajb->wish_sz = wish_sz;
-
-out:
-       if (err)
-               ajb = mem_deref(ajb);
-
-       return ajb;
-}
-
-
-void ajb_reset(struct ajb *ajb)
-{
-       if (!ajb)
-               return;
-
-       mtx_lock(ajb->lock);
-       ajb->ts  = 0;
-       ajb->ts0 = 0;
-       ajb->tr0 = 0;
-
-       /* We start with wish size. */
-       ajb->started = false;
-       ajb->as = AJB_GOOD;
-       mtx_unlock(ajb->lock);
-}
-
-
-/**
- * Computes the jitter for audio frame arrival.
- *
- * @param ajb     Adaptive jitter buffer statistics
- * @param af      Audio frame
- * @param cur_sz  Current aubuf size
- */
-void ajb_calc(struct ajb *ajb, const struct auframe *af, size_t cur_sz)
-{
-       uint64_t tr;                       /**< Real time in [us]            */
-       uint32_t buftime, bufmax, bufmin;  /**< Buffer time in [us]          */
-       uint32_t bufwish;                  /**< Buffer wish time in [us]     */
-       int32_t d;                         /**< Time shift in [us]           */
-       int32_t da;                        /**< Absolut time shift in [us]   */
-       int32_t s;                         /**< EMA coefficient              */
-       uint64_t ts;                       /**< Time stamp                   */
-       uint64_t ds;                       /**< Time stamp duration          */
-       uint32_t ptime;                    /**< Packet time [us]             */
-       size_t szdiv;
-
-       if (!ajb || !af || !af->srate)
-               return;
-
-       mtx_lock(ajb->lock);
-       ts = af->timestamp;
-       tr = tmr_jiffies_usec();
-       if (!ajb->ts0)
-               goto out;
-
-       ds = ts - ajb->ts0;
-       d = (int32_t) (int64_t) ( (tr - ajb->tr0) - ds );
-       da = abs(d);
-
-       szdiv = af->srate * af->ch *  aufmt_sample_size(af->fmt) / 1000;
-       buftime = (uint32_t) (cur_sz * 1000 / szdiv);
-       bufwish = (uint32_t) (ajb->wish_sz * 1000 / szdiv);
-       if (ajb->started) {
-               ajb->avbuftime += ((int32_t) buftime - ajb->avbuftime) /
-                                 BUFTIME_EMA_COEFF;
-               if (ajb->avbuftime < 0)
-                       ajb->avbuftime = 0;
-       }
-       else {
-               /* Directly after "filling" of aubuf compute a good start value
-                * fitting to wish size. */
-               ajb->avbuftime = buftime;
-               ajb->jitter = ajb->avbuftime * 100 * 2 /
-                       (BUFTIME_LO + BUFTIME_HI);
-               ajb->started = true;
-       }
-
-       s = da > ajb->jitter ? JITTER_UP_SPEED : 1;
-
-       ajb->jitter += (da - ajb->jitter) * s / JITTER_EMA_COEFF;
-       if (ajb->jitter < 0)
-               ajb->jitter = 0;
-
-       bufmin = (uint32_t) ajb->jitter * BUFTIME_LO / 100;
-       bufmax = (uint32_t) ajb->jitter * BUFTIME_HI / 100;
-
-       ptime = (uint32_t) (af->sampc * AUDIO_TIMEBASE / (af->srate * af->ch));
-       bufmin = MAX(bufmin, ptime * 2 / 3);
-       if (bufwish >= ptime)
-               bufmin = MAX(bufmin, bufwish - ptime / 3);
-
-       bufmax = MAX(bufmax, bufmin + 7 * ptime / 6);
-
-       /* reset time base if a frame is missing or skew is too high */
-       if (ts - ajb->ts > ptime || da > SKEW_MAX * 1000)
-               ajb->ts0 = 0;
-
-       if ((uint32_t) ajb->avbuftime < bufmin)
-               ajb->as = AJB_LOW;
-       else if ((uint32_t) ajb->avbuftime > bufmax)
-               ajb->as = AJB_HIGH;
-       else
-               ajb->as = AJB_GOOD;
-
-#ifdef RE_AUBUF_TRACE
-       ajb->plot.d = d;
-       ajb->plot.buftime = buftime;
-       ajb->plot.bufmin  = bufmin;
-       ajb->plot.bufmax  = bufmax;
-       plot_ajb(ajb, tr / 1000);
-#endif
-out:
-       ajb->ts = ts;
-       if (!ajb->ts0) {
-               ajb->ts0 = ts;
-               ajb->tr0 = tr;
-       }
-       mtx_unlock(ajb->lock);
-}
-
-
-void ajb_set_ts0(struct ajb *ajb, uint64_t timestamp)
-{
-       if (!ajb)
-               return;
-
-       mtx_lock(ajb->lock);
-       ajb->ts  = timestamp;
-       ajb->ts0 = timestamp;
-       ajb->tr0 = tmr_jiffies_usec();
-       mtx_unlock(ajb->lock);
-}
-
-
-/**
- * Get the state of the Adaptive Jitter Buffer
- *
- * @param ajb Adaptive Jitter Buffer state
- * @param af  Audio frame
- *
- * @return Computed jitter buffer state
- */
-enum ajb_state ajb_get(struct ajb *ajb, struct auframe *af)
-{
-       enum ajb_state as = AJB_GOOD;
-       uint32_t ptime;      /**< Packet time [us]                */
-
-       if (!ajb || !af || !af->srate || !af->sampc)
-               return AJB_GOOD;
-
-       mtx_lock(ajb->lock);
-
-       /* ptime in [us] */
-       ptime = (uint32_t) (af->sampc * AUDIO_TIMEBASE / (af->srate * af->ch));
-       if (!ajb->avbuftime)
-               goto out;
-
-       if (ajb->as == AJB_GOOD ||
-           (ajb->silence < 0. && auframe_level(af) > ajb->silence))
-               goto out;
-
-       as = ajb->as;
-       if (as == AJB_HIGH) {
-               /* early adjustment of avbuftime */
-               ajb->avbuftime -= ptime;
-               ajb->as = AJB_GOOD;
-#ifdef RE_AUBUF_TRACE
-               ajb->plot.as = AJB_HIGH;
-               plot_ajb(ajb, tmr_jiffies());
-               ajb->plot.as = AJB_GOOD;
-#endif
-       }
-       else if (as == AJB_LOW) {
-               /* early adjustment */
-               ajb->avbuftime += ptime;
-               ajb->as = AJB_GOOD;
-#ifdef RE_AUBUF_TRACE
-               ajb->plot.as = AJB_LOW;
-               plot_ajb(ajb, tmr_jiffies());
-               ajb->plot.as = AJB_GOOD;
-#endif
-       }
-
-out:
-       mtx_unlock(ajb->lock);
-       return as;
-}
-
-
-int32_t ajb_debug(const struct ajb *ajb)
-{
-       int32_t jitter;
-
-       if (!ajb)
-               return 0;
-
-       mtx_lock(ajb->lock);
-       jitter = ajb->jitter;
-       mtx_unlock(ajb->lock);
-       re_printf("  ajb jitter: %d, ajb avbuftime: %d\n", jitter / 1000,
-                 ajb->avbuftime);
-
-       return jitter;
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/rem/aubuf/ajb.h 
new/re-4.11.0/rem/aubuf/ajb.h
--- old/re-4.10.0/rem/aubuf/ajb.h       2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/rem/aubuf/ajb.h       1970-01-01 01:00:00.000000000 +0100
@@ -1,20 +0,0 @@
-/**
- * @file ajb.h  Adaptive Jitter Buffer interface
- *
- * Copyright (C) 2022 Commend.com - [email protected]
- */
-
-enum ajb_state {
-       AJB_GOOD = 0,
-       AJB_LOW,
-       AJB_HIGH,
-};
-
-struct ajb;
-
-struct ajb *ajb_alloc(double silence, size_t wish_sz);
-void ajb_reset(struct ajb *ajb);
-void ajb_calc(struct ajb *ajb, const struct auframe *af, size_t sampc);
-enum ajb_state ajb_get(struct ajb *ajb, struct auframe *af);
-int32_t ajb_debug(const struct ajb *ajb);
-void ajb_set_ts0(struct ajb *ajb, uint64_t timestamp);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/rem/aubuf/aubuf.c 
new/re-4.11.0/rem/aubuf/aubuf.c
--- old/re-4.10.0/rem/aubuf/aubuf.c     2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/rem/aubuf/aubuf.c     2026-08-24 13:03:29.000000000 +0200
@@ -13,7 +13,6 @@
 #include <rem_aulevel.h>
 #include <rem_auframe.h>
 #include <rem_aubuf.h>
-#include "ajb.h"
 
 
 #define AUBUF_DEBUG 0
@@ -40,9 +39,6 @@
                size_t ur;
        } stats;
 
-       enum aubuf_mode mode;
-       struct ajb *ajb;         /**< Adaptive jitter buffer statistics      */
-       double silence;          /**< Silence volume in negative [dB]        */
        bool live;               /**< Live stream switch                     */
 };
 
@@ -68,7 +64,6 @@
        struct aubuf *ab = arg;
 
        mem_deref(ab->lock);
-       mem_deref(ab->ajb);
        mem_deref(ab->id);
        mem_deref(ab->pool);
 }
@@ -199,30 +194,6 @@
 }
 
 
-void aubuf_set_mode(struct aubuf *ab, enum aubuf_mode mode)
-{
-       if (!ab)
-               return;
-
-       ab->mode = mode;
-}
-
-
-/**
- * Sets the volume level for silence
- *
- * @param ab       Audio buffer
- * @param silence  Volume level in negative [dB]
- */
-void aubuf_set_silence(struct aubuf *ab, double silence)
-{
-       if (!ab)
-               return;
-
-       ab->silence = silence;
-}
-
-
 /**
  * Resize audio buffer (flushes aubuf)
  *
@@ -331,7 +302,6 @@
        struct mbuf *mb;
        size_t sz;
        size_t sample_size;
-       bool ajb;
        int err;
 
        if (!ab || !af)
@@ -354,12 +324,8 @@
 
        mtx_lock(ab->lock);
        mem_deref(mb);
-       ajb = !ab->fill_sz && ab->ajb;
        mtx_unlock(ab->lock);
 
-       if (ajb)
-               ajb_calc(ab->ajb, af, ab->cur_sz);
-
        return err;
 }
 
@@ -375,7 +341,6 @@
 {
        size_t sz;
        bool filling;
-       enum ajb_state as;
        bool drop;
 
        if (!ab || !af)
@@ -385,18 +350,6 @@
 
        mtx_lock(ab->lock);
 
-       if (!ab->ajb && ab->mode == AUBUF_ADAPTIVE)
-               ab->ajb = ajb_alloc(ab->silence, ab->wish_sz);
-
-       as = ajb_get(ab->ajb, af);
-       if (as == AJB_LOW) {
-#if AUBUF_DEBUG
-               (void)re_printf("aubuf: inc buffer due to high jitter\n");
-               ajb_debug(ab->ajb);
-#endif
-               goto out;
-       }
-
        RE_TRACE_ID_INSTANT_I("aubuf", "cur_sz_ms",
                              auframe_bytes_to_ms(af, ab->cur_sz), ab->id);
 
@@ -406,9 +359,6 @@
                        RE_TRACE_ID_INSTANT("aubuf", "underrun", ab->id);
                }
 
-               if (!ab->fill_sz)
-                       ajb_set_ts0(ab->ajb, 0);
-
                filling = ab->fill_sz > 0;
                memset(af->sampv, 0, sz);
                if (filling) {
@@ -431,13 +381,6 @@
 
        ab->started = true;
        read_auframe(ab, af);
-       if (as == AJB_HIGH) {
-#if AUBUF_DEBUG
-               (void)re_printf("aubuf: drop a frame to reduce latency\n");
-               ajb_debug(ab->ajb);
-#endif
-               read_auframe(ab, af);
-       }
 
  out:
 
@@ -517,7 +460,6 @@
        ab->ts      = 0;
 
        mtx_unlock(ab->lock);
-       ajb_reset(ab->ajb);
 }
 
 
@@ -627,20 +569,3 @@
 
        list_sort(&ab->afl, frame_less_equal, NULL);
 }
-
-
-/**
- * This function is for reporting that the given audio frame was dropped. Its
- * timestamp is used to reset the ajb structure to avoid a jump of the computed
- * jitter value
- *
- * @param ab Audio buffer
- * @param af Audio frame
- */
-void aubuf_drop_auframe(struct aubuf *ab, const struct auframe *af)
-{
-       if (!ab)
-               return;
-
-       ajb_set_ts0(ab->ajb, af->timestamp);
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/src/btrace/btrace.c 
new/re-4.11.0/src/btrace/btrace.c
--- old/re-4.10.0/src/btrace/btrace.c   2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/src/btrace/btrace.c   2026-08-24 13:03:29.000000000 +0200
@@ -93,21 +93,54 @@
                                   ((j + 1) < bt->len) ? ", " : "");
                }
                break;
-       case BTRACE_NEWLINE:
+       case BTRACE_NEWLINE: {
+               struct pl files[BTRACE_SZ];
+               struct pl addrs[BTRACE_SZ];
+               char addr2l[512]     = {0};
+               char addr2l_out[256] = {0};
+
+               for (size_t j = 0; j < bt->len; j++) {
+                       files[j] = pl_null;
+                       addrs[j] = pl_null;
+                       re_regex(symbols[j], str_len(symbols[j]),
+                                "[^(]+([^)]+", &files[j], &addrs[j]);
+               }
+
                for (size_t j = 0; j < bt->len; j++) {
                        re_hprintf(pf, "%s\n", symbols[j]);
-#ifdef LINUX
-                       struct pl file       = PL_INIT;
-                       struct pl addr       = PL_INIT;
-                       char addr2l[512]     = {0};
-                       char addr2l_out[256] = {0};
                        FILE *pipe;
+                       int off = 0;
 
-                       re_regex(symbols[j], str_len(symbols[j]),
-                                "[^(]+([^)]+", &file, &addr);
+                       /* check already handled as part of a group */
+                       if (!files[j].l)
+                               continue;
 
-                       (void)re_snprintf(addr2l, sizeof(addr2l),
-                                   "addr2line -p -f -e %r %r", &file, &addr);
+#ifdef __clang__
+                       off = re_snprintf(addr2l, sizeof(addr2l),
+                                         "llvm-addr2line -p -f -e %r %r",
+                                         &files[j], &addrs[j]);
+#else
+                       off = re_snprintf(addr2l, sizeof(addr2l),
+                                         "addr2line -p -f -e %r %r",
+                                         &files[j], &addrs[j]);
+#endif
+                       if (off < 0)
+                               break;
+
+                       /* group addresses */
+                       for (size_t next = j + 1; next < bt->len; next++) {
+                               if (pl_cmp(&files[j], &files[next]) != 0)
+                                       break;
+
+                               int n = re_snprintf(addr2l + off,
+                                                   sizeof(addr2l) - off,
+                                                   " %r", &addrs[next]);
+                               if (n < 0)
+                                       break;
+
+                               off += n;
+                               files[next] = pl_null;
+                       }
 
                        pipe = popen(addr2l, "r");
                        if (!pipe)
@@ -118,9 +151,9 @@
                        }
 
                        pclose(pipe);
-#endif
                }
                break;
+       }
        case BTRACE_JSON:
                re_hprintf(pf, "[");
                for (size_t j = 0; j < bt->len; j++) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/src/httpauth/basic.c 
new/re-4.11.0/src/httpauth/basic.c
--- old/re-4.10.0/src/httpauth/basic.c  2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/src/httpauth/basic.c  2026-08-24 13:03:29.000000000 +0200
@@ -197,7 +197,7 @@
        if (err)
                goto out;
 
-       if (mem_seccmp(mb->buf, (uint8_t *)c, clen) != 0)
+       if (clen != mb->end || mem_seccmp(mb->buf, (uint8_t *)c, clen) != 0)
                err = EACCES;
 
 out:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/src/json/decode_odict.c 
new/re-4.11.0/src/json/decode_odict.c
--- old/re-4.10.0/src/json/decode_odict.c       2026-07-22 11:43:10.000000000 
+0200
+++ new/re-4.11.0/src/json/decode_odict.c       2026-08-24 13:03:29.000000000 
+0200
@@ -32,8 +32,10 @@
                return err;
 
        err = odict_entry_add(o, name, type, oc);
+       if (!err)
+               h->arg = oc;
+
        mem_deref(oc);
-       h->arg = oc;
 
        return err;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/src/mem/mem_pool.c 
new/re-4.11.0/src/mem/mem_pool.c
--- old/re-4.10.0/src/mem/mem_pool.c    2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/src/mem/mem_pool.c    2026-08-24 13:03:29.000000000 +0200
@@ -215,6 +215,9 @@
  */
 struct mem_pool_entry *mem_pool_borrow_extend(struct mem_pool *pool)
 {
+       if (!pool)
+               return NULL;
+
        struct mem_pool_entry *e = mem_pool_borrow(pool);
        if (e)
                return e;
@@ -265,7 +268,11 @@
  */
 void mem_pool_flush(struct mem_pool *pool)
 {
+       if (!pool)
+               return;
+
        mtx_lock(pool->lock);
+       pool->freel = NULL;
        for (size_t i = 0; i < pool->nmemb; i++) {
                struct mem_pool_entry *e = pool->objs[i];
                if (pool->membdh)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/src/srtp/srtcp.c 
new/re-4.11.0/src/srtp/srtcp.c
--- old/re-4.10.0/src/srtp/srtcp.c      2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/src/srtp/srtcp.c      2026-08-24 13:03:29.000000000 +0200
@@ -71,7 +71,8 @@
                union vect128 iv;
                uint8_t *p = mbuf_buf(mb);
                uint8_t tag[GCM_TAGLEN];
-               const uint32_t ix_be = htonl(1L<<31 | strm->rtcp_index);
+               ep = rtcp->encrypted;
+               const uint32_t ix_be = htonl(ep << 31 | strm->rtcp_index);
 
                srtp_iv_calc_gcm(&iv, &rtcp->k_s, ssrc, strm->rtcp_index);
 
@@ -80,15 +81,25 @@
                /* The RTCP Header and Index is Associated Data */
                err  = aes_encr(rtcp->aes, NULL, &mb->buf[start],
                                mb->pos - start);
-               err |= aes_encr(rtcp->aes, NULL,
-                               (void *)&ix_be, sizeof(ix_be));
-               if (err)
-                       return err;
-
-               err = aes_encr(rtcp->aes, p, p, mbuf_get_left(mb));
                if (err)
                        return err;
 
+               if (rtcp->encrypted) {
+                       /* RFC 7714 9.2 (encrypted) */
+                       err = aes_encr(rtcp->aes, NULL, (void *)&ix_be,
+                                       sizeof(ix_be));
+                       err |= aes_encr(rtcp->aes, p, p, mbuf_get_left(mb));
+                       if (err)
+                               return err;
+               }
+               else {
+                       /* RFC 7714 9.3 (unencrypted) */
+                       err = aes_encr(rtcp->aes, NULL, p, mbuf_get_left(mb));
+                       err |= aes_encr(rtcp->aes, NULL, (void *)&ix_be,
+                                       sizeof(ix_be));
+                       if (err)
+                               return err;
+               }
                err = aes_get_authtag(rtcp->aes, tag, sizeof(tag));
                if (err)
                        return err;
@@ -98,7 +109,6 @@
                if (err)
                        return err;
 
-               ep = 1;
        }
 
        /* append E-bit and SRTCP-index */
@@ -215,7 +225,7 @@
                if (err)
                        return err;
        }
-       else if (rtcp->aes && ep && rtcp->mode == AES_MODE_GCM) {
+       else if (rtcp->aes && rtcp->mode == AES_MODE_GCM) {
 
                union vect128 iv;
                size_t tag_start;
@@ -226,9 +236,8 @@
                aes_set_iv(rtcp->aes, iv.u8);
 
                /* The RTP Header is Associated Data */
-               err  = aes_decr(rtcp->aes, NULL, &mb->buf[start],
+               err = aes_decr(rtcp->aes, NULL, &mb->buf[start],
                                pld_start - start);
-               err |= aes_decr(rtcp->aes, NULL, &mb->buf[eix_start], 4);
                if (err)
                        return err;
 
@@ -240,9 +249,29 @@
 
                tag_start = mb->end - GCM_TAGLEN;
 
-               err = aes_decr(rtcp->aes, p, p, tag_start - pld_start);
-               if (err)
-                       return err;
+               /*
+                * RFC 7714 section 9: "All SRTCP compound packets MUST be
+                * authenticated, but unlike SRTP, SRTCP packet encryption
+                * is optional."
+                */
+               if (ep) {
+                       /* RFC 7714 9.2 (encrypted) */
+                       err = aes_decr(rtcp->aes, NULL, &mb->buf[eix_start],
+                                      4);
+                       err |= aes_decr(rtcp->aes, p, p,
+                                       tag_start - pld_start);
+                       if (err)
+                               return err;
+               }
+               else {
+                       /* RFC 7714 9.3 (unencrypted) */
+                       err = aes_decr(rtcp->aes, NULL, p,
+                                      tag_start - pld_start);
+                       err |= aes_decr(rtcp->aes, NULL, &mb->buf[eix_start],
+                                       4);
+                       if (err)
+                               return err;
+               }
 
                err = aes_authenticate(rtcp->aes, &mb->buf[tag_start],
                                       GCM_TAGLEN);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/src/srtp/srtp.c 
new/re-4.11.0/src/srtp/srtp.c
--- old/re-4.10.0/src/srtp/srtp.c       2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/src/srtp/srtp.c       2026-08-24 13:03:29.000000000 +0200
@@ -47,6 +47,7 @@
 
        c->tag_len = tag_len;
        c->mode = mode;
+       c->encrypted = encrypted;
 
        err |= srtp_derive(k_e, key_b,       0x00+offs, key, key_b, s, s_b);
        err |= srtp_derive(k_a, sizeof(k_a), 0x01+offs, key, key_b, s, s_b);
@@ -54,7 +55,8 @@
        if (err)
                return err;
 
-       if (encrypted) {
+       /* AES-GCM always needs aes_alloc for Associated Data authentication */
+       if (encrypted || mode == AES_MODE_GCM) {
                err = aes_alloc(&c->aes, mode, k_e, key_b*8, NULL);
                if (err)
                        return err;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/src/srtp/srtp.h 
new/re-4.11.0/src/srtp/srtp.h
--- old/re-4.10.0/src/srtp/srtp.h       2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/src/srtp/srtp.h       2026-08-24 13:03:29.000000000 +0200
@@ -45,6 +45,7 @@
                struct hmac *hmac;  /**< HMAC Context                      */
                union vect128 k_s;  /**< Derived salting key (14 bytes)    */
                size_t tag_len;     /**< CTR Auth. tag length [bytes]      */
+               bool encrypted;     /**< Enable/Disable Encryption (RTCP)  */
        } rtp, rtcp;
 
        struct list streaml;        /**< SRTP-streams (struct srtp_stream) */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/test/httpauth.c 
new/re-4.11.0/test/httpauth.c
--- old/re-4.10.0/test/httpauth.c       2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/test/httpauth.c       2026-08-24 13:03:29.000000000 +0200
@@ -256,86 +256,67 @@
                        PL("Basic d3Jvbmc6Y3JlZGVudGlhbHM=="), "/my/home",
                        NULL, "retest", "retestpasswd", 0, EACCES
                },
+               {
+                       "Basic realm=\"/my/home\"",
+                       PL("Basic "),
+                       "/my/home", NULL, "retest", "retestpasswd", 0, EBADMSG
+               },
+               {
+                       "Basic realm=\"/my/home\"",
+                       PL("Basic ~"),
+                       "/my/home", NULL, "retest", "retestpasswd", 0, EACCES
+               }
        };
        unsigned int i;
        int err = 0;
 
+       struct httpauth_basic_req *req = NULL;
+       struct mbuf *mb = NULL;
        for (i = 0; i < RE_ARRAY_SIZE(testv); ++i) {
-               struct httpauth_basic_req *req = NULL;
-               struct mbuf *mb = NULL;
-               int terr = 0;
                int tauth_err = 0;
 
-               terr = httpauth_basic_request(&req,
+               err = httpauth_basic_request(&req,
                        testv[i].realm, testv[i].charset);
-               if (terr == ENOMEM) {
-                       err = ENOMEM;
-                       break;
-               }
-               else if (terr != testv[i].err) {
-                       DEBUG_WARNING("basic req: expected error %d, got %m\n",
-                               testv[i].err, terr);
-                       err = terr;
-                       break;
-               }
-
-               if (str_casecmp(req->realm, testv[i].realm) != 0) {
-                       DEBUG_WARNING("basic req: expected realm %s, got %s\n",
-                               testv[i].realm, req->realm);
-                       err = EBADMSG;
-                       mem_deref(req);
-                       break;
-               }
+               TEST_ERR(err);
+               TEST_EQUALS(err, testv[i].err);
+               TEST_STRCMP(req->realm, str_len(req->realm), testv[i].realm,
+                           str_len(testv[i].realm));
 
                if (testv[i].charset) {
-                       if (str_casecmp(req->charset, testv[i].charset) != 0) {
-                               DEBUG_WARNING("basic req: expected charset"
-                                       "%s, got %s\n", testv[i].charset,
-                                       req->charset);
-                               err = EBADMSG;
-                               mem_deref(req);
-                               break;
-                       }
+                       TEST_STRCMP(req->charset, str_len(req->charset),
+                                   testv[i].charset,
+                                   str_len(testv[i].charset));
                }
 
                mb = mbuf_alloc(512);
                if (!mb) {
                        err = ENOMEM;
-                       mem_deref(req);
-                       break;
+                       TEST_ERR(err);
                }
 
                err = mbuf_printf(mb, "%H", httpauth_basic_request_print, req);
-               if (err) {
-                       mem_deref(mb);
-                       mem_deref(req);
-                       break;
-               }
+               TEST_ERR(err);
 
-               if (memcmp(testv[i].hval, mb->buf,
-                       str_len(testv[i].hval)) != 0) {
-                       DEBUG_WARNING("basic req: expected hval %s, got %s\n",
-                               testv[i].hval, mb->buf);
-                       err = EBADMSG;
-                       mem_deref(mb);
-                       mem_deref(req);
-                       break;
-               }
+               TEST_MEMCMP(testv[i].hval, str_len(testv[i].hval), mb->buf,
+                       str_len(testv[i].hval));
+
+               mb = mem_deref(mb);
 
-               mem_deref(mb);
                tauth_err = httpauth_basic_verify(&testv[i].hval_response,
                        testv[i].user, testv[i].passwd);
-               if (tauth_err != testv[i].auth_err) {
-                       DEBUG_WARNING("basic req:"
-                               "authentication expected %d, got %d\n",
-                               testv[i].auth_err, tauth_err);
-                       mem_deref(req);
-                       break;
+               if (tauth_err == ENOMEM) {
+                       err = ENOMEM;
+                       goto out;
                }
+               TEST_EQUALS(testv[i].auth_err, tauth_err);
 
-               mem_deref(req);
+               req = mem_deref(req);
        }
 
+out:
+       mem_deref(req);
+       mem_deref(mb);
+
        return err;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/test/mem_pool.c 
new/re-4.11.0/test/mem_pool.c
--- old/re-4.10.0/test/mem_pool.c       2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/test/mem_pool.c       2026-08-24 13:03:29.000000000 +0200
@@ -51,6 +51,9 @@
 
        TEST_ASSERT(!mem_pool_borrow(pool));
 
+       e = mem_pool_release(pool, e);
+       TEST_ASSERT(!e);
+
        mem_pool_flush(pool);
 
        for (int i = 0; i < NUM_OBJECTS; i++) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/re-4.10.0/test/srtp.c new/re-4.11.0/test/srtp.c
--- old/re-4.10.0/test/srtp.c   2026-07-22 11:43:10.000000000 +0200
+++ new/re-4.11.0/test/srtp.c   2026-08-24 13:03:29.000000000 +0200
@@ -410,7 +410,7 @@
 
 
 static int test_srtcp_loop(size_t offset, enum srtp_suite suite,
-                          enum rtcp_type type)
+                          enum rtcp_type type, enum srtp_flags flags)
 {
        struct srtp *ctx_tx = NULL, *ctx_rx = NULL;
        struct mbuf *mb1 = NULL, *mb2 = NULL;
@@ -436,10 +436,10 @@
                goto out;
        }
 
-       err  = srtp_alloc(&ctx_tx, suite, master_key, key_len + salt_len, 0);
+       err = srtp_alloc(&ctx_tx, suite, master_key, key_len + salt_len,
+                        flags);
        err |= srtp_alloc(&ctx_rx, suite, master_key, key_len + salt_len, 0);
-       if (err)
-               goto out;
+       TEST_ERR(err);
 
        for (i=0; i<10; i++) {
 
@@ -461,9 +461,7 @@
                        err = EINVAL;
                        break;
                }
-
-               if (err)
-                       break;
+               TEST_ERR(err);
 
                end = mb1->end;
 
@@ -474,8 +472,7 @@
                /* tx */
                mb1->pos = offset;
                err = srtcp_encrypt(ctx_tx, mb1);
-               if (err)
-                       break;
+               TEST_ERR(err);
 
                TEST_EQUALS(offset, mb1->pos);
                TEST_ASSERT(mb1->end != end);
@@ -485,8 +482,7 @@
                /* rx */
                mb1->pos = offset;
                err = srtcp_decrypt(ctx_rx, mb1);
-               if (err)
-                       break;
+               TEST_ERR(err);
 
                TEST_EQUALS(offset, mb1->pos);
                TEST_EQUALS(end, mb1->end);
@@ -929,7 +925,7 @@
 }
 
 
-static int test_srtp_unauth(enum srtp_suite suite)
+static int test_srtp_unauth(enum srtp_suite suite, enum srtp_flags flags)
 {
        struct srtp *srtp_tx, *srtp_rx;
        struct mbuf *mb = NULL;
@@ -950,7 +946,8 @@
        if (!mb)
                return ENOMEM;
 
-       err  = srtp_alloc(&srtp_tx, suite, master_key, key_len+salt_len, 0);
+       err = srtp_alloc(&srtp_tx, suite, master_key, key_len + salt_len,
+                        flags);
        err |= srtp_alloc(&srtp_rx, suite, master_key, key_len+salt_len, 0);
        if (err)
                goto out;
@@ -1122,7 +1119,11 @@
        err = test_srtp_reordering_and_wrap();
        TEST_ERR(err);
 
-       err = test_srtp_unauth(SRTP_AES_CM_128_HMAC_SHA1_32);
+       err = test_srtp_unauth(SRTP_AES_CM_128_HMAC_SHA1_32, 0);
+       TEST_ERR(err);
+
+       err = test_srtp_unauth(SRTP_AES_CM_128_HMAC_SHA1_32,
+                              SRTP_UNENCRYPTED_SRTCP);
        TEST_ERR(err);
 
        err = test_srtp_random(SRTP_AES_CM_128_HMAC_SHA1_32);
@@ -1142,25 +1143,25 @@
                return ESKIPPED;
        }
 
-       err = test_srtcp_loop(0, SRTP_AES_CM_128_HMAC_SHA1_32, RTCP_BYE);
+       err = test_srtcp_loop(0, SRTP_AES_CM_128_HMAC_SHA1_32, RTCP_BYE, 0);
        TEST_ERR(err);
 
-       err = test_srtcp_loop(0, SRTP_AES_CM_128_HMAC_SHA1_80, RTCP_BYE);
+       err = test_srtcp_loop(0, SRTP_AES_CM_128_HMAC_SHA1_80, RTCP_BYE, 0);
        TEST_ERR(err);
 
-       err = test_srtcp_loop(0, SRTP_AES_256_CM_HMAC_SHA1_32, RTCP_BYE);
+       err = test_srtcp_loop(0, SRTP_AES_256_CM_HMAC_SHA1_32, RTCP_BYE, 0);
        TEST_ERR(err);
 
-       err = test_srtcp_loop(0, SRTP_AES_256_CM_HMAC_SHA1_80, RTCP_BYE);
+       err = test_srtcp_loop(0, SRTP_AES_256_CM_HMAC_SHA1_80, RTCP_BYE, 0);
        TEST_ERR(err);
 
-       err = test_srtcp_loop(4, SRTP_AES_CM_128_HMAC_SHA1_32, RTCP_BYE);
+       err = test_srtcp_loop(4, SRTP_AES_CM_128_HMAC_SHA1_32, RTCP_BYE, 0);
        TEST_ERR(err);
 
-       err = test_srtcp_loop(4, SRTP_AES_CM_128_HMAC_SHA1_80, RTCP_BYE);
+       err = test_srtcp_loop(4, SRTP_AES_CM_128_HMAC_SHA1_80, RTCP_BYE, 0);
        TEST_ERR(err);
 
-       err = test_srtcp_loop(0, SRTP_AES_CM_128_HMAC_SHA1_32, RTCP_RR);
+       err = test_srtcp_loop(0, SRTP_AES_CM_128_HMAC_SHA1_32, RTCP_RR, 0);
        TEST_ERR(err);
 
        err = test_srtcp_libsrtp();
@@ -1195,7 +1196,10 @@
        err = test_srtp_loop(0, SRTP_AES_256_GCM, 65530);
        TEST_ERR(err);
 
-       err = test_srtp_unauth(SRTP_AES_256_GCM);
+       err = test_srtp_unauth(SRTP_AES_256_GCM, 0);
+       TEST_ERR(err);
+
+       err = test_srtp_unauth(SRTP_AES_256_GCM, SRTP_UNENCRYPTED_SRTCP);
        TEST_ERR(err);
 
        err = test_srtp_replay(SRTP_AES_128_GCM);
@@ -1218,16 +1222,20 @@
                return ESKIPPED;
        }
 
-       err = test_srtcp_loop(0, SRTP_AES_128_GCM, RTCP_BYE);
+       err = test_srtcp_loop(0, SRTP_AES_128_GCM, RTCP_BYE, 0);
+       TEST_ERR(err);
+
+       err = test_srtcp_loop(0, SRTP_AES_256_GCM, RTCP_BYE, 0);
        TEST_ERR(err);
 
-       err = test_srtcp_loop(0, SRTP_AES_256_GCM, RTCP_BYE);
+       err = test_srtcp_loop(4, SRTP_AES_128_GCM, RTCP_BYE, 0);
        TEST_ERR(err);
 
-       err = test_srtcp_loop(4, SRTP_AES_128_GCM, RTCP_BYE);
+       err = test_srtcp_loop(0, SRTP_AES_128_GCM, RTCP_RR, 0);
        TEST_ERR(err);
 
-       err = test_srtcp_loop(0, SRTP_AES_128_GCM, RTCP_RR);
+       err = test_srtcp_loop(0, SRTP_AES_128_GCM, RTCP_RR,
+                             SRTP_UNENCRYPTED_SRTCP);
        TEST_ERR(err);
 
        err = test_srtcp_random(SRTP_AES_128_GCM);

Reply via email to