Code Monkey home page Code Monkey logo

libsignal-service-java's Introduction

signal-service-java - provisioning version

A Java library for communicating via Signal.

Unofficial fork!

This library is an unofficial fork where we publish our changes to the official library (upstream). This fork allows using the Signal servers without Google Cloud Messaging (GCM) and provides provisioning, i.e. linking devices, and some bugfixes. Use it at your own risk. OpenWhisperSystems is not responsible for this fork.

Upstream development is now happening in the Signal-Android project: https://github.com/signalapp/Signal-Android/tree/master/libsignal/service The branch upstream is tracking the signal-service lib changes from the Signal-Android project.

The library is available on Maven Central.

Legal things

Cryptography Notice

This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http://www.wassenaar.org/ for more information.

The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.

License

Copyright 2013-2016 Open Whisper Systems

Licensed under the AGPLv3: https://www.gnu.org/licenses/agpl-3.0.html

libsignal-service-java's People

Contributors

0dvictor avatar acton-signal avatar adel-signal avatar akonradi-signal avatar alan-signal avatar alex-signal avatar asamk avatar clark-signal avatar cody-signal avatar eager-signal avatar ehrenkret-signal avatar fumiakiy avatar geogriff-signal avatar gram-signal avatar greyson-signal avatar jack-signal avatar jacob-pro avatar jamesonwilliams avatar jim-signal avatar jon-signal avatar jrose-signal avatar liliakai avatar moiseev-signal avatar moxie-signal avatar moxie0 avatar nicholas-signal avatar rashad-signal avatar riyapenn avatar schachmat avatar varsha888 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

libsignal-service-java's Issues

zkgroups.so on non-x86 platforms

Hello! Thanks for all your work on libsignal and signal-cli. I'm been seeing user reports of issues loading zkgroups.so on non-x86 platforms. I see signal-cli got a few issues about this as well. Have you looked into fixing this at all? I saw that there is a temporary workaround in place for now.

