Signal-android: Can't make call to/from smart phone without SIM

Created on 7 Apr 2016  路  22Comments  路  Source: signalapp/Signal-Android

Bug description

Can't make calls between two Android smart phones. One has SIM card (PH1) and another (PH2) doesn't.

Steps to reproduce

Call frfom PH1 (with SIM) to PH2 (without SIM), scenario 1::

  • PH1: start new call
  • phone PH1 makes sonar sound until it gets canceled by user
  • PH2 gets message "Missed call from PH1"

Call frfom PH1 to PH2, scenario 2::

  • PH1: start new call
  • PH1 makes sonar sound, then start ringing. PH2 gets incoming call, user answers,
  • PH1 goes into "Ringing" state, PH2 goes into "Answering" state. There is no call acceptance.
  • After a while both PH1 and PH2 abandons call practically at the same time.
  • PH2 gets message in its info bar: "Incoming Signal call (time stamp)". If you click on it, it opens empty page without any control elements or a way to stop it. Only "back" will close it temporary...
  • There is no any way to remove that message from info bar. Even killing Signal doesn't help. The only solution at that point is to reboot the phone...

Call from PH2 to PH1 doesn't work at all :

  • In PH2 make a call to PH1
  • Standard phone dialer appears. When user clicks on its "call" button, there is message "Not registered on network"

Actual result:
Making call from PH1 to PH2 in both scenarios doesn't work. In second scenario PH2 has to reboot to get rid of notification message ""Incoming Signal call". Call from PH2 to PH1 not possible at all too..

Expected result:
Call is accepted and proceed in both directions.

Device info

PH1: Device:* _Samsung Note II
*_Android version:
4.4.2
Signal version: 3.15.2
PH2: Device:* _Samsung InFuse
*_Android version:
2.3.6
Signal version: 3.15.2

Most helpful comment

OK, I can actually reproduce this behaviour if I make changes to the code, which to me indicates that there is a bug in your ROM of PH2. So I think the problem is this (for whatever reason):

  1. The incoming call screen is displayed on PH2: ResponderCallManager is wait()ing in synchronized waitForAnswer()
  2. You accept the incoming call: RedPhoneService calls synchronized ResponderCallManager.answer(true) through onIntentReceived, but never returns
  3. ResponderCallManager.waitForAnswer() also never returns, so the call will not be initiated
  4. As a result, after a while PH1 will automatically (or manually) end the call attempt
  5. SignalListenerTask on PH2 will notice this and call RedPhoneService.notifyCallDisconnected(), which will hide the call screen, but it cannot call synchronized RedPhoneService.terminate() because it is still stuck in synchronized onIntentReceived since step 2

Here is the implementation that I assume is failing.

One could try to work around this by using Lock (and Condition) objects in the ResponderCallManager and just see if that works @moxie0 ?

Also, there is no stopService() anywhere.

All 22 comments

First of all, please provide debug logs for both phones in scenario 2 (or both scenarios), if you can. I'd like to see what happens when the blank screen appears on PH2.

Second, this sounds more like a (partially) broken registration, since PH2 does not seem to know that PH1 is on Signal. Does the call icon on PH2 contain a lock? You can try to refresh the contact lists and/or re-register PH1.
Also, did you contact [email protected]? I regularly use a phone without a SIM and that is not a problem.

@cascheberg, thank you for your attention.

I've attached logs collected from both phones in PH1 -> PH2, scenario 2:
Bug5421-SN-Out.txt -- PH1
Bug5421-IF-In.txt -- PH2
In PH1 I see message: "RECIPIENT_UNAVAILABLE". At that time PH2 was waiting for incoming call with opened Signal app...

And here is screen shot of blank screen, that I can see on PH2. Phone reboot is required to get rid of notification line leading to it.
bug5421-if-call

this sounds more like a (partially) broken registration, since PH2 does not seem to know that PH1 is on Signal. Does the call icon on PH2 contain a lock?

I successfully sent couple of secured messages (lock is there) back and force between these phones before making test calls. So, they know each other well and can communicate via those test messages.

Additional note: PH1 was able to make a call to another phone (let say PH3, with SIM). But I was unable to make call to remote phone PH4 (without SIM) under the very similar circumstances (scenario 2). And that's why I'm trying to test that scenario locally, using second test phone (PH2)..

