diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java index 88f40fee8c..9b5022ccf6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -176,7 +176,8 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider { SignalExecutors.newCachedBoundedExecutor("signal-messages", ThreadUtil.PRIORITY_IMPORTANT_BACKGROUND_THREAD, 1, 16, 30), ByteUnit.KILOBYTES.toBytes(256), RemoteConfig::useMessageSendRestFallback, - RemoteConfig.usePqRatchet()); + RemoteConfig.usePqRatchet(), + RemoteConfig.internalUser() ? Optional.of(ByteUnit.KILOBYTES.toBytes(96)) : Optional.empty()); } @Override diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java index 166ea88d85..f51a3bdd66 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java @@ -185,7 +185,8 @@ public class SignalServiceMessageSender { private final Scheduler scheduler; private final long maxEnvelopeSize; private final BooleanSupplier useRestFallback; - private final UsePqRatchet usePqRatchet; + private final UsePqRatchet usePqRatchet; + private final Optional internalOnlyMaxEnvelopeSize; public SignalServiceMessageSender(PushServiceSocket pushServiceSocket, SignalServiceDataStore store, @@ -197,25 +198,27 @@ public class SignalServiceMessageSender { ExecutorService executor, long maxEnvelopeSize, BooleanSupplier useRestFallback, - UsePqRatchet usePqRatchet) + UsePqRatchet usePqRatchet, + Optional internalOnlyMaxEnvelopeSize) { CredentialsProvider credentialsProvider = pushServiceSocket.getCredentialsProvider(); - this.socket = pushServiceSocket; - this.aciStore = store.aci(); - this.sessionLock = sessionLock; - this.localAddress = new SignalServiceAddress(credentialsProvider.getAci(), credentialsProvider.getE164()); - this.localDeviceId = credentialsProvider.getDeviceId(); - this.localPni = credentialsProvider.getPni(); - this.attachmentApi = attachmentApi; - this.messageApi = messageApi; - this.eventListener = eventListener; - this.maxEnvelopeSize = maxEnvelopeSize; - this.localPniIdentity = store.pni().getIdentityKeyPair(); - this.scheduler = Schedulers.from(executor, false, false); - this.keysApi = keysApi; - this.useRestFallback = useRestFallback; - this.usePqRatchet = usePqRatchet; + this.socket = pushServiceSocket; + this.aciStore = store.aci(); + this.sessionLock = sessionLock; + this.localAddress = new SignalServiceAddress(credentialsProvider.getAci(), credentialsProvider.getE164()); + this.localDeviceId = credentialsProvider.getDeviceId(); + this.localPni = credentialsProvider.getPni(); + this.attachmentApi = attachmentApi; + this.messageApi = messageApi; + this.eventListener = eventListener; + this.maxEnvelopeSize = maxEnvelopeSize; + this.localPniIdentity = store.pni().getIdentityKeyPair(); + this.scheduler = Schedulers.from(executor, false, false); + this.keysApi = keysApi; + this.useRestFallback = useRestFallback; + this.usePqRatchet = usePqRatchet; + this.internalOnlyMaxEnvelopeSize = internalOnlyMaxEnvelopeSize; } /** @@ -2813,6 +2816,11 @@ public class SignalServiceMessageSender { if (maxEnvelopeSize > 0 && size > maxEnvelopeSize) { throw new ContentTooLargeException(size); } + + if (internalOnlyMaxEnvelopeSize.isPresent() && size > internalOnlyMaxEnvelopeSize.get()) { + throw new ContentTooLargeException(size); + } + return content; } @@ -2822,6 +2830,11 @@ public class SignalServiceMessageSender { if (maxEnvelopeSize > 0 && size > maxEnvelopeSize) { throw new ContentTooLargeException(size); } + + if (internalOnlyMaxEnvelopeSize.isPresent() && size > internalOnlyMaxEnvelopeSize.get()) { + throw new ContentTooLargeException(size); + } + return content; }