Your rating: None Average: 4.9 (34 votes)

s1p is an experimental SIP client for Sailfish OS

Successfully tested with:

  • Asterisk
  • 3CX
  • Yate
  • FritzBox
  • sipgate.de
  • sipgate.co.uk
  • sipnet.ru
  • easyfone.de
  • linphone.org
  • cellip.com
  • easybell.de
  • eventphone.de
  • nfon.com
  • voip.ms
  • voipraider.com
  • peoplefone.de
  • messagenet.com
  • linkspace.it

(please add a comment if you have been able to make it work with a provider not listed above)

Please don't forget to restart the app after making any changes to the settings.

New Salfish versions block access to the contacts database for 3rd party apps. To be able to see your contacts in s1p you have to copy the database file (as root) into the s1p data directory:
devel-su cp -r ~/.local/share/system/privileged/Contacts/qtcontacts-sqlite/contacts.db ~/.local/share/harbour-s1p/




Application versions: 
File harbour-s1p-0.7.9-1.i486.rpm1.85 MB08/10/2020 - 17:24
File harbour-s1p-0.7.9-1.armv7hl.rpm1.82 MB08/10/2020 - 17:24
File harbour-s1p-0.8.0-1.i486.rpm1.85 MB08/10/2020 - 22:46
File harbour-s1p-0.8.0-1.armv7hl.rpm1.82 MB08/10/2020 - 22:46
File harbour-s1p-0.8.1-1.i486.rpm1.85 MB13/10/2020 - 11:40
File harbour-s1p-0.8.1-1.armv7hl.rpm1.82 MB13/10/2020 - 11:40
File harbour-s1p-0.8.2-1.i486.rpm1.86 MB14/10/2020 - 00:37
File harbour-s1p-0.8.2-1.armv7hl.rpm1.82 MB14/10/2020 - 00:37
File harbour-s1p-0.8.3-1.i486.rpm1.86 MB17/10/2020 - 11:16
File harbour-s1p-0.8.3-1.armv7hl.rpm1.82 MB17/10/2020 - 11:16
File harbour-s1p-0.8.4-1.i486.rpm1.9 MB21/10/2020 - 23:00
File harbour-s1p-0.8.4-1.armv7hl.rpm1.87 MB21/10/2020 - 23:00
File harbour-s1p-0.8.5-1.i486.rpm1.9 MB22/10/2020 - 09:43
File harbour-s1p-0.8.5-1.armv7hl.rpm1.87 MB22/10/2020 - 09:43
File harbour-s1p-0.8.6-1.i486.rpm1.9 MB25/10/2020 - 17:08
File harbour-s1p-0.8.6-1.armv7hl.rpm1.87 MB25/10/2020 - 17:08
File harbour-s1p-0.8.7-1.i486.rpm1.9 MB27/10/2020 - 23:32
File harbour-s1p-0.8.7-1.armv7hl.rpm1.87 MB27/10/2020 - 23:32
File harbour-s1p-0.8.8-1.i486.rpm1.91 MB31/10/2020 - 13:41
File harbour-s1p-0.8.8-1.armv7hl.rpm1.87 MB31/10/2020 - 13:41
File harbour-s1p-0.9.0-1.i486.rpm1.91 MB14/11/2020 - 23:12
File harbour-s1p-0.9.0-1.armv7hl.rpm1.88 MB14/11/2020 - 23:12
File harbour-s1p-0.9.1-1.i486.rpm1.92 MB24/11/2020 - 18:57
File harbour-s1p-0.9.1-1.armv7hl.rpm1.88 MB24/11/2020 - 18:57
File harbour-s1p-0.9.2-1.i486.rpm1.92 MB27/11/2020 - 13:14
File harbour-s1p-0.9.2-1.armv7hl.rpm1.88 MB27/11/2020 - 13:14
File harbour-s1p-0.9.3-1.armv7hl.rpm1.88 MB19/03/2021 - 16:46
File harbour-s1p-0.9.3-1.i486.rpm1.93 MB19/03/2021 - 16:46
File harbour-s1p-0.9.4-1.i486.rpm1.93 MB24/03/2021 - 17:31
File harbour-s1p-0.9.4-1.armv7hl.rpm1.88 MB24/03/2021 - 17:31
File harbour-s1p-0.9.5-1.i486.rpm1.93 MB26/03/2021 - 14:35
File harbour-s1p-0.9.5-1.armv7hl.rpm1.89 MB26/03/2021 - 14:35
File harbour-s1p-0.9.5-1.aarch64.rpm1.86 MB13/05/2021 - 13:41
File harbour-s1p-0.9.6-1.i486.rpm1.93 MB13/05/2021 - 18:33
File harbour-s1p-0.9.6-1.armv7hl.rpm1.88 MB13/05/2021 - 18:33
File harbour-s1p-0.9.6-1.aarch64.rpm1.86 MB13/05/2021 - 18:33
File harbour-s1p-0.9.7-1.aarch64.rpm1.86 MB14/07/2021 - 12:02
File harbour-s1p-0.9.7-1.i486.rpm1.93 MB14/07/2021 - 12:02
File harbour-s1p-0.9.7-1.armv7hl.rpm1.88 MB14/07/2021 - 12:02
File harbour-s1p-0.9.8-1.armv7hl.rpm1.88 MB18/07/2021 - 14:32
File harbour-s1p-0.9.8-1.i486.rpm1.93 MB18/07/2021 - 14:32
File harbour-s1p-0.9.8-1.aarch64.rpm1.86 MB18/07/2021 - 14:32
File harbour-s1p-0.9.9-1.aarch64.rpm1.48 MB09/04/2022 - 13:20
File harbour-s1p-0.9.9-1.armv7hl.rpm1.5 MB09/04/2022 - 13:20
File harbour-s1p-0.9.9-1.i486.rpm1.52 MB09/04/2022 - 13:20

