No caller ID: Calls on Session

November 18, 2021 / Technical

Voice and video calls have been Session’s most requested feature ever since we launched. Calling has become a core feature of most other messengers, and it’s an important step for Session’s development. 

As we always do, we wanted to build a call solution which wouldn’t sacrifice your privacy, security, or safety in any way. Our development process for calls involves first creating a robust calling implementation in Session, and then adding onion-routing capabilities to that calling implementation. With this in mind, Session will have a 2-stage rollout for calls.

The first stage will be an opt-in beta release of our peer-to-peer calling implementation. This will be available while we complete the Lokinet integration required to make onion-routed calls possible. Once Lokinet integration is complete, onion-routed calls will be released as the second stage of the rollout.

Give the people what they want: why we’re releasing P2P calls

Due to the increased complexity of adding onion-routing to calls—a world first in a messaging app—we always knew it would take us a bit longer to finish off our onion-routed call implementation than the peer-to-peer calling solution. 

Initially, we only planned to test peer-to-peer calls internally with our QA team and our squad of Session alpha-testers. We weren’t going to release peer-to-peer calls publicly at all, instead we were going to wait for the release of fully-fledged onion-routed calls. 

However, as Session’s user base has boomed over the last 6 months, there was one feature people were increasingly crying out for — calls. Voice calls are a must-have for modern messengers, and as more people were migrating across to Session, it was one of the main things stopping them from being able to convince their friends, family, and colleagues to move across with them. Because of that feedback, we decided to do some formal consultation with the community to see whether people would prefer to wait a little longer for onion-routed calls, or if they wanted the instant(ish) gratification of a peer-to-peer release. 

Testing Session video calls
Testing Session video calls in the Melbourne office.
The community overwhelmingly preferred to have an early release of peer-to-peer calls — and we just couldn’t ignore the raging desire for calls on Session. 

As the old saying goes, ‘don’t let perfect be the enemy of good’. While onion-routed calls are an exciting, ground-breaking feature that everybody is eagerly awaiting, that doesn’t mean that peer-to-peer calls aren’t a great calling solution as well. 

Onion-routed calls: What’s the big deal? 

As you probably know, Session onion-routes all its messages using a protocol called onion requests to help protect your privacy and anonymity, but maintaining onion-routing for calling is a much more difficult task. Onion requests only support the transmission of TCP-based protocols (like HTTP) and have limitations on the maximum request size (about 6mb). This means onion requests can’t support streaming of multipart requests — which is required for high-bandwidth activity like calls. There are some TCP streaming protocols out there, but the latency of onion requests makes them unsuitable for carrying those protocols in real-time.

This is not to say that Onion-routing isn’t an important tool to help protect your privacy, but traditional onion routing protocols (onion requests included) have very high latency which makes things like streaming voice and video for calling virtually impossible. But that’s okay, because our purpose-built onion-router, Lokinet, is faster, more efficient, and gives Session the ability to make those onion-routed calls possible. 

Onion requests: Session's new message routing solution
Read about Session's onion requests implementation.
Unlike other onion routing protocols (read: onion requests), Lokinet can onion-route any IP-based protocol, including TCP, ICMP, and (importantly) UDP. UDP is a fast and efficient connectionless protocol which is perfect for applications like calls. Using a custom streaming protocol like WebRTC (which carries UDP packets), real-time voice and video calls are possible even while onion-routing all of the traffic. Up until the creation of Lokinet, most onion routing protocols have only been able to carry TCP traffic, which doesn’t offer the low-latency required for a good calling experience.

This is why Session’s calling implementation is so groundbreaking. We had to create an entirely new onion-routing protocol from the ground up to make it possible, as opposed to relying on existing onion networks. That was a huge undertaking in terms of network infrastructure and development, but we are so, so close. In our early tests conducting calls over Lokinet, the latency is similar or better than an international phone call. Once we have completed our Lokinet implementation, Session will be the most private way you can have a call. 

We are super excited about onion-routed calls — it’ll be the biggest feature release in Session’s history. You can expect more info about the release as we get closer, but in the meantime you can help us beta test peer-to-peer calling.

Peer-to-peer calls: How you’re helping

By participating in the P2P call beta, you can help us: 

  • Test calling user interface and user experience

  • Deliver onion-routed calls more quickly

  • Enjoy calling your friends and family on Session

Privacy

Our P2P calls will offer a similar level of privacy to other messaging apps such as Signal, however, P2P calls do not offer the same IP protection which is offered by onion-routing. 

This means when you make a call you will expose your IP address to an Oxen foundation (OPTF) operated STUN/TURN server and to the other call participant. Before you enable P2P calls, make sure you assess your own personal situation to determine whether the risk of exposing your IP is worth it. For those of you who cannot risk exposing your IP — onion-routed calls are on the way.

Encryption

All calls are webRTC voice calls are end-to-end encrypted This is handled by the webRTC protocol which uses a combination DTLS and SRTP to encrypt voice and video data streams and connection metadata. This means the only person who can hear your voice or see you on video is the other participant in the call.

Settings

Initially, P2P calls will be released as an experimental feature which you will need to enable in your app settings. If you are extremely concerned about your privacy, or need to ensure with high reliability that your Session ID is not connected to your real identity, we do not recommend participating in the call beta program. However, for the vast majority of users P2P calls should offer a high level of privacy and security. 

For those users who choose not to enable calls, your IP address will never be exposed, since connection to a STUN/TURN server requires you to opt-in to calls as a feature in your settings.

More support and information around how calling will work in-app will be released closer to the beginning of the beta program. 

Chat soon

We are testing calls every day — you have probably seen some sneak peeks of our internal tests being posted on our social media channels over the last few weeks. If you want to keep up to date with everything that is going on in the world of calls, make sure to follow Session on Twitter or join the Session open group. 

We can’t wait to share calls with you — chat soon. 

Join the movement to keep the internet private!

Chat with like-minded individuals in the Sessions Open Group Channel.

Friends don’t let friends use compromised messengers.

Sign up to the mailing list and start taking action!