Daniel Pocock: Get WebRTC going faster
On Saturday, Lumicall began offering free calls from browser to mobile using the free and open WebRTC technology. It should be no surprise that the service has been popular.
Is it really free and open?
The only way to prove this technology is free is to help people implement this for themself.
On Monday, I uploaded reSIProcate v1.9.0 beta7 packages to Debian. The reSIProcate SIP proxy, repro, is one of the core components of the solution behind the free Lumicall service.
Simply install the repro and resiprocate-turn-server packages using apt-get and make the following changes to the configuration (use your own IP addresses of course). I've taken this diff from my own runtime environment, only hiding my passwords, so that you can see exactly how I got it working:
This is a diff against the /etc/repro/repro.config file distributed in the Debian package version 1.9.0~beta7-1. In the example above, I've included WSS transport defintions for WebSockets over TLS. Use the standard procedure for creating webserver SSL certificates to create certificates for repro and make sure you insert the correct filenames in the TLS parameters above. I've also duplicated every transport for IPv6. If you don't want TLS/WSS or IPv6, just comment those entries out (and renumber the remaining transports). Web-based SIP proxy setup Once you have repro running, go to the web admin interface (port 5080, username: admin, password: admin) and finish the setup using the web UI. The following steps are essential:
--- repro.config.orig 2013-12-11 17:36:27.179228324 +0100 +++ repro-ws.sip5060.net.config 2013-12-11 17:48:24.159938649 +0100 @@ -143,6 +143,41 @@ # Transport6TlsClientVerification = None # Transport6RecordRouteUri = sip:h1.sipdomain.com;transport=WS +Transport1Interface = 195.8.117.57:80 +Transport1Type = WS +Transport1RecordRouteUri = auto + +Transport2Interface = 2001:67c:1388:1000::57:80 +Transport2Type = WS +Transport2RecordRouteUri = auto + +Transport3Interface = 195.8.117.57:5060 +Transport3Type = TCP +Transport3RecordRouteUri = auto + +Transport4Interface = 2001:67c:1388:1000::57:5060 +Transport4Type = TCP +Transport4RecordRouteUri = auto + +Transport5Interface = 195.8.117.57:443 +Transport5Type = WSS +#Transport5RecordRouteUri = auto +Transport5TlsDomain = ws.sip5060.net +Transport5TlsClientVerification = None +Transport5RecordRouteUri = sip:ws.sip5060.net;transport=WSS +Transport5TlsCertificate = /etc/ssl/ssl.crt/ws.sip5060.net-bundle.crt +Transport5TlsPrivateKey = /etc/ssl/private/ws.sip5060.net-key.pem + +Transport6Interface = 2001:67c:1388:1000::57:443 +Transport6Type = WSS +#Transport6RecordRouteUri = auto +Transport6TlsDomain = ws.sip5060.net +Transport6TlsClientVerification = None +Transport6RecordRouteUri = sip:ws.sip5060.net;transport=WSS +Transport6TlsCertificate = /etc/ssl/ssl.crt/ws.sip5060.net-bundle.crt +Transport6TlsPrivateKey = /etc/ssl/private/ws.sip5060.net-key.pem + + # Comma separated list of DNS servers, overrides default OS detected list (leave blank # for default) DNSServers = @@ -455,7 +490,7 @@ ForceRecordRouting = false # Assume path option -AssumePath = false +AssumePath = true # Disable registrar DisableRegistrar = false @@ -481,7 +516,7 @@ # WARNING: Before enabling this, ensure you have a RecordRouteUri setup, or are using # the alternate transport specification mechanism and defining a RecordRouteUri per # transport: TransportXRecordRouteUri -DisableOutbound = true +DisableOutbound = false # Set the draft version of outbound to support (default: RFC5626) # Other accepted values are the versions of the IETF drafts, before RFC5626 was issued @@ -505,7 +540,7 @@ # WARNING: Before enabling this, ensure you have a RecordRouteUri setup, or are using # the alternate transport specification mechanism and defining a RecordRouteUri per # transport: TransportXRecordRouteUri -EnableFlowTokens = false +EnableFlowTokens = true # Enable use of flow-tokens in non-outbound cases for clients detected to be behind a NAT. # This a more selective flow token hack mode for clients not supporting RFC5626. The
This is a diff against the /etc/repro/repro.config file distributed in the Debian package version 1.9.0~beta7-1. In the example above, I've included WSS transport defintions for WebSockets over TLS. Use the standard procedure for creating webserver SSL certificates to create certificates for repro and make sure you insert the correct filenames in the TLS parameters above. I've also duplicated every transport for IPv6. If you don't want TLS/WSS or IPv6, just comment those entries out (and renumber the remaining transports). Web-based SIP proxy setup Once you have repro running, go to the web admin interface (port 5080, username: admin, password: admin) and finish the setup using the web UI. The following steps are essential:
- Add your domain (and restart the repro daemon after adding your domain)
- Add some users
- Add any routes to external services (optional - in my next blog I'll demonstrate how to route WebRTC calls to Asterisk using the Debian packages and less than 20 lines of configuration)
test:notasecret:reTurn:authorizedIMPORTANT: the realm in the users file (reTurn in the example and default config) must be identical to the AuthenticationRealm in the /etc/reTurnServer.config file. On your own web site Simply install your own apache server and clone the webrtc.lumicall.org demo site. Modify the file js/custom.js and include the settings for your own server.
# cd /var/www # mkdir webcall # cd webcall # wget -r -nH http://webrtc.lumicall.org # vi js/custom.jsIn the custom.js, make sure you use a ws:// URL if you didn't set up SSL certificates and use a wss:// URL if you did. The IP or domain of your repro server must be in the ws:// or wss:// URL. Now navigate to the URL ending with /webcall on your server. For RHEL, Fedora and other RPM users Can somebody please assist with the review of the cajun-jsonapi dependency package so I can upload this new version of reSIProcate to Fedora? I'm also planning to make v1.9.0 available in EPEL6 when it is released in January. Questions? Please come and ask questions or discuss your experiences on the Free RTC mailing list sponsored by FSF Europe.
For the fifth year in a row the fearless WebKitGTK+ hackers have gathered in A Coru a to bring GNOME and the web closer. Igalia has organized and hosted it as usual, welcoming a record 30 people to its office. The GNOME foundation has sponsored my trip allowing me to fly the cool 18 seats propeller airplane from Lisbon to A Coru a, which is a nice adventure, and have pulpo a feira for dinner, which I simply love! That in addition to enjoying the company of so many great hackers.







Following up on my
probably just not as default.
I do agree
Version 0.2.1 of RcppCNPy is now on
The open-source chess program 




Last week was the
The week has been wonderful. It was my second OpenStack design summit, and I
loved it. Bumping into various people I've never met so far and worked with
online was a real pleasure. As it was to meet again with fellow OpenStack
developers! The event organisation was great, as were the parties. :-)
On the last day, I had the chance to present a talk with Eoghan Glynn and
Nick Barcet how we built the auto-scaling feature in Heat, implementing the
"alarming" feature needed in Ceilometer.

While quite old fashioned,
I'm very happy: I was finally able to present a talk at a Free Software conference in Paran , Argentina Regina's hometown. Not only in Paran , but at the Vieja Usina culture center, half a block away from her parents' house. So, I must doubly thank Laura: First, for letting us know there would be a Free Software conference there, and second, for taking some pictures :-
here's the list of RC bugs I've worked on during the last week.
(or, cutting out bloat by using a platform where bloat won't fly)




The following post is a verbatim copy of
This could have been a blog post about toothbrushes for monkeys, which I
seem to have dreamed about this morning. But then I was vaguely listening
to the