WebSocketConnection mem leak

  @Override
  public synchronized void onMessage(WebSocket webSocket, ByteString payload) {
    Log.w(TAG, "WSC onMessage()");
    try {
      WebSocketMessage message = WebSocketMessage.parseFrom(payload.toByteArray());

      Log.w(TAG, "Message Type: " + message.getType().getNumber());

      if (message.getType().getNumber() == WebSocketMessage.Type.REQUEST_VALUE)  {
        incomingRequests.add(message.getRequest());
      } else if (message.getType().getNumber() == WebSocketMessage.Type.RESPONSE_VALUE) {
        SettableFuture<Pair<Integer, String>> listener = outgoingRequests.get(message.getResponse().getId());
        if (listener != null) listener.set(new Pair<>(message.getResponse().getStatus(),
                                                      new String(message.getResponse().getBody().toByteArray())));
      }

      notifyAll();
    } catch (InvalidProtocolBufferException e) {
      Log.w(TAG, e);
}

Whenever we send a message it gets added to outgoingRequests, so that the settable future can be fulfilled when confirmation arrives. However, even if it does, the reference to the future is not removed from the map, that only happens in onClosed - which I assume does not happen frequently when the ws connection is permanently open, e.g. in signal-cli in debus mode or Signal-Android without play services (?).

cc @golf1052 @mitchcapper our libsignal is affected by this issue as well

how to prevent duplicate sync messages when sending to groups with mixed sender key and legacy targets?

It seems as though signal-cli has figured this out, but alas I cannot. I call messageSender.sendGroupDataMessage() to send to sender key supporting targets, then messageSender.sendDataMessage() for those that don't support sender keys. It sends the message to all recipients, but the primary device on my account shows that I sent the message twice. How do I avoid this?

Many thanks for your work on this project

Help Needed – Signal Android SDK

Hi.

My name is Maksym, I'm from Ukraine.
At this moment I'm coordinating one of the project that potentially could save life for ukrainian citizences.

Right now we are looking for an option of Signal Android SDK (target app is using Java 8).
Provisioning as a linked device is a must.

We are ready to disscuss any options.

CC @AsamK

SignalServiceMessagePipe shutdown() does not clean up threads

Hi

At my project purple-signal, I am trying to wrap libsignal-service-java into a C plug-in for use in Pidgin. Most of the Java code is taken from signal-cli. It is working quite okay so far, but upon the main application (Pidgin) termination, it takes two minutes until the JVM is unloaded and the process can finish.

This could be related to square/okhttp/issues/5542, but that issue has been marked as "resolved". I am using okhttp-4.6.0. This is what I do (outline):

WebSocketConnection webSocketConnection = new WebSocketConnection(…); // creates and wraps okHttpClient and WebSocket objects
SignalServiceMessagePipe messagePipe = new SignalServiceMessagePipe(webSocketConnection, …); // wraps connection
// do some messaging
messagePipe.shutdown(); // calls WebSocket.close(…);

This is how the logs look like:

[Shutdown requested]
(20:58:39) Waiting for all remaining Java threads…
(20:58:39) Java threads: 'main' 'OkHttp textsecure-service.whispersystems.org' 'OkHttp TaskRunner' 'OkHttp TaskRunner' 'Okio Watchdog' 'OkHttp https://textsecure-service.whispersystems.org/...' 'Thread-1'
(20:58:40) Java threads: 'main' 'OkHttp textsecure-service.whispersystems.org' 'OkHttp TaskRunner' 'OkHttp TaskRunner' 'Okio Watchdog' 'Thread-1'
[47 seconds pass…]
(20:59:27) Java threads: 'main' 'OkHttp textsecure-service.whispersystems.org' 'OkHttp TaskRunner' 'OkHttp TaskRunner' 'Okio Watchdog' 'Thread-1'
(20:59:28) Java threads: 'main' 'OkHttp textsecure-service.whispersystems.org' 'OkHttp TaskRunner' 'OkHttp TaskRunner' 'Okio Watchdog'
[a few seconds pass…]
(20:59:31) Java threads: 'main' 'OkHttp textsecure-service.whispersystems.org' 'OkHttp TaskRunner' 'OkHttp TaskRunner' 'Okio Watchdog'
(20:59:32) Java threads: 'main' 'OkHttp TaskRunner' 'OkHttp TaskRunner' 'OkHttp TaskRunner' 'Okio Watchdog'
[a few seconds pass…]
(20:59:38) Java threads: 'main' 'OkHttp TaskRunner' 'OkHttp TaskRunner' 'OkHttp TaskRunner' 'Okio Watchdog'
(20:59:39) Java threads: 'main' 'OkHttp TaskRunner' 'OkHttp TaskRunner'
[52 seconds pass…]
(21:00:31) Java threads: 'main' 'OkHttp TaskRunner' 'OkHttp TaskRunner'
(21:00:32) Java threads: 'main' 'OkHttp TaskRunner'
[a few seconds pass…]
(21:04:31) Java threads: 'main' 'OkHttp TaskRunner'
(21:04:32) Java threads: 'main'
[application finally terminates]

I do not see which of these is true:

  • I am using signal-cli wrong
  • signal-cli is using libsignal-service-java wrong
  • libsignal-service-java is using okhttp wrong
  • this is a bug in okhttp
  • none of the above

Any ideas on this are appreciated. Having a two minute delay after program quit is really annoying and an awful user experience.

Regards

Nullpointer exception when calling SignalServiceMessageReceiver.retrieveMessages(..) due to updatedPni field

I get a Null Pointer Exception when receiving messages, and thus cannot receive any messages.

It happens under SignalServiceMessageReceiver.retrieveMessages(..) when the received envelope has null for entity.getUpdatedPni(). When this is null the Envelop.Builder will fail when calling .setUpdatedPni(updatedPni) since for some reason it is using the String value to make the call value.getClass(). I would guess this is generated code based on the protobuf stuff. So, a non-null check would be needed before this, unless the problem lies elsewhere.

I can't really say why it is null. I send a message from my phone and receive it with my bot.
Perhaps the deserialization is incorrectly configured to interpret missing data as null, the field is optional.

optional string updatedPni = 15;

The signal-client "lib" code in the adroid app does not set the updatedPni argument

envelope = new SignalServiceEnvelope(entity.getType(),
                                             Optional.of(address),
                                             entity.getSourceDevice(),
                                             entity.getTimestamp(),
                                             entity.getContent(),
                                             entity.getServerTimestamp(),
                                             messageResult.getServerDeliveredTimestamp(),
                                             entity.getServerUuid(),
                                             entity.getDestinationUuid(),
                                             entity.isUrgent(),
                                             entity.isStory());

I may have done something wrong, however I can't see what that would be.

Are there plans to support profiles?

Upstream has a bunch of functions related to reading and setting protocols. Are there any plans to add to this fork?

I use this library in signald, and would like to add support for profiles eventually.

DeviceGroupsInputStream is throwing InvalidProtocolBufferExceptions

First of all, i do not know whether this is my problem, a vanilla libsignal problem, a turasa libsignal problem or a signal-cli problem, but i i think this is the best place to ask.

As you maybe remember, i am working on a PR that implements linking Signal-Android as a slave device. Today i wanted to implement receiving and handling group sync messages, but so far i had no luck.

Here you can see how i handle a group sync message. In my opinion that is equivalent to what signal-cli is doing here, but unfortunately it does not work.

The first group is handled fine (it is parsed correctly and added to signal-android's groupstore, and i can use it), but when calling read a second time i get this exception:

11-24 00:47:46.074 20816-20846/org.thoughtcrime.securesms E/AndroidRuntime: FATAL EXCEPTION: JobConsumer-2
		Process: org.thoughtcrime.securesms, PID: 20816
		Theme: themes:{}
		java.lang.AssertionError: com.google.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.
			at org.thoughtcrime.securesms.jobs.PushDecryptJob.handleSynchronizeGroupsMessage(PushDecryptJob.java:357)
			at org.thoughtcrime.securesms.jobs.PushDecryptJob.handleMessage(PushDecryptJob.java:174)
			at org.thoughtcrime.securesms.jobs.PushDecryptJob.onRun(PushDecryptJob.java:138)
			at org.whispersystems.jobqueue.JobConsumer.runJob(JobConsumer.java:76)
			at org.whispersystems.jobqueue.JobConsumer.run(JobConsumer.java:46)
		 Caused by: com.google.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.
			at com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:498)
			at com.google.protobuf.GeneratedMessage.parseUnknownField(GeneratedMessage.java:193)
			at org.whispersystems.signalservice.internal.push.SignalServiceProtos$GroupDetails.<init>(SignalServiceProtos.java:11796)
			at org.whispersystems.signalservice.internal.push.SignalServiceProtos$GroupDetails.<init>(SignalServiceProtos.java:11754)
			at org.whispersystems.signalservice.internal.push.SignalServiceProtos$GroupDetails$1.parsePartialFrom(SignalServiceProtos.java:11871)
			at org.whispersystems.signalservice.internal.push.SignalServiceProtos$GroupDetails$1.parsePartialFrom(SignalServiceProtos.java:11866)
			at com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:141)
			at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:176)
			at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:188)
			at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:193)
			at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:49)
			at org.whispersystems.signalservice.internal.push.SignalServiceProtos$GroupDetails.parseFrom(SignalServiceProtos.java:12653)
			at org.whispersystems.signalservice.api.messages.multidevice.DeviceGroupsInputStream.read(DeviceGroupsInputStream.java:32)
			at org.thoughtcrime.securesms.jobs.PushDecryptJob.handleSynchronizeGroupsMessage(PushDecryptJob.java:354)
			at org.thoughtcrime.securesms.jobs.PushDecryptJob.handleMessage(PushDecryptJob.java:174) 
			at org.thoughtcrime.securesms.jobs.PushDecryptJob.onRun(PushDecryptJob.java:138) 
			at org.whispersystems.jobqueue.JobConsumer.runJob(JobConsumer.java:76) 
			at org.whispersystems.jobqueue.JobConsumer.run(JobConsumer.java:46) 

