Pilot program Wivox 1.0 is piloting with Indian SMBs now. Book a demo →
Wivox Mobile vs Linphone

Wivox Mobile vs. Linphone

Modern Frameworks and the Mobile Edge.

The Dart sip_ua Stack and WebSockets

Linphone is a highly respected, venerable open-source SIP client, but its foundation lies in older C and C++ libraries with distinct, often cumbersome wrappers required for iOS and Android deployment. In stark contrast, the Wivox mobile softphone represents the next generation of mobile telecommunications, architected entirely on the Flutter 3.x framework utilizing the Dart programming language.

Legacy softphones like Linphone rely on traditional SIP over UDP or TCP transports. While robust on stable networks, this legacy approach struggles massively with modern mobile operating systems (iOS and Android), which aggressively suspend background applications and kill idle network sockets to preserve device battery life.

Wivox circumvents this limitation by utilizing the sip_ua Dart package combined with the flutter_webrtc plugin. Instead of operating standard SIP over UDP port 5060, the Wivox softphone encapsulates all SIP signaling within Secure WebSockets (wss://satyaminfotech.tech/ws). This approach fundamentally masks the SIP traffic as standard, encrypted HTTPS web traffic, allowing the softphone to seamlessly traverse highly restrictive corporate firewalls, hotel Wi-Fi networks, and ISP gateways that routinely block or throttle UDP port 5060.

Furthermore, the flutter_webrtc plugin guarantees high-definition audio fidelity by bypassing software-level audio rendering. Instead, it hooks directly into the native WebRTC API implementations embedded deeply within iOS and Android, inherently utilizing hardware-accelerated echo cancellation, automatic gain control, and highly resilient dynamic jitter buffers designed specifically for lossy mobile networks.

Softphone Metric Wivox Mobile App (Flutter / Dart) Traditional Softphones (e.g., Linphone)
Codebase Architecture Single unified Flutter 3.x codebase (Dart) for true cross-platform parity. Fragmented C/C++ core with separate Java/Kotlin and Swift/Objective-C UI wrappers.
Transport Protocol SIP encapsulated over Secure WebSockets (wss://) on TCP 443. Typically SIP over UDP/TCP 5060, highly susceptible to firewall blocking.
Media Encryption Strict enforcement of DTLS-SRTP (RFC 5764) via WebRTC. Frequently defaults to SDES-SRTP, exposing keys in SIP SDP payloads.
Background Processing Deep OS integration via Apple PushKit / CallKit and Firebase Cloud Messaging (FCM). Often relies on persistent background TCP sockets, resulting in severe battery drain.
Battery Efficiency Extremely high; wakes app dynamically only during active incoming calls. Poor; background socket maintenance drains battery rapidly.

Battery Efficiency, PushKit, and System-Level Call Integration

The most significant architectural failure point of older SIP softphones is the inability to reliably receive inbound calls when the application is terminated or the mobile device is locked. Modern mobile OS environments restrict apps from running constant background SIP registration loops.

Wivox solves this through deep, asynchronous integration with iOS CallKit and Android ConnectionService via Apple Push Notification service (APNs) and Firebase Cloud Messaging (FCM). The architecture does not force the Wivox Flutter app to keep a persistent, battery-draining WebSocket open to the Asterisk server while idle. Instead, it relies on specific OS-level background modes, namely voip and remote-notification.

When an inbound call reaches the Wivox Asterisk core destined for a mobile user, the Node.js API layer detects the incoming channel state and triggers a high-priority VoIP push notification via HTTP to APNs or FCM. The push provider delivers the encrypted payload (containing a unique UUID and incoming-caller-id) to the locked mobile device over the OS's highly optimized cellular control channel. The OS instantly wakes the Wivox application in the background and invokes CallKit or ConnectionService to display the native incoming call screen, completely bypassing the lock screen. Only upon the user swiping to answer does the sip_ua stack re-hydrate the WebSocket connection, re-authenticate with the PBX, process the SDP offer, and begin bridging the DTLS-SRTP audio stream.

NAT Traversal at the Mobile Edge: ICE, STUN, and TURN

Mobile devices are inherently nomadic, constantly shifting IP addresses as they transition between 4G/5G cellular towers and varied Wi-Fi access points. This introduces massive Network Address Translation (NAT) complexities.

To ensure media flows flawlessly across these transitions, the Wivox Flutter app utilizes Interactive Connectivity Establishment (ICE) alongside STUN (Session Traversal Utilities for NAT - RFC 8489). The app is pre-configured to query Google's highly available public STUN servers (stun.l.google.com:19302). During the call setup, the STUN server reflects the mobile device's public, translated IP address and port mapping back to the device. The Wivox sip_ua stack then injects this critical data into the SIP SDP offer as "server-reflexive candidates." This advanced ICE mechanism, paired tightly with the Asterisk PJSIP external_media_address configuration, ensures that the Asterisk core always knows exactly where to send the RTP audio packets, regardless of how deeply nested the mobile device is behind carrier-grade NAT. This sophisticated orchestration entirely eliminates the notorious "one-way audio" anomalies that have plagued traditional SIP softphones for two decades.