- 0.9.9 disables sandboxing to fix startup issues
- 0.9.8 allows dialing numbers saved in notes field (and X-SIP field) from contacts.
- 0.9.7 fixes account description, disables issues tracker
- 0.9.6 fixes audio output selection issues introduced with Sailfish
- 0.9.5 added direct access to contacts.db, user accessible database may be not up to date, though
- 0.9.4 minor imporvements to input fields, copying numbers from call history
- 0.9.3 fixes issues with early media
- 0.9.2 fixes some issues with FritzBox
- 0.9.1 fixes some issues with linphone.org
- 0.9.0 fixes default primary account setting
- 0.8.9 adds support for multiple active accounts
- 0.8.8 adds auto-answer
- 0.8.7 opens active account section (instead of always the first section) in settings dialog.
- 0.8.6 adds avatar image for ongoing calls
- 0.8.5 fixes disappearing hangup cover action after a call has been answered
- 0.8.4 fixes double entries in call history, fixes lookup of contacts in call history
- 0.8.3 improves audio routing, removes annoying switch to pre-call audio state with last samples still being played.
- 0.8.2 adds log upload to issues tracker
- 0.8.1 introduces (optional) log file (~/.local/share/harbour-s1p/s1p.log)
- 0.8.0 fixes issues with additional incoming calls during an already establiched call
- 0.7.9 introduces changes to the binary size for faster startup
- 0.7.8 fixes deleting call history, adds remorse timer to delete
- 0.7.7 fixes adding SIM calls to history when disabled, adds experimental issues tracker.
- 0.7.6 adds cellular call history integration
- 0.7.5 adds better notification handling, bringing UI to foreground on incoming calls
- 0.7.4 fixes double notifications
- 0.7.3 adds notifications, changes the way SIP daemon and UI communicate enabling background operations in the future.
- 0.7.2 fixes microphone input with headsets
- 0.7.1 fixes issue with receiving rtp traffic when local IP changes
- 0.7.0 changes to external IP address handling, crash handling, length of call-id and tags
- 0.6.9 fixes screen unlock on incoming calls
- 0.6.8 adds support for hardware/headset buttons to configuration page
- 0.6.7 fixes server port data type
- 0.6.6 adds support for additional SIP accounts (only one at a time can be active)
- 0.6.5 testing FritzBox 7590 compatibility
- 0.6.4 adds less used DTMF digits (A-D,F) to pulley menu, reduces ambiguity with status messages
- 0.6.3 minor visual changes to the cover page
- 0.6.2 adds contact name lookup by phone number
- 0.6.1 adds minor visual improvements to the call history and contacts pages
- 0.6.0 adds minor visual improvements to the contacts page
- 0.5.9 adds voicemail icon and counter
- 0.5.8 adds default audio port selector to settings dialog
- 0.5.7 adds Yate compatibility
- 0.5.6 adds audible ringback tone
- 0.5.5 adds compatibility with Easybell
- 0.5.4 testing compatibility with Easybell
- 0.5.3 fixes issues with saving display names in call history
- 0.5.2 adds display name to call history
- 0.5.1 fixes phone number in history page
- 0.5.0 adds call history page
- 0.4.9 adds small visual improvements to the UI
- 0.4.8 improves compatibility with pjsip
- 0.4.7 fixes error in media description parser
- 0.4.6 improves compatibility with 3CX
- 0.4.5 adds rport option
- 0.4.4 allows to set bind port on the settings page
- 0.4.3 adds support for buttons on wired headsets to allow answering / hanging-up calls
- 0.4.2 adds display activation on incomming calls
- 0.4.1 fixes misleadling log entries related to RTP destination address
- 0.4.0 adds codec selector in settings dialog
- 0.3.9 adds locking down to one of the available codecs when answering a call
- 0.3.8 adds workaround for 3cx
- 0.3.7 reinstates stricter approach to call progess messages
- 0.3.6 allows a more flexible approach to call progess messages
- 0.3.5 fixes proxy-authentication
- 0.3.4 adds support for display name
- 0.3.3 fixes previously broken default settings
- 0.3.2 fixes regsitering with sip.linphone.org
- 0.3.1 sets default register frequency to 1 hour
- 0.3.0 adds options for bind address and regsiter frequency
- 0.2.9 enables voicemail button, fixes issues with number input
- 0.2.8 fixes issues with setting latency and buffer length
- 0.2.7 adds configuration dialog options for latency and audio buffer length
- 0.2.6 adds configuration-file options for latency and audio buffer length
- 0.2.5 adds improvements to power consumption, audio handler and playback buffer
- 0.2.4 adds preferrence for domain instead of IP in SIP dialogs and adds auth-name field to SIP account settings
- 0.2.3 adds initial DTMF support
- 0.2.2 fixes call status being sometimes overwritten by regstration status
- 0.2.1 adds DNS SRV record lookup
- 0.2.0 adds G.711 μ-law codec, (hopefully) fixes some call-state issues
- 0.1.9 fixes choppy audio on some phones
- 0.1.8 makes some changes to how audio frames are handled
- 0.1.7 adds volume presets
- 0.1.6 enables mute button
- 0.1.5 fixes issues with audio output selection
- 0.1.4 enables audio output selection buttons
- 0.1.3 improves logging and handling of audio packets
- 0.1.2 adds log upload
- 0.1.1 adds contacts page
- 0.1.0 improves UI
- 0.0.9 fixes issues with outbound calls through sipgate
- 0.0.8 fixes inbound calls with sipgate (cancelling outbound calls still broken)
- 0.0.7 fixes some issues with sipgate (inbound calls still broken)
- 0.0.6 improves UI and makes hanging up calls more reliable
- 0.0.5 adds ringtones
- 0.0.4 fixes registering issues with antisip.com
- 0.0.3 adds log page
- 0.0.2 initial release