In the log of PH2 there is really nothing Signal-related. Can you try to grab another log? I guess that killing Signal will be necessary to do that, but don't restart the phone before you submit the log.

Also, does the call icon on PH2 contain a lock? I'm asking because you were saying that the standard phone dialer appears, which should not happen for Signal calls. Being able to send secured messages is not relevant in this case.

In the log of PH2 there is really nothing Signal-related.

You mean RedPhone related? I'm sorry, but I don't see it either... From my experience, putting timestamps into debugging logs significantly increases usefulness of those logs for troubleshooting processes. Especially if there are two devices communicating with each others... When troubleshooting telecommunication problems simple time stamps (even without date) is enough in most cases. You'd see that two logs provided earlier were collected at the same time.

Can you try to grab another log? I guess that killing Signal will be necessary to do that, but don't restart the phone before you submit the log.

Sure. When I'm collecting logs on PH2, I always do followed:

  1. Restart the phone (to make sure that everything is in its clean state)
  2. Launch Signal
  3. Make test call from PH1 to PH2
  4. Collect and save log form Signal app in PH2
  5. Restart phone again (to remove persistent notification message ""Incoming Signal call")

Here is the 2 logs collected in the similar scenario form PH2 (followed procedure above):
Bug5421-IF-In2.txt
Bug5421-IF-In3.txt

Also, does the call icon on PH2 contain a lock? I'm asking because you were saying that the standard phone dialer appears, which should not happen for Signal calls. Being able to send secured messages is not relevant in this case.

The answer is - yes. There is lock in the call icon. Here is the picture, collected from phone PH2:
bug5421-if-icon

Additional notes:

  • In user's screen, along with received/sent text messages I see: "+1XXXXXXXXXX called you"
  • Time and date stamps on those messages are not indicating when I actually called, but rather delayed significantly and randomly... (why is that?)

How do you save the log? Both of the provided logs seem cut off at the end, they end in the middle of a log statement. Signal can create and upload the log to a GitHub gist, so usually you can just post the provided link here.
I have no idea why clicking the secured call icon would show the standard dialer.
The issues with wrong timestamps on missed call notifications is tracked at #4197.

Oh, it's simple. I tap on "Submit debug log". Then, in opened log window, I long tap on the log and tap on "Select all". Then I copy and paste it into a text editor... I have no idea why part of log could be missed in such case. Should I wait for Signal to purge its full log? Or there is a way to purge it into log window manually?

Thank you for the link on wrong timestamps issue. I can see more than 5 min difference. If I missed a call at night, the difference could easily be 12 hours. This functionality requires a fix.

I have no idea if it changes anything, but you could try to just tap the "Submit" button and paste the link instead. That is really all I can say about this absolutely weird issue.

As a matter of a principle, I don't submit / publish anything without perusing it first. Sorry...
Having full control over how potentially personal data is be published on the Internet - isn't that the reason we want to use Signal too? :)

@cascheberg, I'd be glad to help troubleshoot the issue. Jut let me know what and how to do it...

@gh88 That principle is just making it harder for us to help you. If you tap the Submit button it will publish the same content that you see on your screen and which you have already manually copy-pasted here before. Except when you do it manually your clipboard buffer might truncate the content.
https://github.com/WhisperSystems/Signal-Android/wiki/Submitting-useful-bug-reports#debug-log-privacy

Is there any way for me to dump log file locally?
I need to see what I'm sending before I publish it.

@gh88 you can see it on the screen before clicking "submit". Another option would be to copy & paste it in segements. But you can be sure that there are no message contents in the log. Phone numbers are anonymized as well...

@agrajaghh thank you for the idea to check clipboard. Now, clipboard is not the problem here. The Signal app is.

I made several test calls and I suspect in its "Submit debug log" window Signal doesn't show the whole log. The data is always truncated there. So, the resulting log file has size around 8.79KiB (see my logs published here). That explains why I couldn't find out the problem with failing to make calls to my friend and asking them to send me their log to troubleshoot. In most cases there was nothing in those logs... Log doesn't have any timestamps and, moreover, they're truncated... :(

BTW, to rule out Clipboard limitations I specifically tested clipboard on that old device and it can handle more than 100KiB of text data.

Signal should allow users to dump its log into a local file - to help them to troubleshoot potential problems locally (there is no need to open a ticket and request a support here with every problem found).. I'm glad that Signal obfuscates phone numbers, but I have to make sure that what I publish (via "Submit" facility) doesn't contain other personal data (IP addresses, text messages, contacts, etc.) And the only reasonable way to do that is to show me in plain text what I'm going to submit fore before I tap on that button,

btw, the submit button is just creating a secret and anonymous gist which isn't published somewhere else. You could still check that link before posting it here

I continue making text calls from PH1 to PH2. Is there any way to at least get rid of empty page (see picture in my second post above) without rebooting my phone? Is that the bug with UI (and not related to signalling process of accepting incoming calls)?

All incoming calls create in PH2 records like "Missed call from ..." (all with wrong timestamps, telling when I opened Signal app). Is there a way to remove them from the long list of messages now? Long press on each line brings nothing... I can remove text messages though. Is it supposed to work this way?

You can try "Force Stop" in the Android app settings for Signal, instead of reboot.

And since Signal debug log does not seem to work, you could connect your phone to a computer and run adb. There is a very short wiki page paragraph: https://github.com/WhisperSystems/Signal-Android/wiki/Submitting-useful-bug-reports#debug-logs-with-adb. But you can find more information on the internet, or ask in the community forum.

Deleting call log entries is tracked at #4190.

@cascheberg, thank you for suggestion to "Force Stop" Signal. It worked.

I've collected new log with "adb logcat":
Bug5421-IF-In4.txt

Thank you for referring to the opened issue about deleting log entries. I've left my comment there.

There is something in the log, but some log statements are missing. Can you do that again, but remove the logcat filter? Thanks for your effort!

Actually at that time I did not use any filters at all. And as you see the log contained messages from other apps running, which were messing up the log... Now, to help to resolve the issue I've installed Android app, called CatLog. With that app I can collect log from Signal app directly on the phone. And it may filter messages coming form Signal app only. Below are another 2 logs, now collected with the help of CatLog. It used Signal's PID as filter criteria (if you know any other suggestion for the filter to use while collecting log from Signal, please let me know):
Bug5421-IF-In5.txt
Bug5421-IF-In6.txt

If you mean that you need (missed) messages collected before I make the test - let me know. Meantime I run test in this order: 1. Start Signal, 2. Check its PID, 3. Start CatLog log record, filtering events for that PID, 4. Make test (calling PH1 to PH2 and waiting till it ends), 5 Stop CatLog logging and save current log file.

There doesn't seem to be anything new in those logs compared to the previous ones.

There are many open issues with call problems and I'm not sure if the logs in those are any more informative. E.g. the logs I reported in #4835 look somewhat similar to the ones here. Except that _Termination stack_ seems to be normal because it shows up even when successful calls are disconnected.

@2-4601 From your logs I've found a hint for developers why I have to use "Force Stop" to remove notification and empty Signal dialog (see my second post above for picure). Your log has line like:
W/RedPhoneService( 4982): termination stack
while in mine logs it's missing. It means in my phone the RedPhoneService is left running at the time it should be terminated...

OK, I can actually reproduce this behaviour if I make changes to the code, which to me indicates that there is a bug in your ROM of PH2. So I think the problem is this (for whatever reason):

  1. The incoming call screen is displayed on PH2: ResponderCallManager is wait()ing in synchronized waitForAnswer()
  2. You accept the incoming call: RedPhoneService calls synchronized ResponderCallManager.answer(true) through onIntentReceived, but never returns
  3. ResponderCallManager.waitForAnswer() also never returns, so the call will not be initiated
  4. As a result, after a while PH1 will automatically (or manually) end the call attempt
  5. SignalListenerTask on PH2 will notice this and call RedPhoneService.notifyCallDisconnected(), which will hide the call screen, but it cannot call synchronized RedPhoneService.terminate() because it is still stuck in synchronized onIntentReceived since step 2

Here is the implementation that I assume is failing.

One could try to work around this by using Lock (and Condition) objects in the ResponderCallManager and just see if that works @moxie0 ?

Also, there is no stopService() anywhere.

GitHub Issue Cleanup:
See #7598 for more information.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

gmsl360 picture gmsl360  路  3Comments

hiredgunhouse picture hiredgunhouse  路  3Comments

FeuRenard picture FeuRenard  路  3Comments

vvug picture vvug  路  3Comments

j3fffff picture j3fffff  路  3Comments