gitextract_qyyfx0yg/ ├── .editorconfig ├── .github/ │ ├── FUNDING.yml │ ├── dependabot.yml │ ├── stale.yml │ └── workflows/ │ ├── documentation.yml │ ├── integration-tests.yml │ └── test.yml ├── .gitignore ├── .gitmodules ├── .java-version ├── .mvn/ │ ├── extensions.xml │ ├── jgitver.config.xml │ └── wrapper/ │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── LICENSE ├── README.md ├── TESTING.md ├── api-doc/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── signal/ │ │ └── openapi/ │ │ ├── OpenApiExtension.java │ │ └── OpenApiReader.java │ └── resources/ │ ├── META-INF/ │ │ └── services/ │ │ └── io.swagger.v3.jaxrs2.ext.OpenAPIExtension │ └── openapi/ │ └── openapi-configuration.yaml ├── integration-tests/ │ ├── .gitignore │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── signal/ │ │ └── integration/ │ │ ├── Codecs.java │ │ ├── IntegrationTools.java │ │ ├── Operations.java │ │ ├── TestDevice.java │ │ ├── TestUser.java │ │ └── config/ │ │ ├── Config.java │ │ └── DynamoDbTables.java │ └── test/ │ └── java/ │ └── org/ │ └── signal/ │ └── integration/ │ ├── AccountTest.java │ ├── MessagingTest.java │ └── RegistrationTest.java ├── mvnw ├── mvnw.cmd ├── pom.xml ├── service/ │ ├── assembly.xml │ ├── config/ │ │ ├── sample-secrets-bundle.yml │ │ └── sample.yml │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── graphql/ │ │ │ └── braintree/ │ │ │ ├── ChargePayPalOneTimePayment.graphql │ │ │ ├── CreatePayPalBillingAgreement.graphql │ │ │ ├── CreatePayPalOneTimePayment.graphql │ │ │ ├── TokenizePayPalBillingAgreement.graphql │ │ │ ├── TokenizePayPalOneTimePayment.graphql │ │ │ ├── VaultPaymentMethod.graphql │ │ │ └── schema.json │ │ ├── java/ │ │ │ └── org/ │ │ │ ├── signal/ │ │ │ │ └── i18n/ │ │ │ │ ├── HeaderControlledResourceBundleLookup.java │ │ │ │ └── ResourceBundleFactory.java │ │ │ └── whispersystems/ │ │ │ └── textsecuregcm/ │ │ │ ├── WhisperServerConfiguration.java │ │ │ ├── WhisperServerService.java │ │ │ ├── asn/ │ │ │ │ ├── AsnInfo.java │ │ │ │ ├── AsnInfoProvider.java │ │ │ │ ├── AsnInfoProviderImpl.java │ │ │ │ └── AsnRange.java │ │ │ ├── attachments/ │ │ │ │ ├── AttachmentGenerator.java │ │ │ │ ├── AttachmentUtil.java │ │ │ │ ├── GcsAttachmentGenerator.java │ │ │ │ ├── TusAttachmentGenerator.java │ │ │ │ └── TusConfiguration.java │ │ │ ├── auth/ │ │ │ │ ├── AccountAuthenticator.java │ │ │ │ ├── Anonymous.java │ │ │ │ ├── AuthenticatedBackupUser.java │ │ │ │ ├── AuthenticatedDevice.java │ │ │ │ ├── BasicAuthorizationHeader.java │ │ │ │ ├── CertificateGenerator.java │ │ │ │ ├── ChangesLinkedDevices.java │ │ │ │ ├── ChangesPhoneNumber.java │ │ │ │ ├── CloudflareTurnCredentialsManager.java │ │ │ │ ├── CombinedUnidentifiedSenderAccessKeys.java │ │ │ │ ├── DisconnectionRequestListener.java │ │ │ │ ├── DisconnectionRequestManager.java │ │ │ │ ├── ExternalServiceCredentials.java │ │ │ │ ├── ExternalServiceCredentialsGenerator.java │ │ │ │ ├── ExternalServiceCredentialsSelector.java │ │ │ │ ├── GroupSendTokenHeader.java │ │ │ │ ├── IdlePrimaryDeviceAuthenticatedWebSocketUpgradeFilter.java │ │ │ │ ├── InvalidAuthorizationHeaderException.java │ │ │ │ ├── OptionalAccess.java │ │ │ │ ├── PhoneVerificationTokenManager.java │ │ │ │ ├── RedemptionRange.java │ │ │ │ ├── RegistrationLockVerificationManager.java │ │ │ │ ├── SaltedTokenHash.java │ │ │ │ ├── StoredRegistrationLock.java │ │ │ │ ├── TurnToken.java │ │ │ │ ├── UnidentifiedAccessChecksum.java │ │ │ │ ├── UnidentifiedAccessUtil.java │ │ │ │ └── grpc/ │ │ │ │ ├── AuthenticatedDevice.java │ │ │ │ ├── AuthenticationUtil.java │ │ │ │ ├── ProhibitAuthenticationInterceptor.java │ │ │ │ └── RequireAuthenticationInterceptor.java │ │ │ ├── backup/ │ │ │ │ ├── BackupAuthManager.java │ │ │ │ ├── BackupBadReceiptException.java │ │ │ │ ├── BackupException.java │ │ │ │ ├── BackupFailedZkAuthenticationException.java │ │ │ │ ├── BackupInvalidArgumentException.java │ │ │ │ ├── BackupLevelUtil.java │ │ │ │ ├── BackupManager.java │ │ │ │ ├── BackupMissingIdCommitmentException.java │ │ │ │ ├── BackupNotFoundException.java │ │ │ │ ├── BackupPermissionException.java │ │ │ │ ├── BackupPublicKeyConflictException.java │ │ │ │ ├── BackupUploadDescriptor.java │ │ │ │ ├── BackupWrongCredentialTypeException.java │ │ │ │ ├── BackupsDb.java │ │ │ │ ├── Cdn3BackupCredentialGenerator.java │ │ │ │ ├── Cdn3RemoteStorageManager.java │ │ │ │ ├── CopyParameters.java │ │ │ │ ├── CopyResult.java │ │ │ │ ├── ExpiredBackup.java │ │ │ │ ├── InvalidLengthException.java │ │ │ │ ├── MediaEncryptionParameters.java │ │ │ │ ├── RemoteStorageManager.java │ │ │ │ ├── SecureValueRecoveryBCredentialsGeneratorFactory.java │ │ │ │ ├── SourceObjectNotFoundException.java │ │ │ │ ├── StoredBackupAttributes.java │ │ │ │ └── UsageInfo.java │ │ │ ├── badges/ │ │ │ │ ├── BadgeTranslator.java │ │ │ │ ├── ConfiguredProfileBadgeConverter.java │ │ │ │ ├── LevelTranslator.java │ │ │ │ └── ProfileBadgeConverter.java │ │ │ ├── captcha/ │ │ │ │ ├── Action.java │ │ │ │ ├── AssessmentResult.java │ │ │ │ ├── CaptchaChecker.java │ │ │ │ ├── CaptchaClient.java │ │ │ │ ├── RegistrationCaptchaManager.java │ │ │ │ └── ShortCodeExpander.java │ │ │ ├── configuration/ │ │ │ │ ├── AccountsTableConfiguration.java │ │ │ │ ├── ApnConfiguration.java │ │ │ │ ├── AppleAppStoreConfiguration.java │ │ │ │ ├── AppleDeviceCheckConfiguration.java │ │ │ │ ├── AwsCredentialsProviderFactory.java │ │ │ │ ├── BadgeConfiguration.java │ │ │ │ ├── BadgesConfiguration.java │ │ │ │ ├── BraintreeConfiguration.java │ │ │ │ ├── CallQualitySurveyConfiguration.java │ │ │ │ ├── Cdn3StorageManagerConfiguration.java │ │ │ │ ├── CdnConfiguration.java │ │ │ │ ├── CircuitBreakerConfiguration.java │ │ │ │ ├── ClientReleaseConfiguration.java │ │ │ │ ├── CloudflareTurnConfiguration.java │ │ │ │ ├── DefaultAwsCredentialsFactory.java │ │ │ │ ├── DefaultPubSubPublisherFactory.java │ │ │ │ ├── DeviceCheckConfiguration.java │ │ │ │ ├── DirectoryV2ClientConfiguration.java │ │ │ │ ├── DirectoryV2Configuration.java │ │ │ │ ├── DynamoDbClientConfiguration.java │ │ │ │ ├── DynamoDbClientFactory.java │ │ │ │ ├── DynamoDbTables.java │ │ │ │ ├── ExternalRequestFilterConfiguration.java │ │ │ │ ├── FaultTolerantRedisClientFactory.java │ │ │ │ ├── FaultTolerantRedisClusterFactory.java │ │ │ │ ├── FcmConfiguration.java │ │ │ │ ├── GcpAttachmentsConfiguration.java │ │ │ │ ├── GenericZkConfig.java │ │ │ │ ├── GooglePlayBillingConfiguration.java │ │ │ │ ├── GrpcConfiguration.java │ │ │ │ ├── HlrLookupConfiguration.java │ │ │ │ ├── IdlePrimaryDeviceReminderConfiguration.java │ │ │ │ ├── IssuedReceiptsTableConfiguration.java │ │ │ │ ├── KeyTransparencyServiceConfiguration.java │ │ │ │ ├── LinkDeviceSecretConfiguration.java │ │ │ │ ├── MaxDeviceConfiguration.java │ │ │ │ ├── MessageByteLimitCardinalityEstimatorConfiguration.java │ │ │ │ ├── MessageCacheConfiguration.java │ │ │ │ ├── MonitoredS3ObjectConfiguration.java │ │ │ │ ├── OneTimeDonationConfiguration.java │ │ │ │ ├── OneTimeDonationCurrencyConfiguration.java │ │ │ │ ├── OpenTelemetryConfiguration.java │ │ │ │ ├── PagedSingleUseKEMPreKeyStoreConfiguration.java │ │ │ │ ├── PaymentsServiceClientsConfiguration.java │ │ │ │ ├── PaymentsServiceClientsFactory.java │ │ │ │ ├── PaymentsServiceConfiguration.java │ │ │ │ ├── PubSubPublisherFactory.java │ │ │ │ ├── RedisClusterConfiguration.java │ │ │ │ ├── RedisConfiguration.java │ │ │ │ ├── RegistrationServiceClientFactory.java │ │ │ │ ├── RegistrationServiceConfiguration.java │ │ │ │ ├── RemoteConfigConfiguration.java │ │ │ │ ├── ReportMessageConfiguration.java │ │ │ │ ├── RetryConfiguration.java │ │ │ │ ├── S3ObjectMonitorFactory.java │ │ │ │ ├── SecureStorageServiceConfiguration.java │ │ │ │ ├── SecureValueRecoveryConfiguration.java │ │ │ │ ├── ShortCodeExpanderConfiguration.java │ │ │ │ ├── SpamFilterConfiguration.java │ │ │ │ ├── StaticAwsCredentialsFactory.java │ │ │ │ ├── StripeConfiguration.java │ │ │ │ ├── SubscriptionConfiguration.java │ │ │ │ ├── SubscriptionLevelConfiguration.java │ │ │ │ ├── SubscriptionPriceConfiguration.java │ │ │ │ ├── TlsKeyStoreConfiguration.java │ │ │ │ ├── TurnConfiguration.java │ │ │ │ ├── TurnUriConfiguration.java │ │ │ │ ├── URLSerializationConverter.java │ │ │ │ ├── UnidentifiedDeliveryConfiguration.java │ │ │ │ ├── VirtualThreadConfiguration.java │ │ │ │ ├── ZkConfig.java │ │ │ │ ├── dynamic/ │ │ │ │ │ ├── DynamicBackupConfiguration.java │ │ │ │ │ ├── DynamicCaptchaConfiguration.java │ │ │ │ │ ├── DynamicCarrierDataLookupConfiguration.java │ │ │ │ │ ├── DynamicConfiguration.java │ │ │ │ │ ├── DynamicE164ExperimentEnrollmentConfiguration.java │ │ │ │ │ ├── DynamicExperimentEnrollmentConfiguration.java │ │ │ │ │ ├── DynamicGrpcAllowListConfiguration.java │ │ │ │ │ ├── DynamicMessagePersisterConfiguration.java │ │ │ │ │ ├── DynamicMetricsConfiguration.java │ │ │ │ │ ├── DynamicPaymentsConfiguration.java │ │ │ │ │ ├── DynamicRegistrationConfiguration.java │ │ │ │ │ ├── DynamicRemoteDeprecationConfiguration.java │ │ │ │ │ └── DynamicRestDeprecationConfiguration.java │ │ │ │ └── secrets/ │ │ │ │ ├── BaseSecretValidator.java │ │ │ │ ├── Secret.java │ │ │ │ ├── SecretBytes.java │ │ │ │ ├── SecretBytesList.java │ │ │ │ ├── SecretStore.java │ │ │ │ ├── SecretString.java │ │ │ │ ├── SecretStringList.java │ │ │ │ └── SecretsModule.java │ │ │ ├── controllers/ │ │ │ │ ├── AccountController.java │ │ │ │ ├── AccountControllerV2.java │ │ │ │ ├── AccountIdentityResponseBuilder.java │ │ │ │ ├── ArchiveController.java │ │ │ │ ├── AttachmentControllerV4.java │ │ │ │ ├── CallLinkController.java │ │ │ │ ├── CallQualitySurveyController.java │ │ │ │ ├── CallRoutingControllerV2.java │ │ │ │ ├── CertificateController.java │ │ │ │ ├── ChallengeController.java │ │ │ │ ├── DeviceCheckController.java │ │ │ │ ├── DeviceController.java │ │ │ │ ├── DeviceLimitExceededException.java │ │ │ │ ├── DirectoryV2Controller.java │ │ │ │ ├── DonationController.java │ │ │ │ ├── GetCallingRelaysResponse.java │ │ │ │ ├── KeepAliveController.java │ │ │ │ ├── KeyTransparencyController.java │ │ │ │ ├── KeysController.java │ │ │ │ ├── MessageController.java │ │ │ │ ├── MismatchedDevices.java │ │ │ │ ├── MismatchedDevicesException.java │ │ │ │ ├── MultiRecipientMismatchedDevicesException.java │ │ │ │ ├── OneTimeDonationController.java │ │ │ │ ├── PaymentsController.java │ │ │ │ ├── ProfileController.java │ │ │ │ ├── ProvisioningController.java │ │ │ │ ├── RateLimitExceededException.java │ │ │ │ ├── RegistrationController.java │ │ │ │ ├── RemoteConfigController.java │ │ │ │ ├── SecureStorageController.java │ │ │ │ ├── SecureValueRecovery2Controller.java │ │ │ │ ├── ServerRejectedException.java │ │ │ │ ├── StickerController.java │ │ │ │ ├── SubscriptionController.java │ │ │ │ ├── VerificationController.java │ │ │ │ └── VerificationSessionRateLimitExceededException.java │ │ │ ├── currency/ │ │ │ │ ├── CoinGeckoClient.java │ │ │ │ ├── CurrencyConversionManager.java │ │ │ │ └── FixerClient.java │ │ │ ├── entities/ │ │ │ │ ├── AccountAttributes.java │ │ │ │ ├── AccountCreationResponse.java │ │ │ │ ├── AccountDataReportResponse.java │ │ │ │ ├── AccountIdentifierResponse.java │ │ │ │ ├── AccountIdentityResponse.java │ │ │ │ ├── AccountMismatchedDevices.java │ │ │ │ ├── AccountStaleDevices.java │ │ │ │ ├── AnswerCaptchaChallengeRequest.java │ │ │ │ ├── AnswerChallengeRequest.java │ │ │ │ ├── AnswerPushChallengeRequest.java │ │ │ │ ├── ApnRegistrationId.java │ │ │ │ ├── AttachmentDescriptorV3.java │ │ │ │ ├── AuthCheckRequest.java │ │ │ │ ├── AuthCheckResponseV2.java │ │ │ │ ├── AvatarChange.java │ │ │ │ ├── Badge.java │ │ │ │ ├── BadgeSvg.java │ │ │ │ ├── BaseProfileResponse.java │ │ │ │ ├── BatchIdentityCheckRequest.java │ │ │ │ ├── BatchIdentityCheckResponse.java │ │ │ │ ├── ChangeNumberRequest.java │ │ │ │ ├── CheckKeysRequest.java │ │ │ │ ├── ConfirmUsernameHashRequest.java │ │ │ │ ├── CreateCallLinkCredential.java │ │ │ │ ├── CreateProfileRequest.java │ │ │ │ ├── CreateVerificationSessionRequest.java │ │ │ │ ├── CurrencyConversionEntity.java │ │ │ │ ├── CurrencyConversionEntityList.java │ │ │ │ ├── DeliveryCertificate.java │ │ │ │ ├── DeviceActivationRequest.java │ │ │ │ ├── DeviceInfo.java │ │ │ │ ├── DeviceInfoList.java │ │ │ │ ├── DeviceName.java │ │ │ │ ├── ECPreKey.java │ │ │ │ ├── ECSignedPreKey.java │ │ │ │ ├── EncryptedUsername.java │ │ │ │ ├── Entitlements.java │ │ │ │ ├── ExpiringProfileKeyCredentialProfileResponse.java │ │ │ │ ├── ExpiringProfileKeyCredentialResponseAdapter.java │ │ │ │ ├── GcmRegistrationId.java │ │ │ │ ├── GetCreateCallLinkCredentialsRequest.java │ │ │ │ ├── GroupCredentials.java │ │ │ │ ├── IncomingMessage.java │ │ │ │ ├── IncomingMessageList.java │ │ │ │ ├── IncomingWebsocketMessage.java │ │ │ │ ├── KEMSignedPreKey.java │ │ │ │ ├── KeyTransparencyDistinguishedKeyResponse.java │ │ │ │ ├── KeyTransparencyMonitorRequest.java │ │ │ │ ├── KeyTransparencyMonitorResponse.java │ │ │ │ ├── KeyTransparencySearchRequest.java │ │ │ │ ├── KeyTransparencySearchResponse.java │ │ │ │ ├── LinkDeviceRequest.java │ │ │ │ ├── LinkDeviceResponse.java │ │ │ │ ├── MismatchedDevicesResponse.java │ │ │ │ ├── OutgoingMessageEntity.java │ │ │ │ ├── OutgoingMessageEntityList.java │ │ │ │ ├── PhoneNumberDiscoverabilityRequest.java │ │ │ │ ├── PhoneNumberIdentityKeyDistributionRequest.java │ │ │ │ ├── PhoneVerificationRequest.java │ │ │ │ ├── PreKey.java │ │ │ │ ├── PreKeyCount.java │ │ │ │ ├── PreKeyResponse.java │ │ │ │ ├── PreKeyResponseItem.java │ │ │ │ ├── PreKeySignatureValidator.java │ │ │ │ ├── ProfileAvatarUploadAttributes.java │ │ │ │ ├── ProfileKeyCommitmentAdapter.java │ │ │ │ ├── ProvisioningMessage.java │ │ │ │ ├── PurchasableBadge.java │ │ │ │ ├── RateLimitChallenge.java │ │ │ │ ├── RedeemReceiptRequest.java │ │ │ │ ├── RegistrationLock.java │ │ │ │ ├── RegistrationLockFailure.java │ │ │ │ ├── RegistrationRequest.java │ │ │ │ ├── RegistrationServiceSession.java │ │ │ │ ├── RemoteAttachment.java │ │ │ │ ├── RemoteAttachmentError.java │ │ │ │ ├── RemoteConfigurationResponse.java │ │ │ │ ├── ReserveUsernameHashRequest.java │ │ │ │ ├── ReserveUsernameHashResponse.java │ │ │ │ ├── RestoreAccountRequest.java │ │ │ │ ├── SelfBadge.java │ │ │ │ ├── SendMessageResponse.java │ │ │ │ ├── SendMultiRecipientMessageResponse.java │ │ │ │ ├── SetKeysRequest.java │ │ │ │ ├── SetPublicKeyRequest.java │ │ │ │ ├── SignedPreKey.java │ │ │ │ ├── SpamReport.java │ │ │ │ ├── StaleDevicesResponse.java │ │ │ │ ├── StickerPackFormUploadAttributes.java │ │ │ │ ├── SubmitVerificationCodeRequest.java │ │ │ │ ├── TransferArchiveResult.java │ │ │ │ ├── TransferArchiveUploadedRequest.java │ │ │ │ ├── UpdateVerificationSessionRequest.java │ │ │ │ ├── UserRemoteConfig.java │ │ │ │ ├── UserRemoteConfigList.java │ │ │ │ ├── UsernameHashResponse.java │ │ │ │ ├── UsernameLinkHandle.java │ │ │ │ ├── VerificationCodeRequest.java │ │ │ │ ├── VerificationSessionResponse.java │ │ │ │ └── VersionedProfileResponse.java │ │ │ ├── experiment/ │ │ │ │ ├── DeviceLastSeenState.java │ │ │ │ ├── Experiment.java │ │ │ │ ├── ExperimentEnrollmentManager.java │ │ │ │ ├── IdleDevicePushNotificationExperiment.java │ │ │ │ ├── PushNotificationExperiment.java │ │ │ │ ├── PushNotificationExperimentSample.java │ │ │ │ └── PushNotificationExperimentSamples.java │ │ │ ├── filters/ │ │ │ │ ├── ExternalRequestFilter.java │ │ │ │ ├── RemoteAddressFilter.java │ │ │ │ ├── RemoteDeprecationFilter.java │ │ │ │ ├── RequestStatisticsFilter.java │ │ │ │ ├── RestDeprecationFilter.java │ │ │ │ └── TimestampResponseFilter.java │ │ │ ├── gcp/ │ │ │ │ ├── CanonicalRequest.java │ │ │ │ ├── CanonicalRequestGenerator.java │ │ │ │ └── CanonicalRequestSigner.java │ │ │ ├── grpc/ │ │ │ │ ├── AccountsAnonymousGrpcService.java │ │ │ │ ├── AccountsGrpcService.java │ │ │ │ ├── AttachmentsGrpcService.java │ │ │ │ ├── AvatarChangeUtil.java │ │ │ │ ├── BackupsAnonymousGrpcService.java │ │ │ │ ├── BackupsGrpcService.java │ │ │ │ ├── CallQualitySurveyGrpcService.java │ │ │ │ ├── ChannelNotFoundException.java │ │ │ │ ├── ConvertibleToGrpcStatus.java │ │ │ │ ├── DeviceCapabilityUtil.java │ │ │ │ ├── DeviceIdUtil.java │ │ │ │ ├── DevicesGrpcService.java │ │ │ │ ├── ErrorConformanceInterceptor.java │ │ │ │ ├── ErrorMappingInterceptor.java │ │ │ │ ├── ExternalServiceCredentialsAnonymousGrpcService.java │ │ │ │ ├── ExternalServiceCredentialsGrpcService.java │ │ │ │ ├── ExternalServiceDefinitions.java │ │ │ │ ├── GroupSendTokenUtil.java │ │ │ │ ├── GrpcAllowListInterceptor.java │ │ │ │ ├── GrpcExceptions.java │ │ │ │ ├── IdentityTypeUtil.java │ │ │ │ ├── KeyTransparencyGrpcService.java │ │ │ │ ├── KeysAnonymousGrpcService.java │ │ │ │ ├── KeysGrpcHelper.java │ │ │ │ ├── KeysGrpcService.java │ │ │ │ ├── MessagesAnonymousGrpcService.java │ │ │ │ ├── MessagesGrpcHelper.java │ │ │ │ ├── MessagesGrpcService.java │ │ │ │ ├── MetricServerInterceptor.java │ │ │ │ ├── PaymentsGrpcService.java │ │ │ │ ├── ProfileAnonymousGrpcService.java │ │ │ │ ├── ProfileGrpcHelper.java │ │ │ │ ├── ProfileGrpcService.java │ │ │ │ ├── RateLimitUtil.java │ │ │ │ ├── RequestAttributes.java │ │ │ │ ├── RequestAttributesInterceptor.java │ │ │ │ ├── RequestAttributesUtil.java │ │ │ │ ├── ServerInterceptorUtil.java │ │ │ │ ├── ServiceIdentifierUtil.java │ │ │ │ ├── ValidatingInterceptor.java │ │ │ │ ├── net/ │ │ │ │ │ ├── ManagedGrpcServer.java │ │ │ │ │ └── ManagedNioEventLoopGroup.java │ │ │ │ └── validators/ │ │ │ │ ├── BaseFieldValidator.java │ │ │ │ ├── E164FieldValidator.java │ │ │ │ ├── EnumSpecifiedFieldValidator.java │ │ │ │ ├── ExactlySizeFieldValidator.java │ │ │ │ ├── FieldValidationException.java │ │ │ │ ├── FieldValidator.java │ │ │ │ ├── NonEmptyFieldValidator.java │ │ │ │ ├── PresentFieldValidator.java │ │ │ │ ├── Range.java │ │ │ │ ├── RangeFieldValidator.java │ │ │ │ ├── SizeFieldValidator.java │ │ │ │ └── ValidatorUtils.java │ │ │ ├── http/ │ │ │ │ └── FaultTolerantHttpClient.java │ │ │ ├── identity/ │ │ │ │ ├── AciServiceIdentifier.java │ │ │ │ ├── IdentityType.java │ │ │ │ ├── PniServiceIdentifier.java │ │ │ │ └── ServiceIdentifier.java │ │ │ ├── jetty/ │ │ │ │ └── JettyHttpConfigurationCustomizer.java │ │ │ ├── keytransparency/ │ │ │ │ └── KeyTransparencyServiceClient.java │ │ │ ├── limits/ │ │ │ │ ├── BaseRateLimiters.java │ │ │ │ ├── CardinalityEstimator.java │ │ │ │ ├── LeakyBucketRateLimiter.java │ │ │ │ ├── MessageDeliveryLoopMonitor.java │ │ │ │ ├── NoopMessageDeliveryLoopMonitor.java │ │ │ │ ├── PushChallengeManager.java │ │ │ │ ├── RateLimitByIpFilter.java │ │ │ │ ├── RateLimitChallengeManager.java │ │ │ │ ├── RateLimitChallengeOption.java │ │ │ │ ├── RateLimitChallengeOptionManager.java │ │ │ │ ├── RateLimitedByIp.java │ │ │ │ ├── RateLimiter.java │ │ │ │ ├── RateLimiterConfig.java │ │ │ │ ├── RateLimiterDescriptor.java │ │ │ │ ├── RateLimiters.java │ │ │ │ └── RedisMessageDeliveryLoopMonitor.java │ │ │ ├── mappers/ │ │ │ │ ├── BackupExceptionMapper.java │ │ │ │ ├── CompletionExceptionMapper.java │ │ │ │ ├── DeviceLimitExceededExceptionMapper.java │ │ │ │ ├── GrpcStatusRuntimeExceptionMapper.java │ │ │ │ ├── IOExceptionMapper.java │ │ │ │ ├── ImpossiblePhoneNumberExceptionMapper.java │ │ │ │ ├── InvalidWebsocketAddressExceptionMapper.java │ │ │ │ ├── JsonMappingExceptionMapper.java │ │ │ │ ├── NonNormalizedPhoneNumberExceptionMapper.java │ │ │ │ ├── NonNormalizedPhoneNumberResponse.java │ │ │ │ ├── ObsoletePhoneNumberFormatExceptionMapper.java │ │ │ │ ├── RateLimitExceededExceptionMapper.java │ │ │ │ ├── RegistrationServiceSenderExceptionMapper.java │ │ │ │ ├── ServerRejectedExceptionMapper.java │ │ │ │ └── SubscriptionExceptionMapper.java │ │ │ ├── metrics/ │ │ │ │ ├── ApplicationShutdownMonitor.java │ │ │ │ ├── BackupMetrics.java │ │ │ │ ├── CallQualityInvalidArgumentsException.java │ │ │ │ ├── CallQualitySurveyManager.java │ │ │ │ ├── DevicePlatformUtil.java │ │ │ │ ├── GarbageCollectionGauges.java │ │ │ │ ├── LogstashTcpSocketAppenderFactory.java │ │ │ │ ├── MessageMetrics.java │ │ │ │ ├── MetricsApplicationEventListener.java │ │ │ │ ├── MetricsHttpChannelListener.java │ │ │ │ ├── MetricsRequestEventListener.java │ │ │ │ ├── MetricsUtil.java │ │ │ │ ├── MicrometerAwsSdkMetricPublisher.java │ │ │ │ ├── MicrometerRegistryManager.java │ │ │ │ ├── NoopAwsSdkMetricPublisher.java │ │ │ │ ├── OpenTelemetryAppenderFactory.java │ │ │ │ ├── OpenWebSocketCounter.java │ │ │ │ ├── ReportedMessageMetricsListener.java │ │ │ │ ├── TlsCertificateExpirationUtil.java │ │ │ │ ├── TrafficSource.java │ │ │ │ └── UserAgentTagUtil.java │ │ │ ├── providers/ │ │ │ │ └── MultiRecipientMessageProvider.java │ │ │ ├── push/ │ │ │ │ ├── APNSender.java │ │ │ │ ├── FcmSender.java │ │ │ │ ├── IdleDeviceNotificationScheduler.java │ │ │ │ ├── MessageAvailabilityListener.java │ │ │ │ ├── MessageSender.java │ │ │ │ ├── MessageTooLargeException.java │ │ │ │ ├── MessageUtil.java │ │ │ │ ├── NotPushRegisteredException.java │ │ │ │ ├── ProvisioningManager.java │ │ │ │ ├── PushNotification.java │ │ │ │ ├── PushNotificationManager.java │ │ │ │ ├── PushNotificationScheduler.java │ │ │ │ ├── PushNotificationSender.java │ │ │ │ ├── ReceiptSender.java │ │ │ │ ├── RedisMessageAvailabilityManager.java │ │ │ │ └── SendPushNotificationResult.java │ │ │ ├── redis/ │ │ │ │ ├── AbstractFaultTolerantPubSubConnection.java │ │ │ │ ├── ClusterLuaScript.java │ │ │ │ ├── ConnectionEventLogger.java │ │ │ │ ├── FaultTolerantPubSubClusterConnection.java │ │ │ │ ├── FaultTolerantPubSubConnection.java │ │ │ │ ├── FaultTolerantRedisClient.java │ │ │ │ ├── FaultTolerantRedisClusterClient.java │ │ │ │ ├── LettuceShardCircuitBreaker.java │ │ │ │ ├── NettyUtil.java │ │ │ │ ├── RedisOperation.java │ │ │ │ └── RedisUriUtil.java │ │ │ ├── registration/ │ │ │ │ ├── ClientType.java │ │ │ │ ├── IdentityTokenCallCredentials.java │ │ │ │ ├── MessageTransport.java │ │ │ │ ├── RegistrationFraudException.java │ │ │ │ ├── RegistrationServiceClient.java │ │ │ │ ├── RegistrationServiceException.java │ │ │ │ ├── RegistrationServiceSenderException.java │ │ │ │ ├── TransportNotAllowedException.java │ │ │ │ └── VerificationSession.java │ │ │ ├── s3/ │ │ │ │ ├── ManagedSupplier.java │ │ │ │ ├── PolicySigner.java │ │ │ │ ├── PostPolicyGenerator.java │ │ │ │ ├── S3MonitoringSupplier.java │ │ │ │ └── S3ObjectMonitor.java │ │ │ ├── scheduler/ │ │ │ │ ├── JobScheduler.java │ │ │ │ └── SchedulingUtil.java │ │ │ ├── securestorage/ │ │ │ │ ├── SecureStorageClient.java │ │ │ │ └── SecureStorageException.java │ │ │ ├── securevaluerecovery/ │ │ │ │ ├── SecureValueRecoveryClient.java │ │ │ │ └── SecureValueRecoveryException.java │ │ │ ├── spam/ │ │ │ │ ├── ChallengeConstraintChecker.java │ │ │ │ ├── ChallengeType.java │ │ │ │ ├── GrpcChallengeResponse.java │ │ │ │ ├── MessageDeliveryListener.java │ │ │ │ ├── MessageType.java │ │ │ │ ├── RateLimitChallengeListener.java │ │ │ │ ├── RegistrationFraudChecker.java │ │ │ │ ├── RegistrationRecoveryChecker.java │ │ │ │ ├── SpamCheckResult.java │ │ │ │ ├── SpamChecker.java │ │ │ │ └── SpamFilter.java │ │ │ ├── storage/ │ │ │ │ ├── AbstractDynamoDbStore.java │ │ │ │ ├── Account.java │ │ │ │ ├── AccountAlreadyExistsException.java │ │ │ │ ├── AccountBadge.java │ │ │ │ ├── AccountChangeValidator.java │ │ │ │ ├── AccountLockManager.java │ │ │ │ ├── AccountUtil.java │ │ │ │ ├── Accounts.java │ │ │ │ ├── AccountsManager.java │ │ │ │ ├── ChangeNumberManager.java │ │ │ │ ├── ChunkProcessingFailedException.java │ │ │ │ ├── ClientRelease.java │ │ │ │ ├── ClientReleaseManager.java │ │ │ │ ├── ClientReleases.java │ │ │ │ ├── ConflictingMessageConsumerException.java │ │ │ │ ├── ContestedOptimisticLockException.java │ │ │ │ ├── Device.java │ │ │ │ ├── DeviceCapability.java │ │ │ │ ├── DeviceIdDeserializer.java │ │ │ │ ├── DeviceKEMPreKeyPages.java │ │ │ │ ├── DeviceSpec.java │ │ │ │ ├── DynamicConfigurationManager.java │ │ │ │ ├── DynamoDbRecoveryManager.java │ │ │ │ ├── EnvelopeUtil.java │ │ │ │ ├── IssuedReceiptsManager.java │ │ │ │ ├── KEMPreKeyPage.java │ │ │ │ ├── KeyIdUtil.java │ │ │ │ ├── KeysManager.java │ │ │ │ ├── LinkDeviceTokenAlreadyUsedException.java │ │ │ │ ├── MessagePersistenceException.java │ │ │ │ ├── MessagePersister.java │ │ │ │ ├── MessageStream.java │ │ │ │ ├── MessageStreamEntry.java │ │ │ │ ├── MessagesCache.java │ │ │ │ ├── MessagesCacheGetItemsScript.java │ │ │ │ ├── MessagesCacheInsertScript.java │ │ │ │ ├── MessagesCacheInsertSharedMultiRecipientPayloadAndViewsScript.java │ │ │ │ ├── MessagesCacheReleaseNodeClaimScript.java │ │ │ │ ├── MessagesCacheRemoveByGuidScript.java │ │ │ │ ├── MessagesCacheRemoveQueueScript.java │ │ │ │ ├── MessagesCacheRemoveRecipientViewFromMrmDataScript.java │ │ │ │ ├── MessagesCacheUnlockQueueScript.java │ │ │ │ ├── MessagesDynamoDb.java │ │ │ │ ├── MessagesManager.java │ │ │ │ ├── MrmDataMissingException.java │ │ │ │ ├── OneTimeDonationsManager.java │ │ │ │ ├── OptimisticLockRetryLimitExceededException.java │ │ │ │ ├── PagedSingleUseKEMPreKeyStore.java │ │ │ │ ├── PaymentTime.java │ │ │ │ ├── PersistentTimer.java │ │ │ │ ├── PhoneNumberIdentifiers.java │ │ │ │ ├── Profiles.java │ │ │ │ ├── ProfilesManager.java │ │ │ │ ├── PushChallengeDynamoDb.java │ │ │ │ ├── RedeemedReceiptsManager.java │ │ │ │ ├── RedisDynamoDbMessagePublisher.java │ │ │ │ ├── RedisDynamoDbMessageStream.java │ │ │ │ ├── RefreshingAccountNotFoundException.java │ │ │ │ ├── RegistrationRecoveryPasswords.java │ │ │ │ ├── RegistrationRecoveryPasswordsManager.java │ │ │ │ ├── RemoteConfig.java │ │ │ │ ├── RemoteConfigs.java │ │ │ │ ├── RemoteConfigsManager.java │ │ │ │ ├── RemovedMessage.java │ │ │ │ ├── RepeatedUseECSignedPreKeyStore.java │ │ │ │ ├── RepeatedUseKEMSignedPreKeyStore.java │ │ │ │ ├── RepeatedUseSignedPreKeyStore.java │ │ │ │ ├── ReportMessageDynamoDb.java │ │ │ │ ├── ReportMessageManager.java │ │ │ │ ├── ReportedMessageListener.java │ │ │ │ ├── SerializedExpireableJsonDynamoStore.java │ │ │ │ ├── SingleUseECPreKeyStore.java │ │ │ │ ├── SubscriberCredentials.java │ │ │ │ ├── SubscriptionManager.java │ │ │ │ ├── Subscriptions.java │ │ │ │ ├── UsernameHashNotAvailableException.java │ │ │ │ ├── UsernameReservationNotFoundException.java │ │ │ │ ├── VerificationSessionManager.java │ │ │ │ ├── VerificationSessions.java │ │ │ │ ├── VersionedProfile.java │ │ │ │ ├── devicecheck/ │ │ │ │ │ ├── AppleDeviceCheckManager.java │ │ │ │ │ ├── AppleDeviceCheckTrustAnchor.java │ │ │ │ │ ├── AppleDeviceChecks.java │ │ │ │ │ ├── ChallengeNotFoundException.java │ │ │ │ │ ├── DeviceCheckKeyIdNotFoundException.java │ │ │ │ │ ├── DeviceCheckVerificationFailedException.java │ │ │ │ │ ├── DuplicatePublicKeyException.java │ │ │ │ │ ├── RequestReuseException.java │ │ │ │ │ └── TooManyKeysException.java │ │ │ │ └── foundationdb/ │ │ │ │ └── FoundationDbMessageStore.java │ │ │ ├── subscriptions/ │ │ │ │ ├── AppleAppStoreClient.java │ │ │ │ ├── AppleAppStoreDecodedTransaction.java │ │ │ │ ├── AppleAppStoreManager.java │ │ │ │ ├── BankMandateTranslator.java │ │ │ │ ├── BankTransferType.java │ │ │ │ ├── BraintreeGraphqlClient.java │ │ │ │ ├── BraintreeManager.java │ │ │ │ ├── BraintreePlanMetadata.java │ │ │ │ ├── ChargeFailure.java │ │ │ │ ├── CustomerAwareSubscriptionPaymentProcessor.java │ │ │ │ ├── GooglePlayBillingManager.java │ │ │ │ ├── PayPalDonationsTranslator.java │ │ │ │ ├── PaymentDetails.java │ │ │ │ ├── PaymentMethod.java │ │ │ │ ├── PaymentProvider.java │ │ │ │ ├── PaymentStatus.java │ │ │ │ ├── ProcessorCustomer.java │ │ │ │ ├── StripeManager.java │ │ │ │ ├── SubscriptionChargeFailurePaymentRequiredException.java │ │ │ │ ├── SubscriptionCurrencyUtil.java │ │ │ │ ├── SubscriptionException.java │ │ │ │ ├── SubscriptionForbiddenException.java │ │ │ │ ├── SubscriptionInformation.java │ │ │ │ ├── SubscriptionInvalidAmountException.java │ │ │ │ ├── SubscriptionInvalidArgumentsException.java │ │ │ │ ├── SubscriptionInvalidLevelException.java │ │ │ │ ├── SubscriptionNotFoundException.java │ │ │ │ ├── SubscriptionPaymentProcessor.java │ │ │ │ ├── SubscriptionPaymentRequiredException.java │ │ │ │ ├── SubscriptionPaymentRequiresActionException.java │ │ │ │ ├── SubscriptionPrice.java │ │ │ │ ├── SubscriptionProcessorConflictException.java │ │ │ │ ├── SubscriptionProcessorException.java │ │ │ │ ├── SubscriptionReceiptRequestedForOpenPaymentException.java │ │ │ │ └── SubscriptionStatus.java │ │ │ ├── telephony/ │ │ │ │ ├── CarrierData.java │ │ │ │ ├── CarrierDataException.java │ │ │ │ ├── CarrierDataProvider.java │ │ │ │ └── hlrlookup/ │ │ │ │ ├── HlrLookupCarrierDataProvider.java │ │ │ │ ├── HlrLookupRequest.java │ │ │ │ ├── HlrLookupResponse.java │ │ │ │ ├── HlrLookupResult.java │ │ │ │ ├── NetworkDetails.java │ │ │ │ └── TelephoneNumberRequest.java │ │ │ ├── util/ │ │ │ │ ├── AbstractPublicKeyDeserializer.java │ │ │ │ ├── AbstractPublicKeySerializer.java │ │ │ │ ├── AsyncTimerUtil.java │ │ │ │ ├── AttributeValues.java │ │ │ │ ├── BackupAuthCredentialAdapter.java │ │ │ │ ├── BoundedVirtualThreadFactory.java │ │ │ │ ├── BufferingInterceptor.java │ │ │ │ ├── ByteArrayAdapter.java │ │ │ │ ├── ByteArrayBase64UrlAdapter.java │ │ │ │ ├── ByteArrayBase64WithPaddingAdapter.java │ │ │ │ ├── CertificateUtil.java │ │ │ │ ├── ClosableEpoch.java │ │ │ │ ├── CompletableFutureUtil.java │ │ │ │ ├── Constants.java │ │ │ │ ├── Conversions.java │ │ │ │ ├── DeviceCapabilityAdapter.java │ │ │ │ ├── DeviceNameByteArrayAdapter.java │ │ │ │ ├── E164.java │ │ │ │ ├── ECPublicKeyAdapter.java │ │ │ │ ├── EncryptDeviceCreationTimestampUtil.java │ │ │ │ ├── EnumMapUtil.java │ │ │ │ ├── ExactlySize.java │ │ │ │ ├── ExactlySizeValidator.java │ │ │ │ ├── ExactlySizeValidatorForArraysOfByte.java │ │ │ │ ├── ExactlySizeValidatorForCollection.java │ │ │ │ ├── ExactlySizeValidatorForSecretBytes.java │ │ │ │ ├── ExactlySizeValidatorForString.java │ │ │ │ ├── ExceptionUtils.java │ │ │ │ ├── ExecutorUtil.java │ │ │ │ ├── Futures.java │ │ │ │ ├── GoogleApiUtil.java │ │ │ │ ├── HeaderUtils.java │ │ │ │ ├── HmacUtils.java │ │ │ │ ├── HostnameUtil.java │ │ │ │ ├── HttpServletRequestUtil.java │ │ │ │ ├── HttpUtils.java │ │ │ │ ├── IdentityKeyAdapter.java │ │ │ │ ├── ImpossiblePhoneNumberException.java │ │ │ │ ├── InetAddressRange.java │ │ │ │ ├── InstantAdapter.java │ │ │ │ ├── JmxDumper.java │ │ │ │ ├── KEMPublicKeyAdapter.java │ │ │ │ ├── LinkDeviceToken.java │ │ │ │ ├── ManagedAwsCrt.java │ │ │ │ ├── ManagedExecutors.java │ │ │ │ ├── NoStackTraceException.java │ │ │ │ ├── NoStackTraceRuntimeException.java │ │ │ │ ├── NonNormalizedPhoneNumberException.java │ │ │ │ ├── ObsoletePhoneNumberFormatException.java │ │ │ │ ├── Optionals.java │ │ │ │ ├── Pair.java │ │ │ │ ├── ProfileHelper.java │ │ │ │ ├── RedisClusterUtil.java │ │ │ │ ├── RegistrationIdValidator.java │ │ │ │ ├── ResilienceUtil.java │ │ │ │ ├── ServiceIdentifierAdapter.java │ │ │ │ ├── SystemMapper.java │ │ │ │ ├── ThrowingConsumer.java │ │ │ │ ├── ThrowingSupplier.java │ │ │ │ ├── UUIDUtil.java │ │ │ │ ├── UsernameHashZkProofVerifier.java │ │ │ │ ├── Util.java │ │ │ │ ├── ValidBase64URLString.java │ │ │ │ ├── ValidHexString.java │ │ │ │ ├── VirtualExecutorServiceProvider.java │ │ │ │ ├── VirtualThreadPinEventMonitor.java │ │ │ │ ├── WeightedRandomSelect.java │ │ │ │ ├── logging/ │ │ │ │ │ ├── LoggingUnhandledExceptionMapper.java │ │ │ │ │ ├── RequestLogEnabledFilter.java │ │ │ │ │ ├── RequestLogEnabledFilterFactory.java │ │ │ │ │ ├── RequestLogManager.java │ │ │ │ │ ├── UncaughtExceptionHandler.java │ │ │ │ │ ├── UnknownKeepaliveOptionFilter.java │ │ │ │ │ ├── UnknownKeepaliveOptionFilterFactory.java │ │ │ │ │ └── UriInfoUtil.java │ │ │ │ └── ua/ │ │ │ │ ├── ClientPlatform.java │ │ │ │ ├── UnrecognizedUserAgentException.java │ │ │ │ ├── UserAgent.java │ │ │ │ └── UserAgentUtil.java │ │ │ ├── websocket/ │ │ │ │ ├── AuthenticatedConnectListener.java │ │ │ │ ├── InvalidWebsocketAddressException.java │ │ │ │ ├── NoContextTakeoverPerMessageDeflateExtension.java │ │ │ │ ├── ProvisioningConnectListener.java │ │ │ │ ├── WebSocketAccountAuthenticator.java │ │ │ │ └── WebSocketConnection.java │ │ │ └── workers/ │ │ │ ├── AbstractCommandWithDependencies.java │ │ │ ├── AbstractSinglePassCrawlAccountsCommand.java │ │ │ ├── BackupMetricsCommand.java │ │ │ ├── BackupUsageRecalculationCommand.java │ │ │ ├── CertificateCommand.java │ │ │ ├── CheckDynamicConfigurationCommand.java │ │ │ ├── ClearIssuedReceiptRedemptionsCommand.java │ │ │ ├── CommandDependencies.java │ │ │ ├── DeleteUserCommand.java │ │ │ ├── DiscardPushNotificationExperimentSamplesCommand.java │ │ │ ├── FinishPushNotificationExperimentCommand.java │ │ │ ├── IdleDeviceNotificationSchedulerFactory.java │ │ │ ├── IdleWakeupEligibilityChecker.java │ │ │ ├── JobSchedulerFactory.java │ │ │ ├── MessagePersisterServiceCommand.java │ │ │ ├── NotifyIdleDevicesCommand.java │ │ │ ├── ProcessScheduledJobsServiceCommand.java │ │ │ ├── PushNotificationExperimentFactory.java │ │ │ ├── RegenerateSecondaryDynamoDbTableDataCommand.java │ │ │ ├── RemoveExpiredAccountsCommand.java │ │ │ ├── RemoveExpiredBackupsCommand.java │ │ │ ├── RemoveExpiredLinkedDevicesCommand.java │ │ │ ├── RemoveExpiredUsernameHoldsCommand.java │ │ │ ├── RemoveOrphanedPreKeyPagesCommand.java │ │ │ ├── ScheduledApnPushNotificationSenderServiceCommand.java │ │ │ ├── ServerVersionCommand.java │ │ │ ├── SetRequestLoggingEnabledTask.java │ │ │ ├── SetUserDiscoverabilityCommand.java │ │ │ ├── StartPushNotificationExperimentCommand.java │ │ │ ├── UnlinkDeviceCommand.java │ │ │ ├── UnlinkDevicesWithIdlePrimaryCommand.java │ │ │ └── ZkParamsCommand.java │ │ ├── java-templates/ │ │ │ └── org/ │ │ │ └── whispersystems/ │ │ │ └── textsecuregcm/ │ │ │ ├── WhisperServerVersion.java │ │ │ └── storage/ │ │ │ └── FoundationDbVersion.java │ │ ├── proto/ │ │ │ ├── CallQualitySurveyPubSub.proto │ │ │ ├── DisconnectionRequests.proto │ │ │ ├── DonationsPubsub.proto │ │ │ ├── KeyTransparencyService.proto │ │ │ ├── PubSubMessage.proto │ │ │ ├── RegistrationService.proto │ │ │ ├── TextSecure.proto │ │ │ ├── WebSocketConnectionEvent.proto │ │ │ └── org/ │ │ │ └── signal/ │ │ │ └── chat/ │ │ │ ├── README.md │ │ │ ├── account.proto │ │ │ ├── attachments.proto │ │ │ ├── backups.proto │ │ │ ├── call_quality.proto │ │ │ ├── calling.proto │ │ │ ├── common.proto │ │ │ ├── credentials.proto │ │ │ ├── device.proto │ │ │ ├── errors.proto │ │ │ ├── keys.proto │ │ │ ├── messages.proto │ │ │ ├── payments.proto │ │ │ ├── profile.proto │ │ │ ├── require.proto │ │ │ └── tag.proto │ │ └── resources/ │ │ ├── META-INF/ │ │ │ ├── services/ │ │ │ │ ├── io.dropwizard.jackson.Discoverable │ │ │ │ ├── io.dropwizard.logging.common.AppenderFactory │ │ │ │ ├── io.dropwizard.logging.common.filter.FilterFactory │ │ │ │ └── org.whispersystems.textsecuregcm.configuration.AwsCredentialsProviderFactory │ │ │ ├── validation/ │ │ │ │ └── constraints-custom.xml │ │ │ └── validation.xml │ │ ├── banner.txt │ │ ├── lua/ │ │ │ ├── apn/ │ │ │ │ └── schedule_background_notification.lua │ │ │ ├── get_delivery_attempt_count.lua │ │ │ ├── get_items.lua │ │ │ ├── insert_item.lua │ │ │ ├── insert_shared_multirecipient_message_data.lua │ │ │ ├── release_node_claim.lua │ │ │ ├── remove_item_by_guid.lua │ │ │ ├── remove_queue.lua │ │ │ ├── remove_recipient_view_from_mrm_data.lua │ │ │ ├── unlock_queue.lua │ │ │ └── validate_rate_limit.lua │ │ └── org/ │ │ ├── signal/ │ │ │ ├── badges/ │ │ │ │ ├── Badges.properties │ │ │ │ └── Badges_en.properties │ │ │ ├── bankmandate/ │ │ │ │ └── BankMandate.properties │ │ │ └── donations/ │ │ │ └── PayPal.properties │ │ └── whispersystems/ │ │ └── textsecuregcm/ │ │ ├── push/ │ │ │ └── apns-certificates.pem │ │ └── storage/ │ │ └── devicecheck/ │ │ └── apple_device_check.pem │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── whispersystems/ │ │ └── textsecuregcm/ │ │ ├── BufferingInterceptorIntegrationTest.java │ │ ├── CheckServiceConfigurations.java │ │ ├── LocalWhisperServerService.java │ │ ├── ProvisioningTimeoutIntegrationTest.java │ │ ├── WebsocketResourceProviderIntegrationTest.java │ │ ├── WhisperServerServiceTest.java │ │ ├── asn/ │ │ │ └── AsnInfoProviderImplTest.java │ │ ├── auth/ │ │ │ ├── AccountAuthenticatorTest.java │ │ │ ├── BasicAuthorizationHeaderTest.java │ │ │ ├── CertificateGeneratorTest.java │ │ │ ├── CloudflareTurnCredentialsManagerTest.java │ │ │ ├── DisconnectionRequestManagerTest.java │ │ │ ├── ExternalServiceCredentialsGeneratorTest.java │ │ │ ├── ExternalServiceCredentialsSelectorTest.java │ │ │ ├── IdlePrimaryDeviceAuthenticatedWebSocketUpgradeFilterTest.java │ │ │ ├── OptionalAccessTest.java │ │ │ ├── RedemptionRangeTest.java │ │ │ ├── RegistrationLockError.java │ │ │ ├── RegistrationLockVerificationManagerTest.java │ │ │ ├── SaltedTokenHashTest.java │ │ │ ├── StoredRegistrationLockTest.java │ │ │ ├── UnidentifiedAccessChecksumTest.java │ │ │ ├── UnidentifiedAccessUtilTest.java │ │ │ └── grpc/ │ │ │ ├── BasicAuthCallCredentials.java │ │ │ ├── MockAuthenticationInterceptor.java │ │ │ ├── ProhibitAuthenticationInterceptorTest.java │ │ │ └── RequireAuthenticationInterceptorTest.java │ │ ├── backup/ │ │ │ ├── BackupAuthManagerTest.java │ │ │ ├── BackupAuthTestUtil.java │ │ │ ├── BackupManagerTest.java │ │ │ ├── BackupsDbTest.java │ │ │ ├── Cdn3BackupCredentialGeneratorTest.java │ │ │ └── Cdn3RemoteStorageManagerTest.java │ │ ├── badges/ │ │ │ └── ConfiguredProfileBadgeConverterTest.java │ │ ├── captcha/ │ │ │ ├── CaptchaCheckerTest.java │ │ │ └── ShortCodeExpanderTest.java │ │ ├── configuration/ │ │ │ ├── LocalDynamoDbFactory.java │ │ │ ├── LocalFaultTolerantRedisClientFactory.java │ │ │ ├── LocalFaultTolerantRedisClusterFactory.java │ │ │ ├── StaticS3ObjectMonitorFactory.java │ │ │ ├── StubPaymentsServiceClientsFactory.java │ │ │ ├── StubPubSubPublisherFactory.java │ │ │ ├── StubRegistrationServiceClientFactory.java │ │ │ ├── dynamic/ │ │ │ │ └── DynamicConfigurationTest.java │ │ │ └── secrets/ │ │ │ └── SecretsTest.java │ │ ├── controllers/ │ │ │ ├── AbstractV1SubscriptionControllerTest.java │ │ │ ├── AccountControllerTest.java │ │ │ ├── AccountControllerV2Test.java │ │ │ ├── AccountIdentityResponseBuilderTest.java │ │ │ ├── ArchiveControllerTest.java │ │ │ ├── AttachmentControllerV4Test.java │ │ │ ├── CallLinkControllerTest.java │ │ │ ├── CallQualitySurveyControllerTest.java │ │ │ ├── CallRoutingControllerV2Test.java │ │ │ ├── CertificateControllerTest.java │ │ │ ├── ChallengeControllerTest.java │ │ │ ├── DeviceCheckControllerTest.java │ │ │ ├── DeviceControllerTest.java │ │ │ ├── DirectoryControllerV2Test.java │ │ │ ├── DonationControllerTest.java │ │ │ ├── KeyTransparencyControllerTest.java │ │ │ ├── KeysControllerTest.java │ │ │ ├── MessageControllerTest.java │ │ │ ├── OneTimeDonationControllerTest.java │ │ │ ├── PaymentsControllerTest.java │ │ │ ├── ProfileControllerTest.java │ │ │ ├── ProvisioningControllerTest.java │ │ │ ├── RegistrationControllerTest.java │ │ │ ├── RemoteConfigControllerTest.java │ │ │ ├── SecureStorageControllerTest.java │ │ │ ├── SecureValueRecovery2ControllerTest.java │ │ │ ├── StickerControllerTest.java │ │ │ ├── SubscriptionControllerTest.java │ │ │ └── VerificationControllerTest.java │ │ ├── currency/ │ │ │ ├── CoinGeckoClientTest.java │ │ │ ├── CurrencyConversionManagerTest.java │ │ │ └── FixerClientTest.java │ │ ├── entities/ │ │ │ ├── AnswerChallengeRequestTest.java │ │ │ ├── IncomingMessageListTest.java │ │ │ ├── OutgoingMessageEntityTest.java │ │ │ └── PreKeyTest.java │ │ ├── experiment/ │ │ │ ├── ExperimentEnrollmentManagerTest.java │ │ │ ├── ExperimentTest.java │ │ │ ├── IdleDevicePushNotificationExperimentTest.java │ │ │ └── PushNotificationExperimentSamplesTest.java │ │ ├── filters/ │ │ │ ├── ExternalRequestFilterTest.java │ │ │ ├── RemoteAddressFilterIntegrationTest.java │ │ │ ├── RemoteAddressFilterTest.java │ │ │ ├── RemoteDeprecationFilterTest.java │ │ │ ├── RequestStatisticsFilterTest.java │ │ │ ├── RestDeprecationFilterTest.java │ │ │ └── TimestampResponseFilterTest.java │ │ ├── grpc/ │ │ │ ├── AccountsAnonymousGrpcServiceTest.java │ │ │ ├── AccountsGrpcServiceTest.java │ │ │ ├── AttachmentsGrpcServiceTest.java │ │ │ ├── BackupsAnonymousGrpcServiceTest.java │ │ │ ├── BackupsGrpcServiceTest.java │ │ │ ├── CallQualitySurveyGrpcServiceTest.java │ │ │ ├── DevicesGrpcServiceTest.java │ │ │ ├── EchoServiceImpl.java │ │ │ ├── ErrorMappingInterceptorTest.java │ │ │ ├── ExternalServiceCredentialsAnonymousGrpcServiceTest.java │ │ │ ├── ExternalServiceCredentialsGrpcServiceTest.java │ │ │ ├── GrpcAllowListInterceptorTest.java │ │ │ ├── GrpcServerExtension.java │ │ │ ├── GrpcTestUtils.java │ │ │ ├── KeyTransparencyGrpcServiceTest.java │ │ │ ├── KeysAnonymousGrpcServiceTest.java │ │ │ ├── KeysGrpcServiceTest.java │ │ │ ├── MessagesAnonymousGrpcServiceTest.java │ │ │ ├── MessagesGrpcServiceTest.java │ │ │ ├── MetricServerInterceptorTest.java │ │ │ ├── MockRequestAttributesInterceptor.java │ │ │ ├── PaymentsGrpcServiceTest.java │ │ │ ├── ProfileAnonymousGrpcServiceTest.java │ │ │ ├── ProfileGrpcServiceTest.java │ │ │ ├── RequestAttributesInterceptorTest.java │ │ │ ├── RequestAttributesServiceImpl.java │ │ │ ├── RequestAttributesUtilTest.java │ │ │ ├── SimpleBaseGrpcTest.java │ │ │ └── ValidatingInterceptorTest.java │ │ ├── http/ │ │ │ └── FaultTolerantHttpClientTest.java │ │ ├── identity/ │ │ │ ├── AciServiceIdentifierTest.java │ │ │ ├── PniServiceIdentifierTest.java │ │ │ └── ServiceIdentifierTest.java │ │ ├── limits/ │ │ │ ├── CardinalityEstimatorTest.java │ │ │ ├── LeakyBucketRateLimiterTest.java │ │ │ ├── MessageDeliveryLoopMonitorTest.java │ │ │ ├── RateLimitChallengeManagerTest.java │ │ │ ├── RateLimitChallengeOptionManagerTest.java │ │ │ ├── RateLimitedByIpTest.java │ │ │ ├── RateLimiterConfigTest.java │ │ │ ├── RateLimitersLuaScriptTest.java │ │ │ └── RateLimitersTest.java │ │ ├── mappers/ │ │ │ ├── GrpcStatusRuntimeExceptionMapperTest.java │ │ │ └── IOExceptionMapperTest.java │ │ ├── metrics/ │ │ │ ├── CallQualitySurveyManagerTest.java │ │ │ ├── MessageMetricsTest.java │ │ │ ├── MetricsHttpChannelListenerIntegrationTest.java │ │ │ ├── MetricsHttpChannelListenerTest.java │ │ │ ├── MetricsRequestEventListenerTest.java │ │ │ ├── MetricsUtilTest.java │ │ │ ├── TlsCertificateExpirationUtilTest.java │ │ │ └── UserAgentTagUtilTest.java │ │ ├── push/ │ │ │ ├── APNSenderTest.java │ │ │ ├── FcmSenderTest.java │ │ │ ├── IdleDeviceNotificationSchedulerTest.java │ │ │ ├── MessageSenderTest.java │ │ │ ├── ProvisioningManagerTest.java │ │ │ ├── PushNotificationManagerTest.java │ │ │ ├── PushNotificationSchedulerTest.java │ │ │ └── RedisMessageAvailabilityManagerTest.java │ │ ├── redis/ │ │ │ ├── ClusterLuaScriptTest.java │ │ │ ├── FaultTolerantPubSubClusterConnectionTest.java │ │ │ ├── FaultTolerantRedisClientTest.java │ │ │ ├── FaultTolerantRedisClusterClientTest.java │ │ │ ├── LettuceShardCircuitBreakerTest.java │ │ │ ├── RedisClusterExtension.java │ │ │ └── RedisServerExtension.java │ │ ├── registration/ │ │ │ └── IdentityTokenCallCredentialsTest.java │ │ ├── s3/ │ │ │ ├── PolicySignerTest.java │ │ │ └── S3ObjectMonitorTest.java │ │ ├── scheduler/ │ │ │ ├── JobSchedulerTest.java │ │ │ └── SchedulingUtilTest.java │ │ ├── securestorage/ │ │ │ └── SecureStorageClientTest.java │ │ ├── securevaluerecovery/ │ │ │ └── SecureValueRecoveryClientTest.java │ │ ├── storage/ │ │ │ ├── AccountChangeValidatorTest.java │ │ │ ├── AccountCreationDeletionIntegrationTest.java │ │ │ ├── AccountLockManagerTest.java │ │ │ ├── AccountTest.java │ │ │ ├── AccountsManagerChangeNumberIntegrationTest.java │ │ │ ├── AccountsManagerConcurrentModificationIntegrationTest.java │ │ │ ├── AccountsManagerDeviceTransferIntegrationTest.java │ │ │ ├── AccountsManagerTest.java │ │ │ ├── AccountsManagerUsernameIntegrationTest.java │ │ │ ├── AccountsTest.java │ │ │ ├── AddRemoveDeviceIntegrationTest.java │ │ │ ├── ChangeNumberManagerTest.java │ │ │ ├── ClientReleaseManagerTest.java │ │ │ ├── ClientReleasesTest.java │ │ │ ├── DeviceTest.java │ │ │ ├── DynamicConfigurationManagerTest.java │ │ │ ├── DynamoDbExtension.java │ │ │ ├── DynamoDbExtensionSchema.java │ │ │ ├── EnvelopeUtilTest.java │ │ │ ├── FoundationDbClusterExtension.java │ │ │ ├── FoundationDbDatabaseLifecycleManager.java │ │ │ ├── IssuedReceiptsManagerTest.java │ │ │ ├── KEMPreKeyPageTest.java │ │ │ ├── KeysManagerTest.java │ │ │ ├── MessagePersisterIntegrationTest.java │ │ │ ├── MessagePersisterTest.java │ │ │ ├── MessagesCacheGetItemsScriptTest.java │ │ │ ├── MessagesCacheInsertScriptTest.java │ │ │ ├── MessagesCacheInsertSharedMultiRecipientPayloadAndViewsScriptTest.java │ │ │ ├── MessagesCacheRemoveByGuidScriptTest.java │ │ │ ├── MessagesCacheRemoveQueueScriptTest.java │ │ │ ├── MessagesCacheRemoveRecipientViewFromMrmDataScriptTest.java │ │ │ ├── MessagesCacheTest.java │ │ │ ├── MessagesDynamoDbTest.java │ │ │ ├── MessagesManagerTest.java │ │ │ ├── OnetimeDonationsManagerTest.java │ │ │ ├── PagedSingleUseKEMPreKeyStoreTest.java │ │ │ ├── PersistentTimerTest.java │ │ │ ├── PhoneNumberIdentifiersTest.java │ │ │ ├── ProfilesManagerTest.java │ │ │ ├── ProfilesTest.java │ │ │ ├── PushChallengeDynamoDbTest.java │ │ │ ├── RedeemedReceiptsManagerTest.java │ │ │ ├── RedisDynamoDbMessagePublisherTest.java │ │ │ ├── RedisDynamoDbMessageStreamTest.java │ │ │ ├── RegistrationRecoveryTest.java │ │ │ ├── RemoteConfigsManagerTest.java │ │ │ ├── RemoteConfigsTest.java │ │ │ ├── RepeatedUseECSignedPreKeyStoreTest.java │ │ │ ├── RepeatedUseKEMSignedPreKeyStoreTest.java │ │ │ ├── RepeatedUseSignedPreKeyStoreTest.java │ │ │ ├── ReportMessageDynamoDbTest.java │ │ │ ├── ReportMessageManagerTest.java │ │ │ ├── S3LocalStackExtension.java │ │ │ ├── SerializedExpireableJsonDynamoStoreTest.java │ │ │ ├── ServiceContainerFoundationDbDatabaseLifecycleManager.java │ │ │ ├── SingleUseECPreKeyStoreTest.java │ │ │ ├── SubscriptionsTest.java │ │ │ ├── TestcontainersFoundationDbDatabaseLifecycleManager.java │ │ │ ├── VerificationSessionsTest.java │ │ │ ├── devicecheck/ │ │ │ │ ├── AppleDeviceCheckManagerTest.java │ │ │ │ ├── AppleDeviceChecksTest.java │ │ │ │ └── DeviceCheckTestUtil.java │ │ │ └── foundationdb/ │ │ │ └── FoundationDbMessageStoreTest.java │ │ ├── subscriptions/ │ │ │ ├── AppleAppStoreClientTest.java │ │ │ ├── AppleAppStoreManagerTest.java │ │ │ ├── BraintreeGraphqlClientTest.java │ │ │ ├── BraintreeManagerTest.java │ │ │ ├── GooglePlayBillingManagerTest.java │ │ │ ├── PayPalDonationsTranslatorTest.java │ │ │ ├── ProcessorCustomerTest.java │ │ │ ├── StripeManagerTest.java │ │ │ └── SubscriptionCurrencyUtilTest.java │ │ ├── telephony/ │ │ │ └── hlrlookup/ │ │ │ └── HlrLookupCarrierDataProviderTest.java │ │ ├── tests/ │ │ │ └── util/ │ │ │ ├── AccountsHelper.java │ │ │ ├── AuthHelper.java │ │ │ ├── DevicesHelper.java │ │ │ ├── ExperimentHelper.java │ │ │ ├── FakeDynamicConfigurationManager.java │ │ │ ├── JsonHelpers.java │ │ │ ├── KeysHelper.java │ │ │ ├── MessageHelper.java │ │ │ ├── MockRedisFuture.java │ │ │ ├── MultiRecipientMessageHelper.java │ │ │ ├── ProfileTestHelper.java │ │ │ ├── RedisClusterHelper.java │ │ │ ├── RedisServerHelper.java │ │ │ ├── SynchronousExecutorService.java │ │ │ ├── TestPrincipal.java │ │ │ ├── TestRecipient.java │ │ │ └── TestWebsocketListener.java │ │ ├── util/ │ │ │ ├── AttributeValuesTest.java │ │ │ ├── BoundedVirtualThreadFactoryTest.java │ │ │ ├── ClosableEpochTest.java │ │ │ ├── CompletableFutureTestUtil.java │ │ │ ├── DeviceCapabilityAdapterTest.java │ │ │ ├── DeviceNameByteArrayAdapterTest.java │ │ │ ├── E164Test.java │ │ │ ├── ECPublicKeyAdapterTest.java │ │ │ ├── EncryptDeviceCreationTimestampUtilTest.java │ │ │ ├── ExecutorUtilTest.java │ │ │ ├── HttpServletRequestUtilIntegrationTest.java │ │ │ ├── HttpServletRequestUtilTest.java │ │ │ ├── HttpUtilsTest.java │ │ │ ├── IdentityKeyAdapterTest.java │ │ │ ├── InetAddressRangeTest.java │ │ │ ├── KEMPublicKeyAdapterTest.java │ │ │ ├── LocaleTest.java │ │ │ ├── MockUtils.java │ │ │ ├── MutableClock.java │ │ │ ├── RedisClusterUtilTest.java │ │ │ ├── SystemMapperTest.java │ │ │ ├── TestClock.java │ │ │ ├── TestRandomUtil.java │ │ │ ├── TestRemoteAddressFilterProvider.java │ │ │ ├── UtilTest.java │ │ │ ├── ValidNumberTest.java │ │ │ ├── VirtualExecutorServiceProviderTest.java │ │ │ ├── VirtualThreadPinEventMonitorTest.java │ │ │ ├── WeightedRandomSelectTest.java │ │ │ ├── jetty/ │ │ │ │ └── TestResource.java │ │ │ ├── logging/ │ │ │ │ ├── LoggingUnhandledExceptionMapperTest.java │ │ │ │ └── UriInfoUtilTest.java │ │ │ ├── redis/ │ │ │ │ ├── BaseRedisCommandsHandler.java │ │ │ │ ├── RedisCommandsHandler.java │ │ │ │ ├── RedisLuaScriptSandbox.java │ │ │ │ └── SimpleCacheCommandsHandler.java │ │ │ └── ua/ │ │ │ └── UserAgentUtilTest.java │ │ ├── websocket/ │ │ │ ├── AuthenticatedConnectListenerTest.java │ │ │ ├── ProvisioningConnectListenerTest.java │ │ │ ├── WebSocketAccountAuthenticatorTest.java │ │ │ ├── WebSocketConnectionIntegrationTest.java │ │ │ └── WebSocketConnectionTest.java │ │ └── workers/ │ │ ├── FinishPushNotificationExperimentCommandTest.java │ │ ├── IdleWakeupEligibilityCheckerTest.java │ │ ├── NotifyIdleDevicesCommandTest.java │ │ ├── ProcessScheduledJobsServiceCommandTest.java │ │ ├── RegenerateSecondaryDynamoDbTableDataCommandTest.java │ │ ├── RemoveExpiredAccountsCommandTest.java │ │ ├── RemoveExpiredLinkedDevicesCommandTest.java │ │ ├── RemoveExpiredUsernameHoldsCommandTest.java │ │ ├── RemoveOrphanedPreKeyPagesCommandTest.java │ │ ├── StartPushNotificationExperimentCommandTest.java │ │ └── UnlinkDevicesWithIdlePrimaryCommandTest.java │ ├── java-templates/ │ │ └── org/ │ │ └── whispersystems/ │ │ └── textsecuregcm/ │ │ └── util/ │ │ └── TestcontainersImages.java │ ├── proto/ │ │ ├── echo_service.proto │ │ ├── request_attributes_service.proto │ │ ├── tag_test.proto │ │ ├── test_tree_head.proto │ │ └── validation_test.proto │ └── resources/ │ ├── META-INF/ │ │ └── services/ │ │ ├── org.whispersystems.textsecuregcm.configuration.DynamicConfigurationManagerFactory │ │ ├── org.whispersystems.textsecuregcm.configuration.DynamoDbClientFactory │ │ ├── org.whispersystems.textsecuregcm.configuration.FaultTolerantRedisClientFactory │ │ ├── org.whispersystems.textsecuregcm.configuration.FaultTolerantRedisClusterFactory │ │ ├── org.whispersystems.textsecuregcm.configuration.PaymentsServiceClientsFactory │ │ ├── org.whispersystems.textsecuregcm.configuration.PubSubPublisherFactory │ │ ├── org.whispersystems.textsecuregcm.configuration.RegistrationServiceClientFactory │ │ └── org.whispersystems.textsecuregcm.configuration.S3ObjectMonitorFactory │ ├── config/ │ │ ├── test-secrets-bundle.yml │ │ └── test.yml │ ├── fixtures/ │ │ ├── current_message_duplicate_device.json │ │ ├── current_message_extra_device.json │ │ ├── current_message_multi_device.json │ │ ├── current_message_multi_device_not_urgent.json │ │ ├── current_message_multi_device_pni.json │ │ ├── current_message_null_message_in_list.json │ │ ├── current_message_registration_id.json │ │ ├── current_message_single_device.json │ │ ├── current_message_single_device_bad_type.json │ │ ├── current_message_single_device_not_urgent.json │ │ ├── current_message_single_device_server_receipt_type.json │ │ ├── current_message_sync.json │ │ ├── fixer.res.json │ │ ├── mismatched_registration_id.json │ │ ├── missing_device_response.json │ │ ├── missing_device_response2.json │ │ └── prekey_v2.json │ ├── logback-test.xml │ └── org/ │ └── whispersystems/ │ └── textsecuregcm/ │ ├── asn/ │ │ └── ip2asn-test.tsv │ └── storage/ │ ├── AccountsManagerTest-testJsonRoundTripSerialization.json │ └── devicecheck/ │ ├── apple-sample-attestation │ ├── webauthn4j-sample-assertion │ └── webauthn4j-sample-attestation └── websocket-resources/ ├── pom.xml └── src/ ├── main/ │ ├── java/ │ │ └── org/ │ │ └── whispersystems/ │ │ └── websocket/ │ │ ├── WebSocketClient.java │ │ ├── WebSocketResourceProvider.java │ │ ├── WebSocketResourceProviderFactory.java │ │ ├── WebSocketSecurityContext.java │ │ ├── WebsocketHeaders.java │ │ ├── auth/ │ │ │ ├── AuthenticatedWebSocketUpgradeFilter.java │ │ │ ├── InvalidCredentialsException.java │ │ │ ├── WebSocketAuthenticator.java │ │ │ └── WebsocketAuthValueFactoryProvider.java │ │ ├── configuration/ │ │ │ └── WebSocketConfiguration.java │ │ ├── logging/ │ │ │ ├── AsyncWebsocketEventAppenderFactory.java │ │ │ ├── WebsocketEvent.java │ │ │ ├── WebsocketRequestLog.java │ │ │ ├── WebsocketRequestLoggerFactory.java │ │ │ └── layout/ │ │ │ ├── WebsocketEventLayout.java │ │ │ ├── WebsocketEventLayoutFactory.java │ │ │ └── converters/ │ │ │ ├── ContentLengthConverter.java │ │ │ ├── DateConverter.java │ │ │ ├── EnsureLineSeparation.java │ │ │ ├── LineSeparatorConverter.java │ │ │ ├── NAConverter.java │ │ │ ├── RemoteHostConverter.java │ │ │ ├── RequestHeaderConverter.java │ │ │ ├── RequestUrlConverter.java │ │ │ ├── StatusCodeConverter.java │ │ │ └── WebSocketEventConverter.java │ │ ├── messages/ │ │ │ ├── InvalidMessageException.java │ │ │ ├── WebSocketMessage.java │ │ │ ├── WebSocketMessageFactory.java │ │ │ ├── WebSocketRequestMessage.java │ │ │ ├── WebSocketResponseMessage.java │ │ │ └── protobuf/ │ │ │ ├── ProtobufWebSocketMessage.java │ │ │ ├── ProtobufWebSocketMessageFactory.java │ │ │ ├── ProtobufWebSocketRequestMessage.java │ │ │ └── ProtobufWebSocketResponseMessage.java │ │ ├── session/ │ │ │ ├── ContextPrincipal.java │ │ │ ├── WebSocketSession.java │ │ │ ├── WebSocketSessionContainerRequestValueFactory.java │ │ │ ├── WebSocketSessionContext.java │ │ │ └── WebSocketSessionContextValueFactoryProvider.java │ │ └── setup/ │ │ ├── WebSocketConnectListener.java │ │ └── WebSocketEnvironment.java │ └── proto/ │ └── WebSocketProtocol.proto └── test/ └── java/ └── org/ └── whispersystems/ └── websocket/ ├── WebSocketResourceProviderFactoryTest.java ├── WebSocketResourceProviderTest.java └── logging/ └── WebSocketRequestLogTest.java