Your rating: None Average: 4.9 (16 votes)

s1p is an experimental SIP client for Sailfish OS

Successfully tested with:

  • Asterisk
  • sipgate
  • sipnet.ru
  • linphone.org
  • 3CX
  • cellip.com
  • FritzBox

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

Please reference the log-ID when writing a comment after submittimg a log to the developer.
The ID should be displayed at the bottom of the page if the log was successfully submitted. 

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




Application versions: 
File harbour-s1p-0.0.2-1.armv7hl.rpm2.13 MB27/05/2020 - 10:26
File harbour-s1p-0.0.3-1.armv7hl.rpm2.13 MB27/05/2020 - 23:38
File harbour-s1p-0.0.4-1.armv7hl.rpm2.14 MB29/05/2020 - 14:26
File harbour-s1p-0.0.5-1.armv7hl.rpm2.14 MB30/05/2020 - 11:04
File harbour-s1p-0.0.6-1.armv7hl.rpm2.14 MB01/06/2020 - 19:36
File harbour-s1p-0.0.7-1.armv7hl.rpm2.14 MB02/06/2020 - 22:52
File harbour-s1p-0.0.8-1.armv7hl.rpm2.15 MB04/06/2020 - 20:19
File harbour-s1p-0.0.9-1.armv7hl.rpm2.15 MB05/06/2020 - 12:22
File harbour-s1p-0.1.0-1.armv7hl.rpm2.15 MB05/06/2020 - 14:58
File harbour-s1p-0.1.1-2.armv7hl.rpm2.15 MB05/06/2020 - 23:43
File harbour-s1p-0.1.2-1.armv7hl.rpm2.15 MB06/06/2020 - 11:41
File harbour-s1p-0.1.3-1.armv7hl.rpm2.15 MB06/06/2020 - 19:01
File harbour-s1p-0.1.4-1.armv7hl.rpm2.15 MB08/06/2020 - 21:30
File harbour-s1p-0.1.5-1.armv7hl.rpm2.15 MB09/06/2020 - 11:24
File harbour-s1p-0.1.6-1.armv7hl.rpm2.16 MB09/06/2020 - 15:49
File harbour-s1p-0.1.7-1.armv7hl.rpm2.16 MB11/06/2020 - 09:29
File harbour-s1p-0.1.8-1.armv7hl.rpm2.16 MB12/06/2020 - 11:37
File harbour-s1p-0.1.9-1.armv7hl.rpm2.16 MB12/06/2020 - 21:11
File harbour-s1p-0.2.0-1.armv7hl.rpm2.16 MB13/06/2020 - 11:53
File harbour-s1p-0.2.1-1.armv7hl.rpm2.18 MB13/06/2020 - 22:21
File harbour-s1p-0.2.2-1.armv7hl.rpm2.18 MB16/06/2020 - 20:07
File harbour-s1p-0.2.3-1.armv7hl.rpm2.18 MB20/06/2020 - 11:01
File harbour-s1p-0.2.4-1.armv7hl.rpm2.18 MB21/06/2020 - 11:30
File harbour-s1p-0.2.5-1.armv7hl.rpm2.18 MB26/06/2020 - 14:31
File harbour-s1p-0.2.8-1.armv7hl.rpm2.18 MB28/06/2020 - 11:08
File harbour-s1p-0.2.9-1.armv7hl.rpm2.19 MB29/06/2020 - 16:48
File harbour-s1p-0.3.1-1.armv7hl.rpm2.18 MB04/07/2020 - 12:42
File harbour-s1p-0.3.2-1.armv7hl.rpm2.18 MB08/07/2020 - 23:56
File harbour-s1p-0.3.3-1.armv7hl.rpm2.18 MB09/07/2020 - 22:58
File harbour-s1p-0.3.4-1.armv7hl.rpm2.19 MB12/07/2020 - 12:46
File harbour-s1p-0.3.5-1.armv7hl.rpm2.19 MB15/07/2020 - 02:04
File harbour-s1p-0.3.7-1.armv7hl.rpm2.19 MB16/07/2020 - 10:34
File harbour-s1p-0.3.8-1.armv7hl.rpm2.19 MB18/07/2020 - 11:18
File harbour-s1p-0.3.9-1.armv7hl.rpm2.2 MB23/07/2020 - 17:04
File harbour-s1p-0.4.0-1.armv7hl.rpm2.2 MB25/07/2020 - 10:52
File harbour-s1p-0.4.1-1.armv7hl.rpm2.2 MB26/07/2020 - 12:06
File harbour-s1p-0.4.2-1.armv7hl.rpm2.2 MB27/07/2020 - 15:43
File harbour-s1p-0.4.3-1.armv7hl.rpm2.2 MB30/07/2020 - 22:23
File harbour-s1p-0.4.4-1.armv7hl.rpm2.2 MB31/07/2020 - 14:47
File harbour-s1p-0.4.5-1.armv7hl.rpm2.2 MB01/08/2020 - 11:01
File harbour-s1p-0.4.6-1.armv7hl.rpm2.2 MB01/08/2020 - 23:13
File harbour-s1p-0.4.7-1.armv7hl.rpm2.2 MB04/08/2020 - 10:53
File harbour-s1p-0.4.8-1.armv7hl.rpm2.2 MB06/08/2020 - 09:50
File harbour-s1p-0.4.9-1.armv7hl.rpm2.2 MB06/08/2020 - 14:06
File harbour-s1p-0.5.0-1.armv7hl.rpm2.2 MB10/08/2020 - 15:21
File harbour-s1p-0.5.1-1.armv7hl.rpm2.2 MB10/08/2020 - 15:28
File harbour-s1p-0.5.2-1.armv7hl.rpm2.2 MB13/08/2020 - 11:57
File harbour-s1p-0.5.3-1.armv7hl.rpm2.2 MB13/08/2020 - 12:08