unmaintained's picture

According to RFC 2833 DTMF can have the following digits.

Event  encoding (decimal)
0--9                0--9
*                     10
#                     11
A--D              12--15
Flash                 16


Does the "R" key work with other SIP phones or would the FritzBox maybe expect a SIP transfer instead? 
Nevertheless, I've added DTMF A-D and Flash to the pulley menu, maybe one of these will do the trick as well.

As for the "call ended" message, it could be that the registering initally fails for some odd reason. You could submit a log and reference the log ID here should this continue to happen.

andy's picture

Unmantained, thank you for all the effort you are putting into this project. I tested the latest version of the app and found the following:
- I confirm that I can make and receive calls (Fritz!box 7590), with a higher quality than the one I get using the Android Linphone or Zoiper apps on Sailfish;
- the status messages are actually much clearer. However, I do not get the message "registered" but "registering failed", and this despite the calls working fine. I have tried to check the log and it actually looks like something is wrong, but I am unable to tell what. If you want to take a look, I sent you the log: id-54. Only once the message "registered" appeared but I was unable to replicate this situation or understand what it depends on;
- I saw that you added the new DTMF digits but I don't think they work. When are they selected should they emit a tone? Because if it has to be, nothing happens. Moreover, not even the dialer digits emit any tone, with the consequence that it is not possible to interact with the automatic responders. Honestly, I don't remember if that was also the case in the previous version. On Linphone when I press a key I hear its tone, I guess it should be the same on s1p too.

