Serval Project, June 2013
These notes accompany the release in June 2013 of version 0.91 of the Serval Mesh app for Android 2.2 “Froyo” and above.
Serval Mesh is an app for Android 2.2 “Froyo” and above. It provides free, secure phone-to-phone voice calling, SMS and file sharing over Wi-Fi, without the need for a SIM card or a commercial mobile telephone carrier. In other words, it lets your Android phone call other Android phones running Serval Mesh within Wi-Fi range.
The Serval Mesh Privacy Policy describes how Serval Mesh handles your personal and other sensitive information.
The Serval Mesh 0.90 User's Manual contains instructions for using Serval Mesh.
Serval Mesh is EXPERIMENTAL SOFTWARE. It has not yet reached version 1.0, and is intended for pre-production, demonstration purposes only. It may not work as advertised, it may lose or alter messages and files that it carries, it may consume a lot of space, speed and battery, and it may crash unexpectedly.
The Serval Mesh "Connect" screen allows you to connect to other Serval Mesh devices that provide their own access points. If you do so, this will cut off normal Wi-Fi network access while Serval Mesh is running, and services like Google Updates, E-mail, social media and other notifications may not work, or if you have a mobile data plan, may cost you money.
On the Serval Mesh "Connect" screen, connecting to any network marked "HotSpot" will put your device's Wi-Fi into Access Point mode. This will give nearby devices access to your mobile data plan, and COULD COST YOU MONEY.
On the Serval Mesh "Connect" screen, connecting to any network marked "Mesh" will request root permission (super-user) on your Android device in order to put Wi-Fi into Ad-Hoc mode. If you grant super-user permission to Serval Mesh, this will cut off normal Wi-Fi network access while Serval Mesh is running, and services like Google Updates, E-mail, social media and other notifications may not work, or if you have a mobile data plan, may cost you money.
Serval Mesh telephony is a “best effort” service, primarily intended for when conventional telephony is not possible or cost effective, and MUST NOT BE RELIED UPON for emergencies in place of carrier-grade communications systems. The Serval Project cannot be held responsible for any performance or non-performance of the technologies that they provide in good will, and if you use these technologies you must agree to indemnify the Serval Project from any such claims.
The Serval Mesh software copies all files shared using the Rhizome file distribution service to other phones and devices running the Serval Mesh software, regardless of size, content or intended recipient. The Serval Project cannot be held responsible for the legality or propriety of any files received via Rhizome, nor for any loss, damage or offence caused by the transmission or receipt of any content via Rhizome.
See the disclaimers below.
The following improvements have been made since version 0.90.1:
-
The application will operate without requesting root permission unless "Mesh" network support is explicitly requested by the user. No attempt will be made to modify the phone's network settings, test for Adhoc support or request permission to run as root on the initial install of the application.
-
New network connection screen replaces the old On/Off switch. This screen has been designed to guide the user in how to establish a network connection with other nearby phones.
-
Significant changes have been made to the method the application uses to deliver packets reliably across the network. An all new routing algorythm has been implemented. The previous distance vector approach to routing could be confused by highly dense networks and reacted very slowly to changing conditions. An all new link state router will react to changing network conditions more accurately and rapidly. When network packets are lost, they will be retransmitted on a per-hop basis, greatly increasing the reliability of the network even over multiple very lossy network links.
-
Add support for the more modern Opus audio codec. This codec can greatly reduce the bandwidth required for a voice call, without noticibly reducing audio quality or adding to delay.
The following issues in version 0.90 have been fixed:
-
application crash on start reported on Android version 2.3.7 CyanogenMod (French error message observed on HTC Desire HD), caused by an unknown exception thrown from
getPackageManager().getPackageInfo()
leaving a variable uninitialised, later producing an unhandledNullPointerException
-- see serval-dna issue #43; -
application crash on opening the Message list under CyanogenMod 10 -- see batphone issue #67;
-
application crash on opening the Message list if the SD Card is absent or apparently unmounted (observed on an HTC phone with user-installed ROM) -- was an unhandled exception thrown when the Batphone app attempts to insert the initial message into the empty "messages" SQLite database;
-
Serval-DNA daemon crash if system memory exhausted -- the function that assembles Rhizome bundle advertisments did not perform proper clean-up upon receiving a
malloc()
NULL result; -
initial period of silence in audio calls via an Asterisk SIP-VoIP gateway -- caused when the initial RTP timestamp was non-zero (probably arising from SIP Early Media) -- the solution was for VoMP playback to treat the initial timestamp as zero instead of filling the jitter buffer to synchronise with it;
-
improve voice call usability on congested or high-latency networks by increasing the VoMP timeout when waiting for the called party to indicate ringing while placing a voice call;
-
reduce UI freezes during Rhizome transfers by preventing the Serval DNA daemon from holding a Rhizome database read lock for the entire duration of an outgoing bundle, instead it now acquires and releases the lock for each sent buffer;
-
reduce UI freezes and reduce network congestion during Rhizome transfers by reducing the MDP packet priority for Rhizome transfers.
There are also more known issues, listed below.
This release of Serval Mesh has been extensively used and tested on the following devices with no problems:
-
Huawei IDEOS X1 u8180, running Android 2.2.2 (rooted) and CyanogenMod 2.3.7
-
HTC Sensation, running Android 2.3.4 (rooted) and HTC Sense 3.0
-
HTC One S
-
Motorola Milestone
Prior releases of Serval Mesh are known to work on the following devices, which is a strong indication that this release may also work:
-
Huawei IDEOS u8150
-
Samsung Galaxy Tab 7 inch
-
Samsung Galaxy Gio S5660, running Android 2.3.6 (rooted)
-
Samsung Vitality SCH-R720
-
ZTE Score X500
-
HTC/Google G1 (“Dream”)
This release of Serval Mesh is known to work on the following devices with minor problems:
-
Samsung Galaxy S2 GT-I9100, running Android 2.3 (rooted): Ad-Hoc Wi-Fi is not completely compatible with the Ad-Hoc Wi-Fi on other devices, specifically the Huawei IDEOS phones listed above. If the Galaxy S2 is the first device to join the mesh, then IDEOS phones cannot join. However, if an IDEOS phone is the first device, then the Galaxy S2 does join okay.
-
Google Nexus 1: does not interoperate well with HTC/Google G1.
The following devices have major known problems in this or prior releases:
-
HTC Wildfire A3335
-
Samsung Galaxy Nexus: Wi-Fi Ad-Hoc mode does not start; Wi-Fi mode reverts to Off.
-
Motorola Razr i XT890: Wi-Fi control does not work.
-
Samsung Galaxy Note 2: does not detect peers. Possibly the same problem as the Galaxy S2 described above, but not tested.
See the Mobile Device Compatability Table for more details and devices.
The following issues are planned to be fixed by version 1.0:
-
Poor support for multi-hop mesh calls -- see serval-dna issue #37. You can successfully call someone who is within Wi-Fi range of your phone, but calls that need to be carried through intermediate phones are unreliable.
-
Rhizome slowly and gradually consumes all space on your SD Card as you send and receive files -- see batphone issue #8 and serval-dna issue #10. You can work around this by deleting the Rhizome database while the Serval Mesh app is not running, or by re-installing the Serval Mesh app. To delete the database, use the adb shell command:
rm -r /sdcard/Android/data/org.servalproject/files/rhizome
-
Mesh call quality degrades whenever Rhizome file or MeshMS transfers are in progress -- see serval-dna issue #1.
-
The Serval Mesh app works best with Android root permission, because it depends on Wi-Fi Ad-Hoc mode which can only be started with root permision -- see batphone issue #47.
-
Voice call quality is unstable and relatively untested. The inefficient codec used by VoMP consumes more bandwidth than necessary. There is no echo cancellation, so echo may have to be controlled by lowering speaker volume or using earphones. Audio latency (delay) might exceed one second in some situations.
-
Every time a new MeshMS message is added to a thread, the size of the message transmitted by Rhizome increases, because it re-transmits all the prior messages in the same thread. So every message thread will consume more network bandwidth and SD Card space as it grows -- see serval-dna issue #28. This can be worked around by deleting the Rhizome database as described above.
-
VoMP does not play a "ringing" sound while placing a call, nor a "hangup" sound when the other party hangs up -- see batphone issue #76.
-
After using the "Unshare" button on a Rhizome file, it does not disappear from the Rhizome file list -- see batphone issue #53. Work around: close the list (Back control) and re-open it ("Find" button).
-
The application has been observed to crash when the remote party hangs up a voice call under conditions of high network latency or packet loss -- see batphone issue #68.
-
The application may crash when adding a contact from the peer list -- see batphone issue #70.
-
The application may crash when opening the peer list, observed on Samsung Galaxy S running CyanogenMod 10 nightly build -- see batphone issue #71.
-
Rhizome can worsen network congestion, because Rhizome database lock conflicts under conditions of high network packet loss cause Rhizome to re-fetch the failed bundles from the start -- see batphone issue #72.
-
The user's personal hotspot name (ESSID) is not restored after the application has used Wi-Fi in Access Point mode: it remains set to "mesh.servalproject.org" until the user re-sets it -- see batphone issue #73.
-
The incoming message notification sound on Samsung Galaxy Ace with CyanogenMod 7 is the last audio message played by WhatsApp -- see batphone issue #75.
There are more known bugs and issues listed under the GitHub Issues page for batphone issues and serval-dna issues.
Serval Mesh is free software produced by the Serval Project and many contributors. The copyright in all source code is owned by Serval Project Inc., an organisation incorporated in the state of South Australia in the Commonwealth of Australia.
The Java/XML source code of Serval Mesh is licensed to the public under the GNU General Public License version 3. The serval-dna component of Serval Mesh is licensed to the public under the GNU General Public License version 2. All source code is freely available from the Serval Project's batphone and serval-dna Git repositories on GitHub.
Development of Serval Mesh was funded by the New America Foundation's Open Technology Institute and the Shuttleworth Foundation.
The Serval Project was founded by Dr Paul Gardner-Stephen and Romana Challans, both academic staff at the School of Computer Science, Engineering and Mathematics at Flinders University in South Australia. Their work on the Serval Project is made possible by the ongoing support of the university.
SERVAL MESH refers to the software, protocols, systems and other goods, tangible and intangible produced by The Serval Project, Serval Project, Inc., and Serval Project Pty Limited.
SERVAL MESH COMES WITH NO WARRANTY, EXPRESSED OR IMPLIED, AND IS NOT FIT FOR MERCHANTABILITY FOR ANY PURPOSE. USE AT YOUR SOLE RISK.
SERVAL MESH WILL REDUCE THE BATTERY LIFE OF DEVICES ON WHICH IT RUNS.
SERVAL MESH MAY CONSUME ALL STORAGE, both LOCAL and EXTERNAL (eg, MICRO SD CARD) ON THE DEVICES ON WHICH IT RUNS.
SERVAL MESH SHOULD NOT BE INSTALLED ON DEVICES WHICH ARE DEPENDED UPON FOR EMERGENCY COMMUNICATION.
SERVAL MESH MAY TRANSMIT SOME DATA, INCLUDING TELEPHONE CALLS, MESSAGES AND OTHER POTENTIALLY PRIVATE DATA IN THE CLEAR.
SERVAL MESH PROTECTIONS against IMPERSONATION or OTHER MISAPPROPRIATION of IDENTITY ESTABLISHING FACTORS MAY BE DEFECTIVE and MAY NOT PERFORM AS EXPECTED.
SERVAL MESH SHOULD NOT BE RELIED UPON IN AN EMERGENCY is it is an INCOMPLETE PROTOTYPE and BEST EFFORT in nature, and may FAIL TO OPERATE.
SERVAL MESH may COST YOU MONEY if you have a MOBILE DATA PLAN by TURNING OFF WI-FI NETWORK ACCESS or by allowing NEARBY DEVICES TO USE YOUR DATA PLAN WITHOUT YOUR KNOWLEDGE OR CONSENT.
SERVAL MESH may REVEAL AND/OR BROADCAST YOUR LOCATION, IDENTITY OR OTHER INFORMATION through its normal operation.
SERVAL MESH is an INCOMPLETE, PRE-PRODUCTION software, experimental in nature and is not to be considered fit for merchantability for any purpose. It has many defects, omissions and errors that will hamper its fulfilling of its intended purposes.
Copyright 2013 Serval Project Inc.
This document is available under the Creative Commons Attribution 4.0 International licence.