- 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

Issue 1. should be fixed in 0.3.7 possibly breaking 3CX compatibility again.

3CX seems to request authentication at a stage in the call when s1p does not expect it to happen and allowing that without making significant changes to the internal logic would mess up things quite a bit (as happened with 1.) 

emsys's picture

When trying to make a call with s1p, PBX sends a 407 Proxy Authentication Required in response to INVITE, but the behavior in version 0.3.7 has become inconsistent compared to 0.3.6. In the previous version, s1p was always resending an INVITE with a Proxy-Authorization header and the call could go through. However in version 0.3.7, s1p sometimes resends the INVITE with a Proxy-Authorization header while other times, it logs the following error in the debug log and the call fails with the screen staying at "Trying".

b"WARN [SIPServer-1] UpdateCallStatus [7c4f0b67@] - can't decrease call status: 14 -> 11\n"
b'ERROR [SIPServer-1] Invite [7c4f0b67@] - INVITE (authenticated) already sent\n'

So, the behaviour has become inconsistent with this new version.

On the other hand, issue 1, i.e. the call hangup issue did not improve since s1p still sends BYE without a Proxy-Authorization header included; 3CX simply ignores the BYE request and the call continues between 3CX and the other party. 

If I were to compare this version with the previous one, I would call 0.3.6 more consistent and more usable than this one.

unmaintained's picture

Are there any changes to this behavior in version 0.3.8 ?

emsys's picture

I did some more digging into the issues I reported earlier; here is a little more information on that. Also sent you two more debug logs, 34 and 35.

1. Call Hangup issue

Same behaviour as in version 0.3.6. s1p sends the BYE request with Proxy-Authorization header not inlcuded when trying to terminate the call, 3CX simply ignores this request. s1p initiated call can only be hung up if the other party hangs up too. In that case, s1p simply reacts to BYE sent by 3CX and hangs up the call. If the call from s1p lands in a voice mailbox, then there will be no hanging up, and the call will continue forever.

I think to maintain compatibility with other PBX systems, you might add a condition to send Proxy-Authorization in BYE only if the PBX responded earlier with 407 Proxy Authentication Required during INVITE and thus it was included with the INVITE request when initiating a call, and omit it otherwise.

2.1 No audio with Gigaset DX800A, debug log 34

In this scenario, s1p receives a call from Gigaset DX800A. DX800A lists the following codecs in SDP INVITE request in this specific order:

