2219 Commits

Author SHA1 Message Date
Gara Dorta
e710efd173
Merge 7773a3fd83f46ba018503a477e3f304b55eb503f into 9bc4c0ecd8271f7fbc68f0827dabdc664b191d5f 2026-04-10 19:12:45 -06:00
AsamK
9bc4c0ecd8 Update libsignal-service 2026-04-10 18:24:57 +02:00
Era Dorta
7773a3fd83 Merge branch 'master' into openapi-docs 2026-04-06 18:22:07 +02:00
AsamK
763ddf85e6 Bump version to 0.14.2 v0.14.2 2026-04-04 15:05:24 +02:00
AsamK
b2bab0d0dc Add libsignal-version file
Fixes #1964
2026-04-03 11:40:08 +02:00
AsamK
62fc96c4c9 Handle MustRequestNewCodeException
Fixes #1968
2026-04-03 11:20:46 +02:00
AsamK
2667688139 Update gradle wrapper 2026-04-03 11:20:01 +02:00
AsamK
990d1eab58 Add java 26 to ci build 2026-04-03 10:11:04 +02:00
Era Dorta
30f1464092 Remove empty space from merge 2026-04-02 23:29:54 +02:00
Era Dorta
52543fbc5e Merge branch 'master' into openapi-docs 2026-04-02 23:28:43 +02:00
AsamK
e6b33b8da7 Check for missing attachment id
Closes #1989
2026-04-02 22:06:10 +02:00
AsamK
d40f62ec21 Adapt exception handling to libsignal-service changes 2026-04-02 21:32:19 +02:00
AsamK
265369e353 Update libsignal-service 2026-04-01 22:47:54 +02:00
AsamK
d1106299fe Pass sender device id to ice handler 2026-04-01 22:47:54 +02:00
AsamK
7919a0f4aa Change subscribeCallEvents command to match subscribeReceive 2026-04-01 22:47:54 +02:00
AsamK
7a8a34f45e Some call refactoring 2026-04-01 22:47:54 +02:00
AsamK
0a777ea7df Some minor code improvements 2026-04-01 22:08:08 +02:00
AsamK
103a0807ca Update graalvm buildtools 2026-04-01 22:07:48 +02:00
Shaheen Gandhi
135d3a1677
Add voice calling support (#1932)
* Add voice call API types, protobuf definitions, and build dependencies

Define call method interfaces in Manager, create API records (CallInfo,
CallOffer, TurnServer), and hand-coded protobuf parsers for RingRTC
signaling messages (ConnectionParametersV4, RtpDataMessage).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Implement call signaling state machine and message routing

Add CallSignalingHelper for x25519 key generation and HKDF-based SRTP
key derivation. Add CallManager for tracking active calls, spawning
call tunnel subprocesses, and handling call lifecycle (offer, answer,
ICE candidates, hangup, busy). Wire call message routing in
IncomingMessageHandler and implement Manager call methods in ManagerImpl.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add call state notification mechanism for JSON-RPC clients

Implement CallEventListener callback pattern that fires on every call
state transition (RINGING_INCOMING, RINGING_OUTGOING, CONNECTING,
CONNECTED, ENDED). The JSON-RPC layer auto-subscribes and pushes
callEvent notifications alongside receive notifications.

Changes:
- Manager.java: Add CallEventListener interface and methods
- ManagerImpl.java: Implement add/removeCallEventListener with cleanup
- DbusManagerImpl.java: Add stub implementation (not supported over DBus)
- JsonCallEvent.java: JSON notification record for call events
- SignalJsonRpcDispatcherHandler.java: Auto-subscribe call event listeners

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* Add JSON-RPC commands for voice call control

Add startCall, acceptCall, hangupCall, rejectCall, and listCalls
commands for the JSON-RPC daemon interface. Register commands and
update GraalVM metadata for native image support.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add call tunnel documentation

Add documentation about the architecture, protocol, and implementation of
signal-call-tunnel, the secure tunnel subprocess for voice calling.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Remove unused integration test tag from lib/build.gradle.kts

The excludeTags("integration") block was added but no tests use the
@Tag("integration") annotation. Revert to upstream's simple
useJUnitPlatform() call.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Derive install dir from jar location instead of nonexistent property

The signal.cli.install.dir system property was never set by the Gradle
start script or anywhere else. Replace it with code source detection:
resolve the jar's parent directory to find the install root, then look
for bin/signal-call-tunnel relative to that.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Remove explicit success responses from hangup and reject commands

Successful commands with no additional information should not return
a response, matching the pattern used by other signal-cli commands
like SendSyncRequestCommand and UpdateConfigurationCommand.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Use instanceof pattern matching for call ID extraction

Replace explicit null check and Number cast with instanceof pattern
matching in AcceptCallCommand, HangupCallCommand, and
RejectCallCommand.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Guard handleIncoming* methods against missing call event listeners

Skip processing incoming call offers when no call event listeners are
registered, since there is nobody to notify about the call. For hangup
and busy, also guard when there are no listeners AND no active call
(the tunnel may still need cleanup if already spawned).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Use Jackson JSON serialization in CallManager

Replace all manual JSON string concatenation with Jackson ObjectNode
construction and ObjectMapper serialization. Use BigInteger for call
IDs to properly represent unsigned 64-bit values in JSON.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Add subscribeCallEvents command for opt-in call event notifications

Call events are no longer subscribed by default. JSON-RPC clients must
explicitly call subscribeCallEvents to receive callEvent notifications
and enable incoming call handling. This avoids sending unwanted call
events to clients that don't use voice calling.

Also adds unsubscribeCallEvents for cleanup, idempotent subscription
guard, and updates CALL_TUNNEL.md to document the subscription step.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Replace Unix socket with stdin/stdout for tunnel communication

Use the tunnel subprocess' stdin for sending control messages and
stdout for receiving control events, instead of a separate Unix
domain socket. This eliminates:
- Temporary directory creation (/tmp/sc-<random>/)
- Socket path and auth token in config JSON
- Connection retry loop (50x at 200ms)
- Auth message handshake
- Socket cleanup on call end

The tunnel's stderr is captured separately for logging. Config JSON
is written as the first line on stdin, followed by control messages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 22:07:16 +02:00
Era Dorta
c633f478c2 typo fixing 2026-03-28 22:02:18 +01:00
Era Dorta
dd1d41c798 Merge branch 'master' into openapi-docs 2026-03-28 21:59:15 +01:00
Era Dorta
ed6f41c691 Updated readme with the new schemas path 2026-03-28 21:58:36 +01:00
Era Dorta
b4d5da7bf0 Simplified jsonSchemas task definition 2026-03-28 21:57:53 +01:00
Kevin Kickartz-Grabowsky
59a0bd87cd
Add --voice-note flag for send command (#1973)
Add support for marking audio attachments as voice notes when sending
messages. Voice notes are displayed inline with a play button in Signal
clients, rather than as file attachments.

This addresses a longstanding TODO in AttachmentUtils.java and resolves
the feature request in #1601.

Changes:
- Add 'voiceNote' field to Message record
- Pass voiceNote flag through AttachmentHelper to AttachmentUtils
- Add .withVoiceNote() to SignalServiceAttachmentStream builder
- Add --voice-note CLI argument to SendCommand
- Support voiceNote parameter in JSON-RPC mode

Usage:
  signal-cli send -a audio.m4a --voice-note +1234567890

JSON-RPC:
  {"method":"send","params":{"attachment":"audio.m4a","voiceNote":true,...}}

Closes #1601
2026-03-28 12:28:13 +01:00
AsamK
c94da00212 Update libsignal-service 2026-03-21 22:32:38 +01:00
AsamK
36649a8526 Update CONTRIBUTING.md 2026-03-21 22:04:48 +01:00
AsamK
3297acd3f4 Update gradle 2026-03-21 22:04:48 +01:00
AsamK
3e5caf9284 Prepare next release 2026-03-21 22:04:48 +01:00
dependabot[bot]
53ae9e4266
Bump rustls-webpki from 0.103.9 to 0.103.10 in /client (#1982)
Bumps [rustls-webpki](https://github.com/rustls/webpki) from 0.103.9 to 0.103.10.
- [Release notes](https://github.com/rustls/webpki/releases)
- [Commits](https://github.com/rustls/webpki/compare/v/0.103.9...v/0.103.10)

---
updated-dependencies:
- dependency-name: rustls-webpki
  dependency-version: 0.103.10
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-21 16:37:53 +01:00
Era Dorta
1702266b75 fix: remove jsonunwrapped workaround by upgrading to micronaut-json-schema version 2.0.0-M6 2026-03-21 15:58:04 +01:00
Era Dorta
da0d67a2db
Merge branch 'master' into openapi-docs 2026-03-18 19:05:21 +01:00
joeykrim
313f5392ef
Fix updateGroup --admin and --remove-member silent failures (#1970)
Fix type mismatch in retainAll() calls that cause updateGroup --admin
and --remove-member to silently do nothing.

retainAll() compared Set<RecipientId> against Collection<GroupMemberInfo>,
which always evaluates to false (different types), emptying the set.

Replace group.getMembers() with group.getMemberRecipientIds() in all
three affected locations.

Fixes: updateGroup --admin silently failing to promote members
Fixes: updateGroup --remove-member silently failing to remove members

Co-authored-by: joey <joey@Mac-Studio.local>
2026-03-13 08:08:02 +01:00
moppman
7d89375d3a
Update GraalVM metadata (#1966)
Add isArchived from #1957
2026-03-09 19:10:36 +01:00
Zachary Johnson
db0f660d08
enforce poll options between 1 and 100 characters; update documentation (#1965)
pre-PR cleanup
2026-03-09 19:09:58 +01:00
AsamK
b498d2050a Bump version to 0.14.1 v0.14.1 2026-03-08 12:55:39 +01:00
AsamK
27a722dc75 Add flags to update group member labels 2026-03-08 12:23:26 +01:00
AsamK
7014f629fe Show member labels in listGroups command 2026-03-08 11:55:19 +01:00
AsamK
30b57bdb3d Update graalvm build tools 2026-03-08 08:41:44 +01:00
AsamK
b94162afbc Enable spqr capability 2026-03-07 15:58:01 +01:00
Era Dorta
14b48e4784 Simplified name 2026-03-07 02:19:25 +01:00
Era Dorta
cafced7a67 Better formatting 2026-03-07 02:18:45 +01:00
Era Dorta
11ee28a2e1 Revert more changes 2026-03-07 02:14:25 +01:00
Era Dorta
6810877b4d Revert uneeded changes 2026-03-07 02:13:31 +01:00
Era Dorta
afc3c458a9 Add docs depedency only when needed 2026-03-07 02:06:23 +01:00
Era Dorta
b6e895b47e Clean readme 2026-03-07 01:50:06 +01:00
Era Dorta
0f83b784e9 Remove extra empty lines 2026-03-07 01:45:09 +01:00
Era Dorta
8376d1f477 Removed uneeded import 2026-03-07 01:42:17 +01:00
Era Dorta
d7c0c7000f Updated the readme 2026-03-07 01:40:03 +01:00
Era Dorta
c6ac4b2692 Make references local 2026-03-07 01:37:31 +01:00
Era Dorta
6135dae301 Remove @JsonProperty(required = true) 2026-03-07 00:30:36 +01:00