From cb874fff180db8fa68370328424eb580b62d1716 Mon Sep 17 00:00:00 2001 From: Maksym Sobolyev Date: Thu, 11 Jul 2024 09:56:28 -0700 Subject: [PATCH] Add description and synchronize it with DH. --- .github/workflows/build.yml | 9 ++++++- README.md | 51 +++++++++++++++++++++++++++++++++++++ update_description.sh | 42 ++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 README.md create mode 100644 update_description.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 824c770..bc84ba7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest env: DOCKER_REPO: sippylabs/webrtc_phone - PLATFORMS: linux/amd64 #,linux/i386,linux/arm/v7,linux/arm64 + PLATFORMS: linux/amd64,linux/i386,linux/arm/v7,linux/arm64 BASE_IMAGE: sippylabs/rtpproxy:RFC5245_ICE steps: - name: Checkout repository @@ -71,3 +71,10 @@ jobs: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: ${{ env.PLATFORMS }} + + - name: Update DockerHub repo description + if: true || ${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }} + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + run: sh -x update_description.sh README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..785d99e --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ +[![Build Docker image](https://github.com/sippy/webrtc_phone/actions/workflows/build.yml/badge.svg)](https://github.com/sippy/webrtc_phone/actions/workflows/build.yml) + +# What is it? + +This is a technology demo integrating Sippy RTPProxy and Sippy B2BUA with +WebRTC-compatible clients. It includes four main components: + +1. Sippy B2BUA. +2. Sippy RTPProxy. +3. SIP.js demo application. +4. Web server. + +The container starts RTPProxy and B2BUA listening on WSS port `9876/TCP`, and +a web server on HTTPS port `443/TCP`. Both share the same self-signed TLS key +generated during the container build process. This allows users to open the +demo page and connect their browser to the B2BUA over WSS. + +When the user initiates a call, the B2BUA/RTPProxy sets up two RTP sessions +(one encrypted and one plain) and initiates an outbound SIP call to the SIP +destination controlled by the `OUTBOUND_ROUTE` environment variable. + +# Usage + +```bash +docker pull sippylabs/webrtc_phone:latest +docker run -it --name webrtc_phone -P --network=host -e OUTBOUND_ROUTE="user@sip.mypbx.net;auth=foo:bar" -d sippylabs/webrtc_phone:latest +``` + +# Introspection + +The container produces various SIP/RTP/WSS logs that can be inspected using +the `docker log` command. The amount of RTP logs can be controlled by the +`RTPP_LOG_LEVEL` environment variable. Possible values are `DBUG`, `INFO`, +`WARN`, `ERR`, and `CRIT` (in decreasing order of verbosity). + +# Caveats + +- Connection to the WSS server will fail with error `1015` in Firefox. It + works in Chrome and Microsoft Edge as long as the user accepts the security + warning when opening the demo page. This is caused by the usage of the + self-signed certificate. +- Only `Demo 1` works. +- Due to the need for a range of UDP ports for RTP sessions (2,000 by default), + the usage of the `host` network is recommended. + +# Links and References + +- [RTPProxy @ GitHub](https://github.com/sippy/rtpproxy/) +- [Sippy B2BUA @ GitHub](https://github.com/sippy/b2bua/) +- [SIP.js @ GitHub](https://github.com/onsip/SIP.js/) +- [Sources for this container @ GitHub](https://github.com/sippy/webrtc_phone/) diff --git a/update_description.sh b/update_description.sh new file mode 100644 index 0000000..ea42896 --- /dev/null +++ b/update_description.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +set -e + +md5sum_q() { + md5sum "${@}" | awk '{print $1}' +} + +# Get the JWT token +TOKEN="$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${DOCKER_USERNAME}'", "password": "'${DOCKER_PASSWORD}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)" +if [ -z "${TOKEN}" -o "${TOKEN}" = "null" ] +then + echo "ERROR: Invalid or no JWT TOKEN returned!" 1>&2 + exit 1 +fi + +BCSUM1="`jq -r .nonce < /dev/null | md5sum_q`" +BCSUM2="`echo | md5sum_q`" + +API_URL="https://hub.docker.com/v2/repositories/${DOCKER_REPO}/" +OLDCSUM="`curl -s -H "Authorization: JWT ${TOKEN}" "${API_URL}" | jq -r .full_description | md5sum_q`" +NEWCSUM="`md5sum_q "${1}"`" +if [ "${OLDCSUM}" = "${NEWCSUM}" ] +then + # description is up to date already + exit 0 +fi +if [ "${OLDCSUM}" = "${BCSUM1}" -o "${OLDCSUM}" = "${BCSUM2}" ] +then + echo "ERROR: Empty description read!" 1>&2 + exit 1 +fi + +MYNAME="`basename "${0}"`" +DESCRIPTION_FILE="`mktemp -t ${MYNAME}.XXXXXXX`" +echo '{"full_description": "' > "${DESCRIPTION_FILE}" +perl -0777 -p -e 's|\n\z||' "${1}" | perl -p -e 's|\n|\\n\n|' >> "${DESCRIPTION_FILE}" +echo '"}' >> "${DESCRIPTION_FILE}" + +# Update the description on DockerHub +curl -X PATCH -H "Content-Type: application/json" -H "Authorization: JWT ${TOKEN}" -d @"${DESCRIPTION_FILE}" "${API_URL}" +rm "${DESCRIPTION_FILE}"