G722, PCMA, PCMU, G726-32, and a few more.

s1p responds with the following list of codecs in this specific order:


If you look closely, you will see that the desk phone and s1p have both listed PCMU and PCMA, but in reverse order.

s1p picks PCMA for the RTP stream while the desk phone picks PCMU (the first common codec listed by s1p), and hence no side can hear the audio of the other side.

If I exclusively limit the phone to use either PCMU or PCMA, then both sides pick up the only common codec and audio works perfectly fine.

I repeated this experiment with making a call from Twinkle (on a Ubuntu machine) to s1p. Surprisingly, Twinkle lists the codecs in the same order as the DX800A phone which is in reverse order of the s1p's list of codecs. s1p picks up PCMA, while Twinkle picks up PCMU. I can clearly hear audio from both sides since both s1p and Twinkle can use two different codecs to decode and encode audio simultaneously. Wireshark also records two different streams with different codecs.

I think this behaviour can easily be improved if s1p picks up only one of the common codecs offered during INVITE, either PCMU, or PCMA and sends that in response to INVITE. This is what I see in all those other SIP clients doing when they receive a call.

2.2 One way audio with Nokia N9, debug log 35

This issue happens when the call is initiated from Nokia N9 and received on s1p.

There are two things going wrong here. First issue is the same as above issue 2, i.e. audio codecs listed in reverse order and hence one side picking up PCMU while the other picking up PCMA.

A second thing that goes wrong here is that s1p picks up the IP address of the PBX instead of the N9 phone for delivery of the RTP stream and hence the audio from s1p ends up on the PBX, and never reaches the Nokia N9. While the audio from the Nokia N9 lands perfectly in s1p and can be heard on the Xperia XA2.

IP address of PBX is, and that of Nokia N9 is

These are the contents of the INVITE sent by 3CX and received at s1p.

o=3cxPS 30352679154745344 16403140152655873 IN IP4
c=IN IP4
unmaintained's picture

With issue 2.2 something strange must be happening:

o=3cxPS 30352679154745344 16403140152655873 IN IP4

c=IN IP4

s1p will always prefer the value of c over o and use the IP extracted from the latter only as a fall back.
Have you seen the RTP stream going to or could it be a completely different issue?
I know, s1p may state somewhere audio: but this was a bug in the log output.

unmaintained's picture

Are there any changes to issue 2.1 with version 0.3.9?

emsys's picture

I updated to version 0.4.3 today and I can confirm that issue 2.1 (no audio) is resolved with this version. Sorry for the late response since I haven't been able to find time for testing lately. The call hangup issue is still there, I hope you can work on that issue some time.

The one way audio issue with N9 is also there but it is not that urgent; it is more of a matter of interoperability with just another SIP client.

Too bad to know that 3CX set up did not work out for you, please let me know if I can help with something.

There is one more thing, but I would rather start another thread for it since this one has grown too long.

unmaintained's picture

I've tried to get a 3CX cloud setup working to be able to replicate this but I had to give up eventually. There was no way to even register, neither with s1p nor Zoiper etc. 
The final staw was when I've got locked out of the UI, and no, I havn't tried to log in more than once:
Login access denied. Too many incorrect login attempts.

unmaintained's picture

Yes, 0.3.7 reverts to the former behavior of expecting when the autentication request has to take place which works well with many other platforms but, obviously, not 3CX. Unfortunately relaxing this caused some problems with the UI so a more substantial change will be needed to address this.

unmaintained's picture

s1p can perfectly do Proxy-Authorization, I guess in this case it must be thrown-off by something and is sending a fallback-response.

kayakbc's picture

Fantastic app! Kudos to you for all of your wotk so far. With your latest update this app now works great with my sip provider, Voip.ms, here in Canada. Thanks.

Bramba's picture

Anybody here has tried s1p with SIP-provider Easybell or dus.net? Registering the account works completely fine.

However, when trying an outgoing phone call, I always receive error:

DEBUG [SipServer-1] HandleResponseTerminatedOther [436456@192.168...] - call terminated with code: 482 Loop detected

PulseHandler - playback stream suspended - stream index: 0, suspended: false

unmaintained's picture

