Skip to content

Commit

Permalink
Add description and synchronize it with DH.
Browse files Browse the repository at this point in the history
Move docker files into a separate directory.
  • Loading branch information
sobomax committed Jul 11, 2024
1 parent e703e32 commit d9ffae2
Show file tree
Hide file tree
Showing 9 changed files with 150 additions and 27 deletions.
25 changes: 24 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,30 @@ 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
uses: actions/checkout@v4
with:
submodules: 'recursive'

- name: Checkout SIP.js repo
uses: actions/checkout@v4
with:
repository: 'onsip/SIP.js'
path: docker/SIP.js

- name: Checkout Sippy B2BUA repo
uses: actions/checkout@v4
with:
repository: 'sippy/b2bua'
path: docker/b2bua
ref: RFC7118

- name: Build SIP.js
run: sh -x build/SIP.js.sh

- name: Set up QEMU
id: qemu
uses: docker/setup-qemu-action@v3
Expand Down Expand Up @@ -71,3 +87,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 docker/update_description.sh README.md
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ USER root
ENV DEBIAN_FRONTEND=noninteractive

WORKDIR /webrtc_phone
COPY . /webrtc_phone/
COPY docker /webrtc_phone/

# Build & install everything
RUN /webrtc_phone/build.sh
Expand Down
51 changes: 51 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -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="[email protected];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/)
25 changes: 0 additions & 25 deletions build.sh

This file was deleted.

18 changes: 18 additions & 0 deletions build/SIP.js.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/sh

set -x
set -e

sudo apt-get -y update -qq
sudo apt-get -y install npm

SJDIR="docker/SIP.js"

git -C "${SJDIR}" apply "`pwd`/patches/SIP.js.diff"
cd "docker/SIP.js/demo"
npm install
npm run build-demo
cd -

openssl req -newkey rsa:2048 -nodes -keyout docker/server.key -x509 -days 365 \
-out docker/server.crt -config openssl.cnf
14 changes: 14 additions & 0 deletions docker/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/sh

set -x
set -e

apt-get -y --no-install-recommends update -qq
apt-get -y --no-install-recommends install python-is-python3 python3-pip npm

python3 -m pip install --break-system-packages -U -r b2bua/requirements.txt
npm install http-server

apt-get -y remove git
apt-get -y autoremove
apt-get -y clean
File renamed without changes.
File renamed without changes.
42 changes: 42 additions & 0 deletions docker/update_description.sh
Original file line number Diff line number Diff line change
@@ -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}"

0 comments on commit d9ffae2

Please sign in to comment.