(i am sorry, the line numbers in PushDecryptJob are a little bit off in this stacktrace, but i guess you understand my problem)

My master device is signal-cli which i built from master ~3hours ago.

If you want to replicate the problem, just clone my multidevice branch, remove the break and uncomment //group = deviceGroupsInputStream.read(); in PushDecryptJob.java, fire up a vm and load the apk.

Usage is simple, when signal prompts you to enter your phone number click the cancel button, wait a second and scan the qrcode with signal-android or fetch the tsdevice link via logcat, link it to a signal-cli master device, and call signal-cli receive so that it responds the group sync request.

As i said, i got no clue where the problem is, and unfortunately i have neither an android master device at hand (which could hint signal-cli issues, if an android master would work) nor a slave id free for a signal-cli slave (which could tell me if signal-cli slaves can cope with more than 1 synced group). If you could give me a hint on what is going wrong it would be great!

Debian GNU/Linux packaging

Hi @AsamK,

I would like to package libsignal-service-java for Debian GNU/Linux. My primary motivation is because it is a dependency of signal-cli.

A few simple things would greatly help moving forward:

Thanks in advance for your help and even more for your persistent work to maintain this library !

Update to Upstream 2.12.2 and Sealed Sender

I tried to pull & merge the changes in upstream 2.12.2 to get the new sealed sender code, but I most certainly have to get acquainted with your code first, specifically in WebSocketConnection, SignalServiceCipher and SignalServiceMessageSender, the latter being the most conflictual of the whole fork.