Could have been a bug with proxy authentication. Could you try it again with 0.3.6 and check if an actual loop occurs?

unmaintained's picture

Does this response "482 Loop detected" come right after the inital invite or is it preceeded by, well, a loop of some sort?

Bramba's picture

Thanks for your great support!

Yes, this error appears immediately after entering the callee phone number and tapping the "dial" button. It doesn't matter if the callee number is a mobile phone or a landline phone in this case.

The main window does always show message "Call ended" afterwards (even in case I did not end it).

unmaintained's picture

Anything changed with version 0.3.7 ?

schmolle's picture

Cool app! Thanks for your work. I would love to see this as Free Software :). Keep it up!

amaretzek's picture

How far away is "wake up display on incomming call"? ;)

unmaintained's picture

I hope once the underlying SIP communication works reliably enough I can concentrate more on the UI.

defactofactotum's picture

Confirm comment above, edited json and now it sticks. But says 'Call ended' so I'm not sure it registered

defactofactotum's picture

Exactly! My file looks like this: {}

So why on earth is it not writing to the file?

amaretzek's picture

ATM, v3.2, "~/.config/harbour-s1p/settings.json" looks like this:

  "accounts": [
      "auth_name": "",
      "description": "default",
      "domain": "sip.example.com",
      "enabled": true,
      "name": "123456",
      "password": "secretpw",
      "register_frequency": 3600.0,
      "server_port": 5060.0
  "bind_address": "",
  "default_instance": 1.0,
  "playback_buffer_length": 1600.0,
  "playback_latency": 0.1,
  "playback_volume": 100.0,
  "record_buffer_length": 1600.0,
  "record_latency": 0.1,
  "record_volume": 100.0
defactofactotum's picture

something radically wrong here. I deleted the settings file...same behaviour. Checked settings file, 2 bytes. So nothing staying there at all.

unmaintained's picture

Super strange. Worked for me both on X and XA2+

amaretzek's picture

Verified on XA2, fresh install, doesn't save!

amaretzek's picture

Does this mean something to you?

[D] onAccepted:203 - SettingsDialog accepted
[W] unknown:205 - file:///usr/share/harbour-s1p/qml/pages/SettingsDialog.qml:205: TypeError: Type error
[1] INFO command_set_playback_volume - frame: {'value': None}
[D] unknown:0 - "PyOtherSide error: Traceback (most recent call last):\n\n  File \"/usr/share/harbour-s1p/qml/pages/s1p.py\", line 321, in command_set_playback_volume\n    args['value'] = int(args['value'])\n\nTypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'\n"
[1] INFO command_set_record_volume - frame: {'value': None}
[D] unknown:0 - "PyOtherSide error: Traceback (most recent call last):\n\n  File \"/usr/share/harbour-s1p/qml/pages/s1p.py\", line 333, in command_set_record_volume\n    args['value'] = int(args['value'])\n\nTypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'\n"
[D] onError:108 - ERROR - unhandled error received: Return value of PyObject call is NULL: Traceback (most recent call last):

  File "/usr/share/harbour-s1p/qml/pages/s1p.py", line 321, in command_set_playback_volume
    args['value'] = int(args['value'])

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

[D] onError:108 - ERROR - unhandled error received: Return value of PyObject call is NULL: Traceback (most recent call last):

  File "/usr/share/harbour-s1p/qml/pages/s1p.py", line 333, in command_set_record_volume
    args['value'] = int(args['value'])

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
unmaintained's picture

It seems nor to create the configuration, especially no accounts sometimes. I'll try to fix that and will upload a new version later today.

amaretzek's picture

Hmmm, before there is:

[D] onError:108 - ERROR - unhandled error received: pyotherside.send() failed handler: file:///usr/share/harbour-s1p/qml/pages/PythonHandler.qml:116: TypeError: Cannot read property '0' of undefined
[W] unknown:232 - file:///usr/share/harbour-s1p/qml/pages/SettingsDialog.qml:232: TypeError: Cannot read property 'NaN' of undefined
unmaintained's picture

Could you please try it with version 0.3.3  ?

amaretzek's picture

version 0.3.3 solves this issue. Great!