From 21dedeb80872c31b73efadaae5a965bac9a33e9f Mon Sep 17 00:00:00 2001 From: Andrey Volk Date: Sun, 9 Aug 2026 21:01:57 +0300 Subject: [PATCH 1/7] version bump --- build/next-release.txt | 2 +- configure.ac | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/next-release.txt b/build/next-release.txt index a439b9b8b1..6953c91a73 100644 --- a/build/next-release.txt +++ b/build/next-release.txt @@ -1 +1 @@ -1.11.2-dev +1.11.3-dev diff --git a/configure.ac b/configure.ac index 2cba926471..f241153aab 100644 --- a/configure.ac +++ b/configure.ac @@ -3,10 +3,10 @@ # Must change all of the below together # For a release, set revision for that tagged release as well and uncomment -AC_INIT([freeswitch], [1.11.2-dev], bugs@freeswitch.org) +AC_INIT([freeswitch], [1.11.3-dev], bugs@freeswitch.org) AC_SUBST(SWITCH_VERSION_MAJOR, [1]) AC_SUBST(SWITCH_VERSION_MINOR, [11]) -AC_SUBST(SWITCH_VERSION_MICRO, [2-dev]) +AC_SUBST(SWITCH_VERSION_MICRO, [3-dev]) AC_SUBST(SWITCH_VERSION_REVISION, []) AC_SUBST(SWITCH_VERSION_REVISION_HUMAN, []) From d94936cc10e3c7590d7868a675325d2784fa126a Mon Sep 17 00:00:00 2001 From: Serhii Ivanov <11349489+s3rj1k@users.noreply.github.com> Date: Sun, 16 Aug 2026 18:26:56 +0200 Subject: [PATCH 2/7] [GHA] Drop bullseye from CI (#3122) --- .../bullseye/amd64/public.release.Dockerfile | 103 ------------------ .../bullseye/amd64/public.unstable.Dockerfile | 103 ------------------ .../arm32v7/public.release.Dockerfile | 103 ------------------ .../arm32v7/public.unstable.Dockerfile | 103 ------------------ .../arm64v8/public.release.Dockerfile | 103 ------------------ .../arm64v8/public.unstable.Dockerfile | 103 ------------------ .github/workflows/build.yml | 3 +- 7 files changed, 1 insertion(+), 620 deletions(-) delete mode 100644 .github/docker/debian/bullseye/amd64/public.release.Dockerfile delete mode 100644 .github/docker/debian/bullseye/amd64/public.unstable.Dockerfile delete mode 100644 .github/docker/debian/bullseye/arm32v7/public.release.Dockerfile delete mode 100644 .github/docker/debian/bullseye/arm32v7/public.unstable.Dockerfile delete mode 100644 .github/docker/debian/bullseye/arm64v8/public.release.Dockerfile delete mode 100644 .github/docker/debian/bullseye/arm64v8/public.unstable.Dockerfile diff --git a/.github/docker/debian/bullseye/amd64/public.release.Dockerfile b/.github/docker/debian/bullseye/amd64/public.release.Dockerfile deleted file mode 100644 index d9b0db0522..0000000000 --- a/.github/docker/debian/bullseye/amd64/public.release.Dockerfile +++ /dev/null @@ -1,103 +0,0 @@ -ARG BUILDER_IMAGE=debian:bullseye-20240513 - -FROM ${BUILDER_IMAGE} AS builder - -ARG MAINTAINER_NAME="Andrey Volk" -ARG MAINTAINER_EMAIL="andrey@signalwire.com" - -# Credentials -ARG REPO_DOMAIN=freeswitch.signalwire.com -ARG REPO_USERNAME=user - -ARG BUILD_NUMBER=42 -ARG GIT_SHA=0000000000 - -ARG DATA_DIR=/data -ARG CODENAME=bullseye -ARG GPG_KEY="/usr/share/keyrings/signalwire-freeswitch-repo.gpg" - -MAINTAINER "${MAINTAINER_NAME} <${MAINTAINER_EMAIL}>" - -SHELL ["/bin/bash", "-c"] - -RUN apt-get -q update && \ - DEBIAN_FRONTEND=noninteractive apt-get -yq install \ - apt-transport-https \ - build-essential \ - ca-certificates \ - cmake \ - curl \ - debhelper \ - devscripts \ - dh-autoreconf \ - dos2unix \ - doxygen \ - git \ - graphviz \ - libglib2.0-dev \ - libssl-dev \ - lsb-release \ - pkg-config \ - wget - -RUN update-ca-certificates --fresh - -RUN echo "export CODENAME=${CODENAME}" | tee ~/.env && \ - chmod +x ~/.env - -RUN . ~/.env && cat < /etc/apt/sources.list.d/freeswitch.list -deb [signed-by=${GPG_KEY}] https://${REPO_DOMAIN}/repo/deb/debian-release ${CODENAME} main -deb-src [signed-by=${GPG_KEY}] https://${REPO_DOMAIN}/repo/deb/debian-release ${CODENAME} main -EOF - -RUN git config --global --add safe.directory '*' \ - && git config --global user.name "${MAINTAINER_NAME}" \ - && git config --global user.email "${MAINTAINER_EMAIL}" - -# Bootstrap and Build -COPY . ${DATA_DIR} -WORKDIR ${DATA_DIR} -RUN echo "export VERSION=$(cat ./build/next-release.txt | tr -d '\n')" | tee -a ~/.env - -RUN . ~/.env && ./debian/util.sh prep-create-dsc -a amd64 ${CODENAME} - -RUN --mount=type=secret,id=REPO_PASSWORD,required=true \ - printf "machine ${REPO_DOMAIN} " > /etc/apt/auth.conf && \ - printf "login ${REPO_USERNAME} " >> /etc/apt/auth.conf && \ - printf "password " >> /etc/apt/auth.conf && \ - cat /run/secrets/REPO_PASSWORD >> /etc/apt/auth.conf && \ - sha512sum /run/secrets/REPO_PASSWORD && \ - curl \ - --fail \ - --netrc-file /etc/apt/auth.conf \ - --output ${GPG_KEY} \ - https://${REPO_DOMAIN}/repo/deb/debian-release/signalwire-freeswitch-repo.gpg && \ - file ${GPG_KEY} && \ - apt-get --quiet update && \ - mk-build-deps \ - --install \ - --remove debian/control \ - --tool "apt-get -o Debug::pkgProblemResolver=yes --yes --no-install-recommends" && \ - apt-get --yes --fix-broken install && \ - rm -f /etc/apt/auth.conf - -ENV DEB_BUILD_OPTIONS="parallel=1" -RUN . ~/.env && ./debian/util.sh create-orig -n -v${VERSION}-${BUILD_NUMBER}-${GIT_SHA} -x - -RUN . ~/.env && ORIGFILE=$(find ../ -name "freeswitch_*.orig.tar.xz" -type f) \ - && ./debian/util.sh create-dsc -a amd64 -z9 ${CODENAME} "$ORIGFILE" - -WORKDIR / -RUN dpkg-source -x freeswitch_*.dsc - -RUN cd freeswitch-*/ && debuild -S -sa -d -us -uc - -RUN cd freeswitch-*/ && debuild -b -us -uc - -RUN mkdir OUT && mv -v *.{deb,dsc,changes,tar.*} OUT/. - -RUN ls -lah /OUT - -# Artifacts image (mandatory part, the resulting image must have a single filesystem layer) -FROM scratch -COPY --from=builder /OUT/ / diff --git a/.github/docker/debian/bullseye/amd64/public.unstable.Dockerfile b/.github/docker/debian/bullseye/amd64/public.unstable.Dockerfile deleted file mode 100644 index a2e54e819c..0000000000 --- a/.github/docker/debian/bullseye/amd64/public.unstable.Dockerfile +++ /dev/null @@ -1,103 +0,0 @@ -ARG BUILDER_IMAGE=debian:bullseye-20240513 - -FROM ${BUILDER_IMAGE} AS builder - -ARG MAINTAINER_NAME="Andrey Volk" -ARG MAINTAINER_EMAIL="andrey@signalwire.com" - -# Credentials -ARG REPO_DOMAIN=freeswitch.signalwire.com -ARG REPO_USERNAME=user - -ARG BUILD_NUMBER=42 -ARG GIT_SHA=0000000000 - -ARG DATA_DIR=/data -ARG CODENAME=bullseye -ARG GPG_KEY="/usr/share/keyrings/signalwire-freeswitch-repo.gpg" - -MAINTAINER "${MAINTAINER_NAME} <${MAINTAINER_EMAIL}>" - -SHELL ["/bin/bash", "-c"] - -RUN apt-get -q update && \ - DEBIAN_FRONTEND=noninteractive apt-get -yq install \ - apt-transport-https \ - build-essential \ - ca-certificates \ - cmake \ - curl \ - debhelper \ - devscripts \ - dh-autoreconf \ - dos2unix \ - doxygen \ - git \ - graphviz \ - libglib2.0-dev \ - libssl-dev \ - lsb-release \ - pkg-config \ - wget - -RUN update-ca-certificates --fresh - -RUN echo "export CODENAME=${CODENAME}" | tee ~/.env && \ - chmod +x ~/.env - -RUN . ~/.env && cat < /etc/apt/sources.list.d/freeswitch.list -deb [signed-by=${GPG_KEY}] https://${REPO_DOMAIN}/repo/deb/debian-unstable ${CODENAME} main -deb-src [signed-by=${GPG_KEY}] https://${REPO_DOMAIN}/repo/deb/debian-unstable ${CODENAME} main -EOF - -RUN git config --global --add safe.directory '*' \ - && git config --global user.name "${MAINTAINER_NAME}" \ - && git config --global user.email "${MAINTAINER_EMAIL}" - -# Bootstrap and Build -COPY . ${DATA_DIR} -WORKDIR ${DATA_DIR} -RUN echo "export VERSION=$(cat ./build/next-release.txt | tr -d '\n')" | tee -a ~/.env - -RUN . ~/.env && ./debian/util.sh prep-create-dsc -a amd64 ${CODENAME} - -RUN --mount=type=secret,id=REPO_PASSWORD,required=true \ - printf "machine ${REPO_DOMAIN} " > /etc/apt/auth.conf && \ - printf "login ${REPO_USERNAME} " >> /etc/apt/auth.conf && \ - printf "password " >> /etc/apt/auth.conf && \ - cat /run/secrets/REPO_PASSWORD >> /etc/apt/auth.conf && \ - sha512sum /run/secrets/REPO_PASSWORD && \ - curl \ - --fail \ - --netrc-file /etc/apt/auth.conf \ - --output ${GPG_KEY} \ - https://${REPO_DOMAIN}/repo/deb/debian-unstable/signalwire-freeswitch-repo.gpg && \ - file ${GPG_KEY} && \ - apt-get --quiet update && \ - mk-build-deps \ - --install \ - --remove debian/control \ - --tool "apt-get -o Debug::pkgProblemResolver=yes --yes --no-install-recommends" && \ - apt-get --yes --fix-broken install && \ - rm -f /etc/apt/auth.conf - -ENV DEB_BUILD_OPTIONS="parallel=1" -RUN . ~/.env && ./debian/util.sh create-orig -n -v${VERSION}-${BUILD_NUMBER}-${GIT_SHA} -x - -RUN . ~/.env && ORIGFILE=$(find ../ -name "freeswitch_*.orig.tar.xz" -type f) \ - && ./debian/util.sh create-dsc -a amd64 -z9 ${CODENAME} "$ORIGFILE" - -WORKDIR / -RUN dpkg-source -x freeswitch_*.dsc - -RUN cd freeswitch-*/ && debuild -S -sa -d -us -uc - -RUN cd freeswitch-*/ && debuild -b -us -uc - -RUN mkdir OUT && mv -v *.{deb,dsc,changes,tar.*} OUT/. - -RUN ls -lah /OUT - -# Artifacts image (mandatory part, the resulting image must have a single filesystem layer) -FROM scratch -COPY --from=builder /OUT/ / diff --git a/.github/docker/debian/bullseye/arm32v7/public.release.Dockerfile b/.github/docker/debian/bullseye/arm32v7/public.release.Dockerfile deleted file mode 100644 index 8fb8c47f20..0000000000 --- a/.github/docker/debian/bullseye/arm32v7/public.release.Dockerfile +++ /dev/null @@ -1,103 +0,0 @@ -ARG BUILDER_IMAGE=arm32v7/debian:bullseye-20240513 - -FROM --platform=linux/arm32 ${BUILDER_IMAGE} AS builder - -ARG MAINTAINER_NAME="Andrey Volk" -ARG MAINTAINER_EMAIL="andrey@signalwire.com" - -# Credentials -ARG REPO_DOMAIN=freeswitch.signalwire.com -ARG REPO_USERNAME=user - -ARG BUILD_NUMBER=42 -ARG GIT_SHA=0000000000 - -ARG DATA_DIR=/data -ARG CODENAME=bullseye -ARG GPG_KEY="/usr/share/keyrings/signalwire-freeswitch-repo.gpg" - -MAINTAINER "${MAINTAINER_NAME} <${MAINTAINER_EMAIL}>" - -SHELL ["/bin/bash", "-c"] - -RUN apt-get -q update && \ - DEBIAN_FRONTEND=noninteractive apt-get -yq install \ - apt-transport-https \ - build-essential \ - ca-certificates \ - cmake \ - curl \ - debhelper \ - devscripts \ - dh-autoreconf \ - dos2unix \ - doxygen \ - git \ - graphviz \ - libglib2.0-dev \ - libssl-dev \ - lsb-release \ - pkg-config \ - wget - -RUN update-ca-certificates --fresh - -RUN echo "export CODENAME=${CODENAME}" | tee ~/.env && \ - chmod +x ~/.env - -RUN . ~/.env && cat < /etc/apt/sources.list.d/freeswitch.list -deb [signed-by=${GPG_KEY}] https://${REPO_DOMAIN}/repo/deb/rpi/debian-release ${CODENAME} main -deb-src [signed-by=${GPG_KEY}] https://${REPO_DOMAIN}/repo/deb/rpi/debian-release ${CODENAME} main -EOF - -RUN git config --global --add safe.directory '*' \ - && git config --global user.name "${MAINTAINER_NAME}" \ - && git config --global user.email "${MAINTAINER_EMAIL}" - -# Bootstrap and Build -COPY . ${DATA_DIR} -WORKDIR ${DATA_DIR} -RUN echo "export VERSION=$(cat ./build/next-release.txt | tr -d '\n')" | tee -a ~/.env - -RUN . ~/.env && ./debian/util.sh prep-create-dsc -a armhf ${CODENAME} - -RUN --mount=type=secret,id=REPO_PASSWORD,required=true \ - printf "machine ${REPO_DOMAIN} " > /etc/apt/auth.conf && \ - printf "login ${REPO_USERNAME} " >> /etc/apt/auth.conf && \ - printf "password " >> /etc/apt/auth.conf && \ - cat /run/secrets/REPO_PASSWORD >> /etc/apt/auth.conf && \ - sha512sum /run/secrets/REPO_PASSWORD && \ - curl \ - --fail \ - --netrc-file /etc/apt/auth.conf \ - --output ${GPG_KEY} \ - https://${REPO_DOMAIN}/repo/deb/rpi/debian-release/signalwire-freeswitch-repo.gpg && \ - file ${GPG_KEY} && \ - apt-get --quiet update && \ - mk-build-deps \ - --install \ - --remove debian/control \ - --tool "apt-get -o Debug::pkgProblemResolver=yes --yes --no-install-recommends" && \ - apt-get --yes --fix-broken install && \ - rm -f /etc/apt/auth.conf - -ENV DEB_BUILD_OPTIONS="parallel=1" -RUN . ~/.env && ./debian/util.sh create-orig -n -v${VERSION}-${BUILD_NUMBER}-${GIT_SHA} -x - -RUN . ~/.env && ORIGFILE=$(find ../ -name "freeswitch_*.orig.tar.xz" -type f) \ - && ./debian/util.sh create-dsc -a armhf -z9 ${CODENAME} "$ORIGFILE" - -WORKDIR / -RUN dpkg-source -x freeswitch_*.dsc - -RUN cd freeswitch-*/ && debuild -S -sa -d -us -uc - -RUN cd freeswitch-*/ && debuild -b -us -uc - -RUN mkdir OUT && mv -v *.{deb,dsc,changes,tar.*} OUT/. - -RUN ls -lah /OUT - -# Artifacts image (mandatory part, the resulting image must have a single filesystem layer) -FROM scratch -COPY --from=builder /OUT/ / diff --git a/.github/docker/debian/bullseye/arm32v7/public.unstable.Dockerfile b/.github/docker/debian/bullseye/arm32v7/public.unstable.Dockerfile deleted file mode 100644 index 76c8eab3a3..0000000000 --- a/.github/docker/debian/bullseye/arm32v7/public.unstable.Dockerfile +++ /dev/null @@ -1,103 +0,0 @@ -ARG BUILDER_IMAGE=arm32v7/debian:bullseye-20240513 - -FROM --platform=linux/arm32 ${BUILDER_IMAGE} AS builder - -ARG MAINTAINER_NAME="Andrey Volk" -ARG MAINTAINER_EMAIL="andrey@signalwire.com" - -# Credentials -ARG REPO_DOMAIN=freeswitch.signalwire.com -ARG REPO_USERNAME=user - -ARG BUILD_NUMBER=42 -ARG GIT_SHA=0000000000 - -ARG DATA_DIR=/data -ARG CODENAME=bullseye -ARG GPG_KEY="/usr/share/keyrings/signalwire-freeswitch-repo.gpg" - -MAINTAINER "${MAINTAINER_NAME} <${MAINTAINER_EMAIL}>" - -SHELL ["/bin/bash", "-c"] - -RUN apt-get -q update && \ - DEBIAN_FRONTEND=noninteractive apt-get -yq install \ - apt-transport-https \ - build-essential \ - ca-certificates \ - cmake \ - curl \ - debhelper \ - devscripts \ - dh-autoreconf \ - dos2unix \ - doxygen \ - git \ - graphviz \ - libglib2.0-dev \ - libssl-dev \ - lsb-release \ - pkg-config \ - wget - -RUN update-ca-certificates --fresh - -RUN echo "export CODENAME=${CODENAME}" | tee ~/.env && \ - chmod +x ~/.env - -RUN . ~/.env && cat < /etc/apt/sources.list.d/freeswitch.list -deb [signed-by=${GPG_KEY}] https://${REPO_DOMAIN}/repo/deb/rpi/debian-dev ${CODENAME} main -deb-src [signed-by=${GPG_KEY}] https://${REPO_DOMAIN}/repo/deb/rpi/debian-dev ${CODENAME} main -EOF - -RUN git config --global --add safe.directory '*' \ - && git config --global user.name "${MAINTAINER_NAME}" \ - && git config --global user.email "${MAINTAINER_EMAIL}" - -# Bootstrap and Build -COPY . ${DATA_DIR} -WORKDIR ${DATA_DIR} -RUN echo "export VERSION=$(cat ./build/next-release.txt | tr -d '\n')" | tee -a ~/.env - -RUN . ~/.env && ./debian/util.sh prep-create-dsc -a armhf ${CODENAME} - -RUN --mount=type=secret,id=REPO_PASSWORD,required=true \ - printf "machine ${REPO_DOMAIN} " > /etc/apt/auth.conf && \ - printf "login ${REPO_USERNAME} " >> /etc/apt/auth.conf && \ - printf "password " >> /etc/apt/auth.conf && \ - cat /run/secrets/REPO_PASSWORD >> /etc/apt/auth.conf && \ - sha512sum /run/secrets/REPO_PASSWORD && \ - curl \ - --fail \ - --netrc-file /etc/apt/auth.conf \ - --output ${GPG_KEY} \ - https://${REPO_DOMAIN}/repo/deb/rpi/debian-dev/signalwire-freeswitch-repo.gpg && \ - file ${GPG_KEY} && \ - apt-get --quiet update && \ - mk-build-deps \ - --install \ - --remove debian/control \ - --tool "apt-get -o Debug::pkgProblemResolver=yes --yes --no-install-recommends" && \ - apt-get --yes --fix-broken install && \ - rm -f /etc/apt/auth.conf - -ENV DEB_BUILD_OPTIONS="parallel=1" -RUN . ~/.env && ./debian/util.sh create-orig -n -v${VERSION}-${BUILD_NUMBER}-${GIT_SHA} -x - -RUN . ~/.env && ORIGFILE=$(find ../ -name "freeswitch_*.orig.tar.xz" -type f) \ - && ./debian/util.sh create-dsc -a armhf -z9 ${CODENAME} "$ORIGFILE" - -WORKDIR / -RUN dpkg-source -x freeswitch_*.dsc - -RUN cd freeswitch-*/ && debuild -S -sa -d -us -uc - -RUN cd freeswitch-*/ && debuild -b -us -uc - -RUN mkdir OUT && mv -v *.{deb,dsc,changes,tar.*} OUT/. - -RUN ls -lah /OUT - -# Artifacts image (mandatory part, the resulting image must have a single filesystem layer) -FROM scratch -COPY --from=builder /OUT/ / diff --git a/.github/docker/debian/bullseye/arm64v8/public.release.Dockerfile b/.github/docker/debian/bullseye/arm64v8/public.release.Dockerfile deleted file mode 100644 index 1c23d558ee..0000000000 --- a/.github/docker/debian/bullseye/arm64v8/public.release.Dockerfile +++ /dev/null @@ -1,103 +0,0 @@ -ARG BUILDER_IMAGE=arm64v8/debian:bullseye-20240513 - -FROM --platform=linux/arm64 ${BUILDER_IMAGE} AS builder - -ARG MAINTAINER_NAME="Andrey Volk" -ARG MAINTAINER_EMAIL="andrey@signalwire.com" - -# Credentials -ARG REPO_DOMAIN=freeswitch.signalwire.com -ARG REPO_USERNAME=user - -ARG BUILD_NUMBER=42 -ARG GIT_SHA=0000000000 - -ARG DATA_DIR=/data -ARG CODENAME=bullseye -ARG GPG_KEY="/usr/share/keyrings/signalwire-freeswitch-repo.gpg" - -MAINTAINER "${MAINTAINER_NAME} <${MAINTAINER_EMAIL}>" - -SHELL ["/bin/bash", "-c"] - -RUN apt-get -q update && \ - DEBIAN_FRONTEND=noninteractive apt-get -yq install \ - apt-transport-https \ - build-essential \ - ca-certificates \ - cmake \ - curl \ - debhelper \ - devscripts \ - dh-autoreconf \ - dos2unix \ - doxygen \ - git \ - graphviz \ - libglib2.0-dev \ - libssl-dev \ - lsb-release \ - pkg-config \ - wget - -RUN update-ca-certificates --fresh - -RUN echo "export CODENAME=${CODENAME}" | tee ~/.env && \ - chmod +x ~/.env - -RUN . ~/.env && cat < /etc/apt/sources.list.d/freeswitch.list -deb [signed-by=${GPG_KEY}] https://${REPO_DOMAIN}/repo/deb/debian-release ${CODENAME} main -deb-src [signed-by=${GPG_KEY}] https://${REPO_DOMAIN}/repo/deb/debian-release ${CODENAME} main -EOF - -RUN git config --global --add safe.directory '*' \ - && git config --global user.name "${MAINTAINER_NAME}" \ - && git config --global user.email "${MAINTAINER_EMAIL}" - -# Bootstrap and Build -COPY . ${DATA_DIR} -WORKDIR ${DATA_DIR} -RUN echo "export VERSION=$(cat ./build/next-release.txt | tr -d '\n')" | tee -a ~/.env - -RUN . ~/.env && ./debian/util.sh prep-create-dsc -a arm64 ${CODENAME} - -RUN --mount=type=secret,id=REPO_PASSWORD,required=true \ - printf "machine ${REPO_DOMAIN} " > /etc/apt/auth.conf && \ - printf "login ${REPO_USERNAME} " >> /etc/apt/auth.conf && \ - printf "password " >> /etc/apt/auth.conf && \ - cat /run/secrets/REPO_PASSWORD >> /etc/apt/auth.conf && \ - sha512sum /run/secrets/REPO_PASSWORD && \ - curl \ - --fail \ - --netrc-file /etc/apt/auth.conf \ - --output ${GPG_KEY} \ - https://${REPO_DOMAIN}/repo/deb/debian-release/signalwire-freeswitch-repo.gpg && \ - file ${GPG_KEY} && \ - apt-get --quiet update && \ - mk-build-deps \ - --install \ - --remove debian/control \ - --tool "apt-get -o Debug::pkgProblemResolver=yes --yes --no-install-recommends" && \ - apt-get --yes --fix-broken install && \ - rm -f /etc/apt/auth.conf - -ENV DEB_BUILD_OPTIONS="parallel=1" -RUN . ~/.env && ./debian/util.sh create-orig -n -v${VERSION}-${BUILD_NUMBER}-${GIT_SHA} -x - -RUN . ~/.env && ORIGFILE=$(find ../ -name "freeswitch_*.orig.tar.xz" -type f) \ - && ./debian/util.sh create-dsc -a arm64 -z9 ${CODENAME} "$ORIGFILE" - -WORKDIR / -RUN dpkg-source -x freeswitch_*.dsc - -RUN cd freeswitch-*/ && debuild -S -sa -d -us -uc - -RUN cd freeswitch-*/ && debuild -b -us -uc - -RUN mkdir OUT && mv -v *.{deb,dsc,changes,tar.*} OUT/. - -RUN ls -lah /OUT - -# Artifacts image (mandatory part, the resulting image must have a single filesystem layer) -FROM scratch -COPY --from=builder /OUT/ / diff --git a/.github/docker/debian/bullseye/arm64v8/public.unstable.Dockerfile b/.github/docker/debian/bullseye/arm64v8/public.unstable.Dockerfile deleted file mode 100644 index 5131671dbd..0000000000 --- a/.github/docker/debian/bullseye/arm64v8/public.unstable.Dockerfile +++ /dev/null @@ -1,103 +0,0 @@ -ARG BUILDER_IMAGE=arm64v8/debian:bullseye-20240513 - -FROM --platform=linux/arm64 ${BUILDER_IMAGE} AS builder - -ARG MAINTAINER_NAME="Andrey Volk" -ARG MAINTAINER_EMAIL="andrey@signalwire.com" - -# Credentials -ARG REPO_DOMAIN=freeswitch.signalwire.com -ARG REPO_USERNAME=user - -ARG BUILD_NUMBER=42 -ARG GIT_SHA=0000000000 - -ARG DATA_DIR=/data -ARG CODENAME=bullseye -ARG GPG_KEY="/usr/share/keyrings/signalwire-freeswitch-repo.gpg" - -MAINTAINER "${MAINTAINER_NAME} <${MAINTAINER_EMAIL}>" - -SHELL ["/bin/bash", "-c"] - -RUN apt-get -q update && \ - DEBIAN_FRONTEND=noninteractive apt-get -yq install \ - apt-transport-https \ - build-essential \ - ca-certificates \ - cmake \ - curl \ - debhelper \ - devscripts \ - dh-autoreconf \ - dos2unix \ - doxygen \ - git \ - graphviz \ - libglib2.0-dev \ - libssl-dev \ - lsb-release \ - pkg-config \ - wget - -RUN update-ca-certificates --fresh - -RUN echo "export CODENAME=${CODENAME}" | tee ~/.env && \ - chmod +x ~/.env - -RUN . ~/.env && cat < /etc/apt/sources.list.d/freeswitch.list -deb [signed-by=${GPG_KEY}] https://${REPO_DOMAIN}/repo/deb/debian-unstable ${CODENAME} main -deb-src [signed-by=${GPG_KEY}] https://${REPO_DOMAIN}/repo/deb/debian-unstable ${CODENAME} main -EOF - -RUN git config --global --add safe.directory '*' \ - && git config --global user.name "${MAINTAINER_NAME}" \ - && git config --global user.email "${MAINTAINER_EMAIL}" - -# Bootstrap and Build -COPY . ${DATA_DIR} -WORKDIR ${DATA_DIR} -RUN echo "export VERSION=$(cat ./build/next-release.txt | tr -d '\n')" | tee -a ~/.env - -RUN . ~/.env && ./debian/util.sh prep-create-dsc -a arm64 ${CODENAME} - -RUN --mount=type=secret,id=REPO_PASSWORD,required=true \ - printf "machine ${REPO_DOMAIN} " > /etc/apt/auth.conf && \ - printf "login ${REPO_USERNAME} " >> /etc/apt/auth.conf && \ - printf "password " >> /etc/apt/auth.conf && \ - cat /run/secrets/REPO_PASSWORD >> /etc/apt/auth.conf && \ - sha512sum /run/secrets/REPO_PASSWORD && \ - curl \ - --fail \ - --netrc-file /etc/apt/auth.conf \ - --output ${GPG_KEY} \ - https://${REPO_DOMAIN}/repo/deb/debian-unstable/signalwire-freeswitch-repo.gpg && \ - file ${GPG_KEY} && \ - apt-get --quiet update && \ - mk-build-deps \ - --install \ - --remove debian/control \ - --tool "apt-get -o Debug::pkgProblemResolver=yes --yes --no-install-recommends" && \ - apt-get --yes --fix-broken install && \ - rm -f /etc/apt/auth.conf - -ENV DEB_BUILD_OPTIONS="parallel=1" -RUN . ~/.env && ./debian/util.sh create-orig -n -v${VERSION}-${BUILD_NUMBER}-${GIT_SHA} -x - -RUN . ~/.env && ORIGFILE=$(find ../ -name "freeswitch_*.orig.tar.xz" -type f) \ - && ./debian/util.sh create-dsc -a arm64 -z9 ${CODENAME} "$ORIGFILE" - -WORKDIR / -RUN dpkg-source -x freeswitch_*.dsc - -RUN cd freeswitch-*/ && debuild -S -sa -d -us -uc - -RUN cd freeswitch-*/ && debuild -b -us -uc - -RUN mkdir OUT && mv -v *.{deb,dsc,changes,tar.*} OUT/. - -RUN ls -lah /OUT - -# Artifacts image (mandatory part, the resulting image must have a single filesystem layer) -FROM scratch -COPY --from=builder /OUT/ / diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6cd13d8322..f979fe3a52 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,7 +55,7 @@ jobs: } }, { - "version": "bullseye", + "version": "trixie", "platform": { "name": "arm32v7" } @@ -132,7 +132,6 @@ jobs: version: - trixie - bookworm - - bullseye platform: - name: amd64 runner: ubuntu-latest From 80ad6b320634e708272a8ef08dd6021af81bd54d Mon Sep 17 00:00:00 2001 From: Dmitry Verenitsin Date: Thu, 20 Aug 2026 23:25:54 +0500 Subject: [PATCH 3/7] [core] Stop the timer error log on RTP sessions without a timer (#3128) `read_rtp_packet()` runs `switch_core_timer_check()` on every empty read, and that logs an error when `rtp_session->timer` is zeroed, the normal state for T.38, proxy media, and a disabled timer. Test `timer.timer_interface` first so those sessions stay quiet; the branch itself is not reachable without a timer, so packet handling is unchanged. --- src/switch_rtp.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/switch_rtp.c b/src/switch_rtp.c index d0ff5eb40a..12436e4211 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -6556,6 +6556,7 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t } } else if (!switch_cmp_addr(rtp_session->from_addr, rtp_session->remote_addr, SWITCH_FALSE) && !switch_rtp_test_flag(rtp_session, SWITCH_RTP_FLAG_AUTOADJ) && + rtp_session->timer.timer_interface && switch_core_timer_check(&rtp_session->timer, SWITCH_FALSE) == SWITCH_STATUS_FALSE) { /** * nothing has been read from socket. We are not in auto-adjustment window anymore From cc93a683ca6e1f8f47c1d6e38bd2daf8fa6a7b1c Mon Sep 17 00:00:00 2001 From: Dmitry Verenitsin Date: Fri, 21 Aug 2026 19:10:14 +0500 Subject: [PATCH 4/7] [core] Fix _timerfd_check using wrong syscall to detect timer expiration. Add unit-tests. (#3129) `timerfd_gettime()` returns the time remaining until the next periodic tick, regardless of how many previous ticks have already fired and remain unread. Replace with `poll()` which correctly checks for pending unread expirations. --- src/switch_time.c | 21 +++---- tests/unit/.gitignore | 1 + tests/unit/Makefile.am | 1 + tests/unit/switch_timer.c | 116 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+), 10 deletions(-) create mode 100644 tests/unit/switch_timer.c diff --git a/src/switch_time.c b/src/switch_time.c index 4a70b60fca..fef5cfd3d7 100644 --- a/src/switch_time.c +++ b/src/switch_time.c @@ -38,6 +38,7 @@ #ifdef HAVE_TIMERFD_CREATE #include +#include #endif //#if defined(DARWIN) @@ -497,27 +498,27 @@ static switch_status_t _timerfd_next(switch_timer_t *timer) static switch_status_t _timerfd_check(switch_timer_t *timer, switch_bool_t step) { interval_timer_t *it = timer->private_info; - struct itimerspec val; - int diff; + struct pollfd pfd = { .events = POLLIN }; if (!it) { return SWITCH_STATUS_GENERR; } - timerfd_gettime(it->fd, &val); - diff = val.it_value.tv_nsec / 1000; + pfd.fd = it->fd; - if (diff > 0) { - /* still pending */ - timer->diff = diff; - return SWITCH_STATUS_FALSE; - } else { - /* timer pending */ + if (poll(&pfd, 1, 0) > 0) { + /* timer has fired */ timer->diff = 0; if (step) { _timerfd_step(timer); } + return SWITCH_STATUS_SUCCESS; + } else { + /* still pending */ + timer->diff = 1; + + return SWITCH_STATUS_FALSE; } } diff --git a/tests/unit/.gitignore b/tests/unit/.gitignore index 966fc80eb9..37a7064a16 100644 --- a/tests/unit/.gitignore +++ b/tests/unit/.gitignore @@ -36,6 +36,7 @@ switch_ulp_recover1 switch_ulp_recover2 switch_ulp_recover3 switch_ulp_recover4 +switch_timer switch_utils switch_vad switch_vpx diff --git a/tests/unit/Makefile.am b/tests/unit/Makefile.am index a3c59059b3..cb974ee3a1 100644 --- a/tests/unit/Makefile.am +++ b/tests/unit/Makefile.am @@ -9,6 +9,7 @@ noinst_PROGRAMS+= switch_hold switch_sip noinst_PROGRAMS += switch_core_media noinst_PROGRAMS += test_mod_verto noinst_PROGRAMS += test_mod_event_socket +noinst_PROGRAMS += switch_timer if HAVE_PCAP noinst_PROGRAMS += switch_rtp_pcap diff --git a/tests/unit/switch_timer.c b/tests/unit/switch_timer.c new file mode 100644 index 0000000000..73e1bcb3e1 --- /dev/null +++ b/tests/unit/switch_timer.c @@ -0,0 +1,116 @@ +/* + * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * Copyright (C) 2026, Anthony Minessale II + * + * Version: MPL 1.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * + * The Initial Developer of the Original Code is + * Anthony Minessale II + * Portions created by the Initial Developer are Copyright (C) + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Dmitry Verenitsin + * + * + * switch_timer.c -- timer tests + * + */ +#include +#include + +static int module_loaded = 0; + +FST_MINCORE_BEGIN("./conf") + +FST_SUITE_BEGIN(switch_timer) + +FST_SETUP_BEGIN() +{ + if (!module_loaded) { + const char *err = NULL; + switch_loadable_module_init(SWITCH_FALSE); + switch_loadable_module_load_module("", "CORE_SOFTTIMER_MODULE", SWITCH_TRUE, &err); + module_loaded = 1; + } +} +FST_SETUP_END() + +FST_TEARDOWN_BEGIN() +{ +} +FST_TEARDOWN_END() + +/* timer_check returns FALSE with non-zero diff when no tick has elapsed, + * returns SUCCESS with diff=0 after sleeping past the interval */ +FST_TEST_BEGIN(test_timer_check) +{ + switch_timer_t timer = { 0 }; + switch_status_t status; + + fst_requires(switch_core_timer_init(&timer, "soft", 20, 160, fst_pool) == SWITCH_STATUS_SUCCESS); + + /* immediately after init - no tick yet */ + status = switch_core_timer_check(&timer, SWITCH_FALSE); + fst_check(status == SWITCH_STATUS_FALSE); + fst_check(timer.diff != 0); + + /* sleep past the 20ms interval */ + switch_sleep(50000); /* 50ms */ + + /* now the tick should be detected */ + status = switch_core_timer_check(&timer, SWITCH_FALSE); + fst_check(status == SWITCH_STATUS_SUCCESS); + fst_check(timer.diff == 0); + + switch_core_timer_destroy(&timer); +} +FST_TEST_END() + +/* step=FALSE does not advance tick/samplecount, step=TRUE advances by exactly 1 tick */ +FST_TEST_BEGIN(test_timer_check_step) +{ + switch_timer_t timer = { 0 }; + switch_size_t tick_before; + uint32_t samplecount_before; + switch_status_t status; + + fst_requires(switch_core_timer_init(&timer, "soft", 20, 160, fst_pool) == SWITCH_STATUS_SUCCESS); + + switch_sleep(50000); /* 50ms - let the timer tick */ + + tick_before = timer.tick; + samplecount_before = timer.samplecount; + + /* step=FALSE: reports ready but does not advance */ + status = switch_core_timer_check(&timer, SWITCH_FALSE); + fst_check(status == SWITCH_STATUS_SUCCESS); + fst_check(timer.tick == tick_before); + fst_check(timer.samplecount == samplecount_before); + + /* step=TRUE: advances tick by 1, samplecount by samples */ + status = switch_core_timer_check(&timer, SWITCH_TRUE); + fst_check(status == SWITCH_STATUS_SUCCESS); + fst_check(timer.tick == tick_before + 1); + fst_check(timer.samplecount == samplecount_before + 160); + + switch_core_timer_destroy(&timer); +} +FST_TEST_END() + +FST_SUITE_END() + +FST_MINCORE_END() From 098018df3dc2766f08c9d25bebc69014b6e4bed5 Mon Sep 17 00:00:00 2001 From: Dmitry Verenitsin Date: Wed, 26 Aug 2026 18:01:18 +0500 Subject: [PATCH 5/7] [mod_sofia] Bound the To-user split in the inbound MESSAGE handler (#3134) `sofia_presence_handle_sip_i_message()` splits the chat proto selector off a truncating copy of the To user. Split only a user that fits the buffer; an over-long one is handled as a plain address. --- src/mod/endpoints/mod_sofia/sofia_presence.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index 1737eb4774..d9257285a1 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -4871,7 +4871,10 @@ void sofia_presence_handle_sip_i_message(int status, full_from = sip_header_as_string(nua_handle_get_home(nh), (void *) sip->sip_from); - if ((p = strchr(to_user, '+')) && p != to_user) { + /* Only split a user that fits in proto: the copy below truncates, so a '+' past the + buffer would leave nothing to split on, and a selector or address cut in half must + not be parsed either. An over-long user is treated as a plain address. */ + if ((p = strchr(to_user, '+')) && p != to_user && strlen(to_user) < sizeof(proto)) { switch_copy_string(proto, to_user, sizeof(proto)); p = strchr(proto, '+'); *p++ = '\0'; From 7015f6a73ab3d67fed5fbfc277ecfb88a74c2a86 Mon Sep 17 00:00:00 2001 From: Dmitry Verenitsin Date: Wed, 26 Aug 2026 18:46:56 +0500 Subject: [PATCH 6/7] [mod_sofia] Add enable-chat-api-proto to gate the api chat proto (#3135) The chat layer lets an inbound SIP MESSAGE select which chat proto handles it, and the `api` proto runs the address as a FreeSWITCH API command. The new per-profile `enable-chat-api-proto` param controls that route and is off unless set. A MESSAGE selecting the proto on a profile without it is answered 403 and logged with the source and the requested command. The proto compare is case-insensitive, matching the chat interface registry, which is created with `switch_core_hash_init_nocase()`. The param ships commented out in the four vanilla profiles and the mod_sofia sofia.conf.xml sample. --- conf/vanilla/sip_profiles/external-ipv6.xml | 2 ++ conf/vanilla/sip_profiles/external.xml | 2 ++ conf/vanilla/sip_profiles/internal-ipv6.xml | 2 ++ conf/vanilla/sip_profiles/internal.xml | 3 +++ .../endpoints/mod_sofia/conf/sofia.conf.xml | 4 ++++ src/mod/endpoints/mod_sofia/mod_sofia.h | 1 + src/mod/endpoints/mod_sofia/sofia.c | 6 ++++++ src/mod/endpoints/mod_sofia/sofia_presence.c | 18 ++++++++++++++++++ 8 files changed, 38 insertions(+) diff --git a/conf/vanilla/sip_profiles/external-ipv6.xml b/conf/vanilla/sip_profiles/external-ipv6.xml index 1b9d0c857d..f278cd1d19 100644 --- a/conf/vanilla/sip_profiles/external-ipv6.xml +++ b/conf/vanilla/sip_profiles/external-ipv6.xml @@ -56,6 +56,8 @@ + + + + + diff --git a/conf/vanilla/sip_profiles/internal.xml b/conf/vanilla/sip_profiles/internal.xml index eb07779f43..79fcad741e 100644 --- a/conf/vanilla/sip_profiles/internal.xml +++ b/conf/vanilla/sip_profiles/internal.xml @@ -107,6 +107,9 @@ + + + + + + diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 3689f82a20..81d0517d78 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -311,6 +311,7 @@ typedef enum { PFLAG_AUTH_REQUIRE_USER, PFLAG_AUTH_CALLS_ACL_ONLY, PFLAG_USE_PORT_FOR_ACL_CHECK, + PFLAG_ENABLE_CHAT_API_PROTO, /* No new flags below this line */ PFLAG_MAX diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 0451a4bdea..f5bc04de26 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -4917,6 +4917,12 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name) } else { sofia_clear_pflag(profile, PFLAG_ENABLE_CHAT); } + } else if (!strcasecmp(var, "enable-chat-api-proto")) { + if (switch_true(val)) { + sofia_set_pflag(profile, PFLAG_ENABLE_CHAT_API_PROTO); + } else { + sofia_clear_pflag(profile, PFLAG_ENABLE_CHAT_API_PROTO); + } } else if (!strcasecmp(var, "fire-bye-response-events")) { if (switch_true(val)) { sofia_set_pflag(profile, PFLAG_FIRE_BYE_RESPONSE_EVENTS); diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index d9257285a1..667886bccb 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -4879,6 +4879,24 @@ void sofia_presence_handle_sip_i_message(int status, p = strchr(proto, '+'); *p++ = '\0'; + if (!strcasecmp(proto, "api") && !sofia_test_pflag(profile, PFLAG_ENABLE_CHAT_API_PROTO)) { + /* p is the rest of the To user, still percent-encoded and bounded by the proto buffer. */ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, + "Profile [%s] rejected a MESSAGE from %s@%s (%s:%d) addressed to the 'api' chat proto [%s]. " + "Set enable-chat-api-proto=true on the profile to permit it.\n", + profile->name, switch_str_nil(from_user), switch_str_nil(from_host), network_ip, network_port, p); + + nua_respond(nh, SIP_403_FORBIDDEN, NUTAG_WITH_THIS_MSG(de->data->e_msg), TAG_END()); + + if (full_from) { + su_free(nua_handle_get_home(nh), full_from); + } + + /* Return rather than goto end: the end label answers 200/202, which would be a + second response on this transaction. */ + return; + } + if ((to_addr = strdup(p))) { if ((p = strchr(to_addr, '+'))) { *p = '@'; From f3900693080eba3cd69864c5cf615955356ade4f Mon Sep 17 00:00:00 2001 From: Dmitry Verenitsin Date: Wed, 26 Aug 2026 20:35:31 +0500 Subject: [PATCH 7/7] [mod_verto] Add enable-chat-api-proto to gate the api chat proto (#3136) A client message can select which chat proto handles it, and the `api` proto runs the address as a FreeSWITCH API command. That route does not pass through `verto.fsapi`, so the per-user fsapi permission does not apply to it. The new per-profile `enable-chat-api-proto` param controls the route and is off unless set; a message selecting the proto without it is refused and logged. The proto compare is case-insensitive, matching the chat interface registry, which is created with `switch_core_hash_init_nocase()`. Only the `api` proto is gated. A message carrying no proto selector, or one naming any other chat proto, routes exactly as before. The param ships commented out in both vanilla verto profiles. --- conf/vanilla/autoload_configs/verto.conf.xml | 6 ++++++ src/mod/endpoints/mod_verto/mod_verto.c | 16 ++++++++++++++++ src/mod/endpoints/mod_verto/mod_verto.h | 1 + 3 files changed, 23 insertions(+) diff --git a/conf/vanilla/autoload_configs/verto.conf.xml b/conf/vanilla/autoload_configs/verto.conf.xml index 91f75f11e9..b65430471e 100644 --- a/conf/vanilla/autoload_configs/verto.conf.xml +++ b/conf/vanilla/autoload_configs/verto.conf.xml @@ -21,6 +21,11 @@ + + @@ -46,6 +51,7 @@ + diff --git a/src/mod/endpoints/mod_verto/mod_verto.c b/src/mod/endpoints/mod_verto/mod_verto.c index 784a1379cb..5a625954a4 100644 --- a/src/mod/endpoints/mod_verto/mod_verto.c +++ b/src/mod/endpoints/mod_verto/mod_verto.c @@ -3986,6 +3986,20 @@ static switch_bool_t verto__info_func(const char *method, cJSON *params, jsock_t } } + if (!strcasecmp(proto, "api") && !jsock->profile->enable_chat_api_proto) { + /* Truncate: the rest of "to" comes straight from the client JSON and has no length bound. */ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, + "Profile [%s] rejected a message from %s (%s) addressed to the 'api' chat proto [%.256s]. " + "Set enable-chat-api-proto=true on the profile to permit it.\n", + jsock->profile->name, switch_str_nil(jsock->uid), switch_str_nil(jsock->name), switch_str_nil(to)); + + cJSON_AddItemToObject(*response, "message", cJSON_CreateString("The api chat proto is not permitted on this profile")); + switch_safe_free(pproto); + r = SWITCH_FALSE; + + goto cleanup; + } + if (!zstr(to) && !zstr(body) && switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) { switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", VERTO_CHAT_PROTO); @@ -5343,6 +5357,8 @@ static switch_status_t parse_config(const char *cf) profile->jb_msec = switch_core_strdup(profile->pool, val); } else if (!strcasecmp(var, "blind-reg") && !zstr(val)) { profile->blind_reg = switch_true(val); + } else if (!strcasecmp(var, "enable-chat-api-proto") && !zstr(val)) { + profile->enable_chat_api_proto = switch_true(val); } else if (!strcasecmp(var, "userauth") && !zstr(val)) { profile->userauth = switch_core_strdup(profile->pool, val); } else if (!strcasecmp(var, "chop-domain") && !zstr(val)) { diff --git a/src/mod/endpoints/mod_verto/mod_verto.h b/src/mod/endpoints/mod_verto/mod_verto.h index f13e8ef2b9..e565447e7b 100644 --- a/src/mod/endpoints/mod_verto/mod_verto.h +++ b/src/mod/endpoints/mod_verto/mod_verto.h @@ -247,6 +247,7 @@ struct verto_profile_s { int in_thread; int blind_reg; + int enable_chat_api_proto; char *userauth; char *root_passwd;