Can I ask you questions here to be able to resolve the conflicts in the code between your code and the latest upstream ? If not, please let me know what I should do.

Thanks.

Please merge from upstream

Upstream has had a new major features since the last merge on October 9th. Could you merge in from upstream again?

Thanks :)

`Libsignal_jni.so` and `org.signal.client.internal.Native.Logger_Initialize` not found

Edit: I think this is related to this repository.

I was trying to use this package in my android app. But, the app always force closed when I tried to run it.

Version: 2.15.3_unofficial_19 / 2.15.3_unofficial_20

I got this error message:

2021-05-09 00:54:27.888 11608-11608/com.s2a_mobile_server E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.s2a_mobile_server, PID: 11608
    java.lang.UnsatisfiedLinkError: dlopen failed: library "libsignal_jni.so" not found
        at java.lang.Runtime.loadLibrary0(Runtime.java:1087)
        at java.lang.Runtime.loadLibrary0(Runtime.java:1008)
        at java.lang.System.loadLibrary(System.java:1664)
        at org.signal.client.internal.Native.loadLibrary(Native.java:57)
        at org.signal.client.internal.Native.<clinit>(Native.java:66)
        at org.signal.client.internal.Native.ECPublicKey_Deserialize(Native Method)
        at org.whispersystems.libsignal.ecc.ECPublicKey.<init>(ECPublicKey.java:19)
        at org.whispersystems.libsignal.ecc.Curve.decodePoint(Curve.java:25)
        at com.s2a_mobile_server.SignalConfig.getUnidentifiedSenderTrustRoot(SignalConfig.java:74)
        at com.s2a_mobile_server.ServiceConfig.getServiceEnvironmentConfig(ServiceConfig.java:84)
        at com.s2a_mobile_server.MainActivity.<init>(MainActivity.java:74)
        at java.lang.Class.newInstance(Native Method)
        at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
        at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1253)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3671)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3968)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:246)
        at android.app.ActivityThread.main(ActivityThread.java:8506)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1139)

Here is my current dependencies:

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'com.android.support:multidex:1.0.3'

    implementation 'com.google.protobuf:protobuf-javalite:3.15.6'
    implementation 'com.google.firebase:firebase-database:19.7.0'

    api("com.github.turasa:signal-service-java:2.15.3_unofficial_19")
    implementation('com.google.protobuf:protobuf-javalite:3.15.6')
    implementation("org.bouncycastle:bcprov-jdk15to18:1.68")
}

I "solved" it by adding implementation("org.signal:libsignal-jni-android:0.0.1") to my dependencies, but when I run the app, I got another error like this:

2021-05-09 00:46:32.640 11404-11404/com.s2a_mobile_server E/a_mobile_serve: No implementation found for void org.signal.client.internal.Native.Logger_Initialize(int, java.lang.Class) (tried Java_org_signal_client_internal_Native_Logger_1Initialize and Java_org_signal_client_internal_Native_Logger_1Initialize__ILjava_lang_Class_2)
2021-05-09 00:46:32.642 11404-11404/com.s2a_mobile_server E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.s2a_mobile_server, PID: 11404
    java.lang.UnsatisfiedLinkError: No implementation found for void org.signal.client.internal.Native.Logger_Initialize(int, java.lang.Class) (tried Java_org_signal_client_internal_Native_Logger_1Initialize and Java_org_signal_client_internal_Native_Logger_1Initialize__ILjava_lang_Class_2)
        at org.signal.client.internal.Native.Logger_Initialize(Native Method)
        at org.signal.client.internal.Native.<clinit>(Native.java:67)
        at org.signal.client.internal.Native.ECPublicKey_Deserialize(Native Method)
        at org.whispersystems.libsignal.ecc.ECPublicKey.<init>(ECPublicKey.java:19)
        at org.whispersystems.libsignal.ecc.Curve.decodePoint(Curve.java:25)
        at com.s2a_mobile_server.SignalConfig.getUnidentifiedSenderTrustRoot(SignalConfig.java:74)
        at com.s2a_mobile_server.ServiceConfig.getServiceEnvironmentConfig(ServiceConfig.java:84)
        at com.s2a_mobile_server.MainActivity.<init>(MainActivity.java:74)
        at java.lang.Class.newInstance(Native Method)
        at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
        at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1253)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3671)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3968)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:246)
        at android.app.ActivityThread.main(ActivityThread.java:8506)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1139)

