{"id":13783473,"url":"https://github.com/matrix-org/voip-tester","last_synced_at":"2025-06-12T12:33:13.951Z","repository":{"id":81464294,"uuid":"205418733","full_name":"matrix-org/voip-tester","owner":"matrix-org","description":"Tests VoIP ","archived":false,"fork":false,"pushed_at":"2022-09-14T08:28:47.000Z","size":71,"stargazers_count":28,"open_issues_count":37,"forks_count":6,"subscribers_count":28,"default_branch":"master","last_synced_at":"2025-04-10T16:07:05.019Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matrix-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-30T16:27:44.000Z","updated_at":"2025-03-27T08:12:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"7ead0f57-79e2-426a-9479-4dcad84e19ef","html_url":"https://github.com/matrix-org/voip-tester","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/matrix-org/voip-tester","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matrix-org%2Fvoip-tester","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matrix-org%2Fvoip-tester/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matrix-org%2Fvoip-tester/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matrix-org%2Fvoip-tester/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matrix-org","download_url":"https://codeload.github.com/matrix-org/voip-tester/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matrix-org%2Fvoip-tester/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259465201,"owners_count":22862048,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T19:00:22.272Z","updated_at":"2025-06-12T12:33:13.895Z","avatar_url":"https://github.com/matrix-org.png","language":"JavaScript","funding_links":[],"categories":["VoIP"],"sub_categories":["Federation data"],"readme":"This is a work-in-progress VoIP test utility for Matrix.\n\nThere is the opportunity to build on it programatically, but the project also\nincludes a web frontend that runs in-browser.\n\nIt tests your homeserver's STUN/TURN servers and generates a report and score.\n\n\n## mxvoiptestd (test daemon)\n\n### How it's used\n\nThe user accesses the test utility page in their web browser. (Their web browser\nmust support WebRTC.)\n\nThe user logs in to an account on their homeserver and their web browser requests\nthe homeserver's ICE (STUN/TURN) server details.\n\nThe browser contacts the TURN servers and gathers ICE candidates. Once this is\ndone, the browser offers the candidates to the `mxvoiptestd` server and waits for\nan answer.\n\n`mxvoiptestd` begins gathering its own candidates and answers.\n\nThe browser and the server connect to each other and exchange a greeting over an\n`RTCDataChannel`.\n\nThis process is repeated for every TURN URI and in both IPv4 and IPv6 to build up\na report.\n\n\n#### Current scoring system\n\n**Overall scores for IPv4 and IPv6 support**:\n\n* Fail: No STUN or TURN support whatsoever.\n* Poor: Either only STUN or only TURN.\n* Good: STUN and TURN supported over at least one protocol.\n* Great: STUN and TURN over both TCP and UDP, both secure and insecure.\n* Excellent: In addition to great, there is a secure TURN service over TCP port\n  443 (which looks like HTTPS traffic and will likely get through more firewalls).\n\n\u003cu\u003eNote:\u003c/u\u003e The requirement to have insecure transports to get a 'Great' score is\nlikely to go away.\n\n**Scores for individual TURN URIs:**\n\n* Fail: Neither STUN candidates nor (working) TURN candidates found.\n* Poor: Either only STUN candidates found, or only (working) TURN candidates found.\n* Excellent: Both STUN candidates and TURN candidates found — and the TURN candidate\n  was tested to work.\n\n\u003cu\u003eNote:\u003c/u\u003e Currently, only unencrypted UDP TURN URIs seem to generate STUN\nURIs and thus other TURN URIs fail to achieve Excellent — even on reputable\nservers. This is being investigated and may be a bug in the tester.\n\n\n### Warning\n\nThis utility is not yet finished and is not known to behave or report correctly;\nplease see the list of issues for points of needed development and investigation.\n\nNotably, there is doubt about the grades assigned by this tool, so there is not\nnecessarily anything wrong if you receive *poor* and only *good* scores on some\naspects.\n\n\n### Thoughts on further directions\n\nThe browser WebRTC API is quite restrictive; e.g. it does not allow changing the\ncandidates in use (even by attempting to alter the SDP).\n\nWe also can't access any of the information needed to deeply diagnose STUN and\nTURN errors.\n\nUltimately, I would loved to have taken this further but I think that needs to\ngo out of the browser.\n\n(With the user's consent, the TURN credentials could be shared with the server\nto do this testing and have the results show up in the report.)\n\n\n### Notes on deployment\n\nInstall into a venv and run with `hypercorn`:\n\n`VOIPTEST_CONFIG=/path/to/config.toml hypercorn mxvoiptestd.webapi:app --log-level info --error-logfile -`\n\nNote that a configuration file is optional — but you will need one if you need\nto use a TURN server for your `mxvoiptestd` (such as if `mxvoiptestd` is behind NAT).\n\n\n## Development instructions\n\n### Set up\n\nYou may need some dependencies which can be installed on Debian and Ubuntu with:\n\n`sudo apt install libavdevice-dev libavfilter-dev libopus-dev libvpx-dev pkg-config`\n\nThese dependencies may be required for `aiortc`, which has instructions for other\noperating systems [here](https://github.com/aiortc/aiortc#installing).\n\n(In some cases, binary releases are available for `aiortc` so you may not need\nto install these manually.)\n\nCreate a venv for this project and `pip install -e /path/to/mxvoiptestd` whilst\nhaving the venv activated.\n\n\n### Compiling SCSS\n\n```\nscss scss/tester.scss -t compressed \u003e mxvoiptestd/static/tester.css\n```\n\nCurrently, to avoid hassle, the resultant `tester.css` should be committed in\nthis repository whenever `tester.scss` is updated.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatrix-org%2Fvoip-tester","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatrix-org%2Fvoip-tester","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatrix-org%2Fvoip-tester/lists"}