unmaintained's picture

Thank you for uploading the log. I've tweaked the registration part a litttle to (hopefully) make it more compatible with your FritzBox.

The default method how DTMF is handled with most SIP phones is out-of-band, as described in RFC 4733. This means the events are not transported as audible tones, it's therefore totally normal if you don't hear anything. If the FB is compatible with RFC 4733 it should work nevertheless.
Some other phones may play "convenience" tones locally to indicate a DTMF event has been transmitted but this should not affect the transmission itself.

trial's picture

Perfect programm, which just saved my ass, after my employer migrated from a on premice solution (Asterisk) to a cloud one. Managed to get it work though - "NFON Cloudya" is the name of the provider. ^^

trial's picture

Alright then - now I do experience the following problem. Once I set everything, the app worx like a charm. Once I put my Xperia X into standby mode, the following error occures around couple of minutes later, when I try to dial any number:


In case s.o. tries to call me, a busy status he receives.
Once again - If I do not put the phone into standby, everything worx as expected. Cloud provider: NFON Cloudya.

unmaintained's picture

Unfortuantely I can't see much that would indicate any problem (just the fact s1p receives a 403 Forbidden). You could try setting Register Interval to something like 60 seconds and then check if this issue also happens with REGISTER packets or if the 403 Forbidden goes away after re-registering?

trial's picture

Then please tell how could I support U in order to debug it.

unmaintained's picture

The easiest way would be to submit a log from the log page and reference the ID in your comment.

explit's picture

Thanks for the App, unmaintained. Very good app, and a lot of work and time is invested! Works like a charm with FritzBox 6490 and Vodafone Cable DE in Germany. Great!

unmaintained's picture

Thank you. I've listed FritzBox as supported but do you maybe know if all their SIP capable models shoud work or do they each have a different, slighly incompatible SIP firmware?

melvin's picture

A background feature with the default Jolla screen would be awesome, otherwise it works great (sipgate)!

unmaintained's picture

What do you mean by default Jolla screen?

melvin's picture

I mean the screen that shows up when I get called normally. Currently I need to unlock my phone when a sip call arrives - mobile calls let you accept via sliding up on the call screen.

unmaintained's picture

I'm not sure if it can be done withour root privileges and changes to the original files.

Bramba's picture

@unmaintained: Maybe this could be very interesting for you... :-)



unmaintained's picture

I won't have time to watch live but I certainly take a look should there be a recording available.

fridlmue's picture

Thanks for this great software!

I could register and make calls with s1p with the the guru3 system of eventphone.de.
Can hear the other end on the "test" numbers, but did not yet make an active call. I'll report if that was successful, too.

unmaintained's picture

I've added authentication handling to more requestst which should fix a few hangup issues with Yate, wich is what eventphone.de seems to be running on.

andy's picture

Thank you for this awesome app! I have been waiting for it for a very long time. Tried with a Fritz!Box 7590 and it seems to work. Only problem is that I continuosly have a "call ended" status message instead of "registered". I checked the log and I think there are some problems there. I posted it, id:48. What it might be? Thank you!

spinfoam's picture

Thank you for this much needed app.

Tested with odorik.cz and it registers correctly and some initial call testing was successful as well. But will give it more trials.

Are there any plans to add chat option?

unmaintained's picture

If I find the time I may add chat at a later date.

apolem's picture

At first, thanks for the work!

But at the moment I can’t test your app because the window is just white.

I get following status when starting your app on cli:

[D] unknown:0 - Using Wayland-EGL
[D] unknown:0 - Got library name:  "/usr/lib/qt5/qml/io/thp/pyotherside/libpyothersideplugin.so"
[W] unknown:49 - file:///usr/share/harbour-s1p/qml/harbour-s1p.qml:49:5: Type MainPage unavailable
         MainPage {
[W] unknown:68 - file:///usr/share/harbour-s1p/qml/pages/MainPage.qml:68:5: Type NumberInputWidget unavailable
         NumberInputWidget {
[W] unknown:63 - file:///usr/share/harbour-s1p/qml/pages/NumberInputWidget.qml:63:5: Cannot assign to non-existent property "_cursorBlinkEnabled"
         _cursorBlinkEnabled: false
library "/vendor/lib/egl/libGLESv2S3D_adreno.so" not found

SFOS on Nexus 5 (hammerhead; it’s a community build)

Let me know if it is just because of my stupidity. Thanks!

unmaintained's picture

I don't have this exact build so won't be able to replicate this issue but you could open the last file [1] and comment out this _cursorBlinkEnabled line throwing the error.

[1] /usr/share/harbour-s1p/qml/pages/NumberInputWidget.qml

ar0's picture

Worked at sipnet.ru, xa2+

emsys's picture

One way audio issue with Nokia N9

Hello again,

I did some more testing with version 0.4.6, in order to try to understand why does the audio from s1p end up on the 3CX server instead of going to N9 phone, and I think I might have found something.

I dialed in s1p from the following phones and dumped the contents of the INVITE request received at Sailfish OS with wireshark. Here is what I find:

Gigaset DX800A

o=3cxPS 19540964070653952 5169137911332865 IN IP4
c=IN IP4
m=audio 9032 RTP/AVP 9 0 8 96 97 2 18 101

Android (native)

o=3cxPS 30808849594187776 12703181402275841 IN IP4
c=IN IP4
m=audio 60294 RTP/AVP 96 97 3 0 8 127

Nokia N9

o=3cxPS 11303284778205184 16439823719989249 IN IP4
m=audio 7078 RTP/AVP 18 102 8 0 101 99
c=IN IP4


In case of Gigaset and Android clients, s1p delivers audio correctly at the IP address of the phones. However in case of Nokia N9, though s1p sends the audio to correct port number (7078), it sends it to the wrong IP address, i.e. to (IP address of PBX).

What I see different when I compare the INVITE request from N9 with those of Gigaset and Android phones is that the order of the lines m and c is reversed between N9 and the other clients.

In case of Gigaset and Android, line c comes before line m and thus audio works fine (goes to c).

In case of N9 however, c comes after m, and thus s1p picks up the IP address from the o line and port number from the m line, and ignores the c line. Audio ends up at o instead of c.

I think s1p stops looking for the IP address of the other party as soon as it parses the m line and/or reads in the port number. I hope you can find something in your code around that place in order to try to fix this issue.

unmaintained's picture

could you please check if the Nokia N9 works with version 0.4.7 or above?

emsys's picture

With version 0.4.7, audio works bothways with Nokia N9 now. Thanks for the update.

emsys's picture

Would it be possible for you to change the listening port of s1p to something other than 5060? It would add even more flexibility if you can make it into a configuration item on the Settings page.

The reason I am asking is that since I have 3CX running on a Raspberry Pi at home and my DSL router blocks all incoming and outgoing traffic destined to port 5060. The statement from the ISP is that port 5060 is reserved for their own voip gateway for customers who use their phone service in addition to Internet and thus is not available for any other use. This is also the reason my 3CX is listening on port 5061 instead of 5060.

unmaintained's picture

Could you please try it with version 0.4.4 ?
You should be able to set the bind-port on the settings page along with the bind address.

emsys's picture

Thanks for the new release. Although it turned out that the bind port was not the reason for the failure of registration. I had overlooked a fairly simple fact, i.e. trying to register s1p via data connection of the phone goes through at least one NAT layer at the network operator's infrastucture and thus the sending port is never the same as the bind port used by s1p.

Now coming to the problem, I think, the reason for registration to fail over NAT is the missing rport parameter from the Via header of REGISTER request. What happens when rport is missing, is that 3CX sends the response to register to the bind port used by s1p, which is indicated in Contact header instead of sending it back to the UDP port (of NAT) where the REGISTER requested was originally received from. I was able to capture REGISTER requests from a Nokia N9, builtin SIP stack of Android, as well as my desk phone - they all are sending the rport parameter in Via header.

Since 3CX sends the 407 Proxy Authentication Required response to a port that is non-existent, s1p never receives the response to REGISTER request. Thus s1p keeps sending REGISTER requests after a timeout which results in 3CX blocking the IP address. Which brings me to part two of this problem.

You said in an earlier message that 3CX did not let you log in due to too many failed authentication while you didn't even try to authenticate. The reason was that 3CX had added your IP address to the blacklist when s1p failed to authenticate.

The good news is that 3CX blocks an IP address for a limited amount of time and you might be able to log in again to your installation if it is still there. Alternatively, you can try to reach it from a different IP address.

Would it be possible for you to add the rport parameter?