Is there anybody facing the same issue?
Can anybody give me some guidances or solutions to solve these issues? Thanks!

PushServiceSocket: AuthorizationFailedException: Authorization failed!

I upgraded to your current master and re-linked my slave, now all users are considered non-signal users because the PushServiceSocket does not like my slave, and thus i cannot send anything:

02-19 12:40:34.704 10821-13004/org.thoughtcrime.securesms W/ConversationActivity: org.whispersystems.signalservice.api.push.exceptions.AuthorizationFailedException: Authorization failed!
  at org.whispersystems.signalservice.internal.push.PushServiceSocket.makeRequest(PushServiceSocket.java:548)
  at org.whispersystems.signalservice.internal.push.PushServiceSocket.getContactTokenDetails(PushServiceSocket.java:416)
  at org.whispersystems.signalservice.api.SignalServiceAccountManager.getContact(SignalServiceAccountManager.java:309)
  at org.thoughtcrime.securesms.util.DirectoryHelper.refreshDirectoryFor(DirectoryHelper.java:125)
  at org.thoughtcrime.securesms.ConversationActivity$13.doInBackground(ConversationActivity.java:923)
  at org.thoughtcrime.securesms.ConversationActivity$13.doInBackground(ConversationActivity.java:912)
  at android.os.AsyncTask$2.call(AsyncTask.java:295)
  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
  at java.lang.Thread.run(Thread.java:818)

WebSocketConnection: Expected HTTP 101 but was 403

heyho,

i have rebased my multidevice branch of Signal-Android to the current head of master (here is the diff). I have installed libsignal-service-java from your current master with gradlew installArchives, and i have added the okhttp3 dependency to Signal-Android.

Now when signal is open, the log is flooded with this stracktrace:

01-27 23:56:13.471 7635-7941/org.thoughtcrime.securesms W/WebSocketConnection: WSC connect()...
01-27 23:56:13.999 7635-7976/org.thoughtcrime.securesms W/WebSocketConnection: onFailure()
01-27 23:56:14.000 7635-7976/org.thoughtcrime.securesms W/WebSocketConnection: java.net.ProtocolException: Expected HTTP 101 response but was '403 Unauthorized'
   at okhttp3.internal.ws.RealWebSocket.checkResponse(RealWebSocket.java:215)
   at okhttp3.internal.ws.RealWebSocket$2.onResponse(RealWebSocket.java:182)
   at okhttp3.RealCall$AsyncCall.execute(RealCall.java:135)
   at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
   at java.lang.Thread.run(Thread.java:818)
01-27 23:56:14.000 7635-7976/org.thoughtcrime.securesms W/WebSocketConnection: onClose()...

Any ideas? I have not intentionally changed anything that could have triggered this. Note that i can send and receive messages just fine ¯\_(ツ)_/¯

The urlrequest looks fine to me:
https://textsecure-service.whispersystems.org/v1/websocket/?login=+49XXXXXXXXX&password=XXXXXXXXXXXXXXXXXXXXX

Proxy does not effect

Hello,
I have tried to use an HTTP proxy but it does not work.
Could you provide some tips to use the proxy?
Another question is that could I use sock proxy?

Thanks

Startup fails with message dlopen failed: library "libpthread.so.0" not found when started under termux/android

Problem description

When I try to start signal-cli under termux/android the application bails out with the following message:

WARN Manager - Failed to call libsignal-client: /data/data/com.termux/files/usr/tmp/12416138040285907917libsignal_jni.so: dlopen failed: library "libpthread.so.0" not found: needed by /data/data/com.termux/files/usr/tmp/12416138040285907917libsignal_jni.so in namespace (default)
Missing required native library dependency: libsignal-client

System information

TERMUX_VERSION=0.118.0
Packages CPU architecture: aarch64
Android version: 13
Kernel version: 4.9 aarch64 Android
Device manufacturer: Google
Device model: Pixel 3a

Further information

Android embeds threading into libc (not GNU libc).

Is there any possible solution to fix the issue?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.