Skip to content

Conversation

@mpretty-cyro
Copy link
Collaborator

@mpretty-cyro mpretty-cyro commented Aug 8, 2025

  • Integrated refactored libSession networking
  • Fixed a couple of issues with the libSession build script
  • Fixed a crash which could occur when using the storage publisher functions

Note: This is based on #501

@mpretty-cyro mpretty-cyro self-assigned this Aug 8, 2025
@mpretty-cyro mpretty-cyro added bug Something isn't working enhancement New feature or request Jira This ticket is being tracked in Jira labels Aug 8, 2025
@mpretty-cyro mpretty-cyro force-pushed the feature/refactored-networking branch from 9f39a5c to f4f479b Compare August 8, 2025 03:22
• Started work on integrating refactored libSession networking
• Fixed a couple of issues with the libSession build script
• Fixed some duplicate content in Logging
• Fixed broken service node batch requests
• Fixed a crash which could occur when using the storage publisher functions
@mpretty-cyro mpretty-cyro force-pushed the feature/refactored-networking branch from 05ffd72 to cb6b5aa Compare August 20, 2025 00:24
• Added some convenience functions
• Removed the database requirement to get some AuthenticationMethods
• Cleaned up the AppDelegate setup process a bit
• Updated the LibSessionNetwork to be an actor (no more cache + singleton)
• Updated LibSessionNetwork to support async/await (also supports Combine, but that is now deprecated)
• Updated network observation to use async/await
• Refactored IP2Country to be an actor and use async/await
• Refactored the pollers to use async/await
• Refactored the getSessionId API call to use async/await
• Refactored the AppSetup and database migrations to be async/await
• Fixed a couple of build issues with the Job changes
• Fixed a crash which could happen on the loading screen when it fails to get the profile
• Fixed unit test build issues
• Removed the "TestContext" as while it works for Quick/Nimble, it wouldn't work for Swift Testing without needing `withTestContext` boilerplate around every test (now missing mocks will show their errors against the mock function instead of the calling test)
• Updated the `then{Return/Throw}` functions to throw so we can indicate failures during mocking without relying of the failureReporter
• Added the ability to select the "Router" which should be used for networking via the dev settings
• Updated to the latest CocoaLumberjack
• Updated console log to include source file and line
• Fixed an issue where the RetrieveDefaultOpenGroupRoomsJob would just retry endlessly (also removed the auto-retry as it's probably not worth it)
• Replaced most `data.write` usages with `dependencies[singleton: .fileManager].write` for unit test mocking
• Fixed a warning that would appear when running migration tests due to invalid mock image data trying to be loaded
• Fixed Onboarding unit tests
• Fixed LibSession-related tests
• Added a mechanism to ignore the type comparison when comparing against `any` values (for things like `MockEndpoint.any`)
• Fixed an issue where `any` values weren't being compared recursively (so it would fail to match if an argument of an argument was a wildcard)
• Updated MockNetwork to use Mockable
• Updated MockExtensionHelper to be Mockable
• Updated MockKeychain to be Mockable
• Updated MockImageDataManager to be Mockable
• Updated MockSnodeAPICache to be Mockable
• Updated feature storage in TestDependencies to be in memory instead of in user defaults (which may not be mocked)
• Simplified some request building logic
• Updated MockFileManager to use Mockable
• Updated MockOGMCache to use Mockable
• Updated MockJobRunner to use Mockable
• Updated MockLibSessionCache to use Mockable
• Removed old mocking system
• Fixed some tests that were broken but not caught by the old mocking system
• Fixed remaining failing tests
• Fixed a bug where requests without payloads were encode incorrectly
• Fixed a bug where the CurrentUserPoller wouldn't get released when destroyed
• Fixed an issue where pollers, the `RetrieveDefaultRoomsJob`, `SyncPushTokensJob, and the `ConfigurationSyncJob` would all continue their logic when the network instance was changed instead of waiting for it to have the "connected" status
…etworking

# Conflicts:
#	Session.xcodeproj/project.pbxproj
#	Session/Closed Groups/EditGroupViewModel.swift
#	Session/Home/New Conversation/NewMessageScreen.swift
#	Session/Meta/AppDelegate.swift
#	Session/Meta/Session+SNUIKit.swift
#	Session/Notifications/SyncPushTokensJob.swift
#	Session/Settings/DeveloperSettings/DeveloperSettingsViewModel.swift
#	Session/Settings/NukeDataModal.swift
#	Session/Settings/SessionNetworkScreen/SessionNetworkScreen+ViewModel.swift
#	SessionMessagingKit/Database/Migrations/_036_GroupsRebuildChanges.swift
#	SessionMessagingKit/Database/Models/ClosedGroup.swift
#	SessionMessagingKit/Jobs/ConfigurationSyncJob.swift
#	SessionMessagingKit/Jobs/ExpirationUpdateJob.swift
#	SessionMessagingKit/Jobs/GetExpirationJob.swift
#	SessionMessagingKit/Jobs/RetrieveDefaultOpenGroupRoomsJob.swift
#	SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+Groups.swift
#	SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+UnsendRequests.swift
#	SessionMessagingKit/Sending & Receiving/Message Handling/MessageSender+Groups.swift
#	SessionMessagingKit/Sending & Receiving/Notifications/Models/LegacyUnsubscribeRequest.swift
#	SessionMessagingKit/Sending & Receiving/Notifications/PushNotificationAPI.swift
#	SessionMessagingKit/Sending & Receiving/Pollers/CommunityPoller.swift
#	SessionMessagingKit/Sending & Receiving/Pollers/CurrentUserPoller.swift
#	SessionMessagingKit/Sending & Receiving/Pollers/GroupPoller.swift
#	SessionMessagingKit/Sending & Receiving/Pollers/PollerType.swift
#	SessionMessagingKit/Sending & Receiving/Pollers/SwarmPoller.swift
#	SessionMessagingKit/Utilities/Authentication+SessionMessagingKit.swift
#	SessionMessagingKitTests/Database/Models/MessageDeduplicationSpec.swift
#	SessionMessagingKitTests/Jobs/DisplayPictureDownloadJobSpec.swift
#	SessionMessagingKitTests/Jobs/MessageSendJobSpec.swift
#	SessionMessagingKitTests/Jobs/RetrieveDefaultOpenGroupRoomsJobSpec.swift
#	SessionMessagingKitTests/LibSession/LibSessionGroupInfoSpec.swift
#	SessionMessagingKitTests/LibSession/LibSessionGroupMembersSpec.swift
#	SessionMessagingKitTests/LibSession/LibSessionSpec.swift
#	SessionMessagingKitTests/Open Groups/Crypto/CryptoOpenGroupSpec.swift
#	SessionMessagingKitTests/Open Groups/OpenGroupManagerSpec.swift
#	SessionMessagingKitTests/Sending & Receiving/MessageReceiverGroupsSpec.swift
#	SessionMessagingKitTests/Sending & Receiving/MessageSenderGroupsSpec.swift
#	SessionMessagingKitTests/Sending & Receiving/MessageSenderSpec.swift
#	SessionMessagingKitTests/Sending & Receiving/Pollers/CommunityPollerSpec.swift
#	SessionMessagingKitTests/Utilities/ExtensionHelperSpec.swift
#	SessionMessagingKitTests/_TestUtilities/MockOGMCache.swift
#	SessionMessagingKitTests/_TestUtilities/MockPoller.swift
#	SessionMessagingKitTests/_TestUtilities/MockSwarmPoller.swift
#	SessionNetworkingKit/Crypto/Crypto+SessionNetworkingKit.swift
#	SessionNetworkingKit/Database/Models/SnodeReceivedMessageInfo.swift
#	SessionNetworkingKit/FileServer/Crypto/Crypto+FileServer.swift
#	SessionNetworkingKit/LibSession/LibSession+Networking.swift
#	SessionNetworkingKit/Models/AppVersionResponse.swift
#	SessionNetworkingKit/Models/DeleteAllMessagesRequest.swift
#	SessionNetworkingKit/Models/DeleteAllMessagesResponse.swift
#	SessionNetworkingKit/Models/DeleteMessagesRequest.swift
#	SessionNetworkingKit/Models/DeleteMessagesResponse.swift
#	SessionNetworkingKit/Models/GetExpiriesRequest.swift
#	SessionNetworkingKit/Models/GetExpiriesResponse.swift
#	SessionNetworkingKit/Models/GetMessagesRequest.swift
#	SessionNetworkingKit/Models/GetMessagesResponse.swift
#	SessionNetworkingKit/Models/GetNetworkTimestampResponse.swift
#	SessionNetworkingKit/Models/LegacyGetMessagesRequest.swift
#	SessionNetworkingKit/Models/LegacySendMessageRequest.swift
#	SessionNetworkingKit/Models/ONSResolveRequest.swift
#	SessionNetworkingKit/Models/ONSResolveResponse.swift
#	SessionNetworkingKit/Models/OxenDaemonRPCRequest.swift
#	SessionNetworkingKit/Models/RevokeSubaccountRequest.swift
#	SessionNetworkingKit/Models/RevokeSubaccountResponse.swift
#	SessionNetworkingKit/Models/SendMessageRequest.swift
#	SessionNetworkingKit/Models/SendMessageResponse.swift
#	SessionNetworkingKit/Models/SnodeAuthenticatedRequestBody.swift
#	SessionNetworkingKit/Models/SnodeMessage.swift
#	SessionNetworkingKit/Models/SnodeReceivedMessage.swift
#	SessionNetworkingKit/Models/SnodeRecursiveResponse.swift
#	SessionNetworkingKit/Models/SnodeResponse.swift
#	SessionNetworkingKit/Models/SnodeSwarmItem.swift
#	SessionNetworkingKit/Models/UnrevokeSubaccountRequest.swift
#	SessionNetworkingKit/Models/UnrevokeSubaccountResponse.swift
#	SessionNetworkingKit/Models/UpdateExpiryAllRequest.swift
#	SessionNetworkingKit/Models/UpdateExpiryAllResponse.swift
#	SessionNetworkingKit/Models/UpdateExpiryRequest.swift
#	SessionNetworkingKit/Models/UpdateExpiryResponse.swift
#	SessionNetworkingKit/PushNotification/Models/NotificationMetadata.swift
#	SessionNetworkingKit/PushNotification/Models/SubscribeRequest.swift
#	SessionNetworkingKit/PushNotification/Models/UnsubscribeRequest.swift
#	SessionNetworkingKit/PushNotification/Types/Request+PushNotificationAPI.swift
#	SessionNetworkingKit/SOGS/Models/SOGSMessage.swift
#	SessionNetworkingKit/SOGS/SOGSAPI.swift
#	SessionNetworkingKit/SOGS/SOGSEndpoint.swift
#	SessionNetworkingKit/SOGS/Types/HTTPHeader+SOGS.swift
#	SessionNetworkingKit/SOGS/Types/HTTPQueryParam+SOGS.swift
#	SessionNetworkingKit/SOGS/Types/Request+SOGS.swift
#	SessionNetworkingKit/SnodeAPI/ResponseInfo+SnodeAPI.swift
#	SessionNetworkingKit/SnodeAPI/SnodeAPI.swift
#	SessionNetworkingKit/SnodeAPI/SnodeAPIEndpoint.swift
#	SessionNetworkingKit/SnodeAPI/SnodeAPIError.swift
#	SessionNetworkingKit/SnodeAPI/SnodeAPINamespace.swift
#	SessionNetworkingKit/StorageServer/Database/SnodeReceivedMessageInfo.swift
#	SessionNetworkingKit/StorageServer/Models/DeleteAllBeforeRequest.swift
#	SessionNetworkingKit/StorageServer/Models/DeleteAllBeforeResponse.swift
#	SessionNetworkingKit/StorageServer/Models/DeleteAllMessagesRequest.swift
#	SessionNetworkingKit/StorageServer/Models/DeleteAllMessagesResponse.swift
#	SessionNetworkingKit/StorageServer/Models/DeleteMessagesRequest.swift
#	SessionNetworkingKit/StorageServer/Models/DeleteMessagesResponse.swift
#	SessionNetworkingKit/StorageServer/Models/GetExpiriesRequest.swift
#	SessionNetworkingKit/StorageServer/Models/GetExpiriesResponse.swift
#	SessionNetworkingKit/StorageServer/Models/GetMessagesRequest.swift
#	SessionNetworkingKit/StorageServer/Models/GetMessagesResponse.swift
#	SessionNetworkingKit/StorageServer/Models/GetNetworkTimestampResponse.swift
#	SessionNetworkingKit/StorageServer/Models/LegacyGetMessagesRequest.swift
#	SessionNetworkingKit/StorageServer/Models/LegacySendMessageRequest.swift
#	SessionNetworkingKit/StorageServer/Models/ONSResolveRequest.swift
#	SessionNetworkingKit/StorageServer/Models/ONSResolveResponse.swift
#	SessionNetworkingKit/StorageServer/Models/RevokeSubaccountRequest.swift
#	SessionNetworkingKit/StorageServer/Models/RevokeSubaccountResponse.swift
#	SessionNetworkingKit/StorageServer/Models/SendMessageRequest.swift
#	SessionNetworkingKit/StorageServer/Models/SendMessageResponse.swift
#	SessionNetworkingKit/StorageServer/Models/SnodeAuthenticatedRequestBody.swift
#	SessionNetworkingKit/StorageServer/Models/SnodeBatchRequest.swift
#	SessionNetworkingKit/StorageServer/Models/SnodeRecursiveResponse.swift
#	SessionNetworkingKit/StorageServer/Models/SnodeRequest.swift
#	SessionNetworkingKit/StorageServer/Models/SnodeResponse.swift
#	SessionNetworkingKit/StorageServer/Models/SnodeSwarmItem.swift
#	SessionNetworkingKit/StorageServer/Models/UnrevokeSubaccountRequest.swift
#	SessionNetworkingKit/StorageServer/Models/UnrevokeSubaccountResponse.swift
#	SessionNetworkingKit/StorageServer/Models/UpdateExpiryAllRequest.swift
#	SessionNetworkingKit/StorageServer/Models/UpdateExpiryAllResponse.swift
#	SessionNetworkingKit/StorageServer/Models/UpdateExpiryRequest.swift
#	SessionNetworkingKit/StorageServer/Models/UpdateExpiryResponse.swift
#	SessionNetworkingKit/StorageServer/SnodeAPIEndpoint.swift
#	SessionNetworkingKit/StorageServer/SnodeAPIError.swift
#	SessionNetworkingKit/StorageServer/SnodeAPINamespace.swift
#	SessionNetworkingKit/StorageServer/Types/Request+SnodeAPI.swift
#	SessionNetworkingKit/StorageServer/Types/ResponseInfo+SnodeAPI.swift
#	SessionNetworkingKit/StorageServer/Types/SnodeMessage.swift
#	SessionNetworkingKit/StorageServer/Types/SnodeReceivedMessage.swift
#	SessionNetworkingKit/Types/Network.swift
#	SessionNetworkingKit/Types/PreparedRequest+Sending.swift
#	SessionNetworkingKit/Types/SwarmDrainBehaviour.swift
#	SessionNetworkingKit/Types/UpdatableTimestamp.swift
#	SessionNetworkingKitTests/Models/SnodeRequestSpec.swift
#	SessionNetworkingKitTests/SOGS/Models/SOGSMessageSpec.swift
#	SessionNetworkingKitTests/SOGS/SOGSAPISpec.swift
#	SessionNetworkingKitTests/SOGS/Types/SOGSEndpointSpec.swift
#	SessionNetworkingKitTests/_TestUtilities/MockNetwork.swift
#	SessionNetworkingKitTests/_TestUtilities/MockSnodeAPICache.swift
#	SessionShareExtension/ShareNavController.swift
#	SessionShareExtension/ThreadPickerVC.swift
#	SessionSnodeKit/Crypto/Crypto+SessionSnodeKit.swift
#	SessionSnodeKit/Database/Models/SnodeReceivedMessageInfo.swift
#	SessionSnodeKit/Models/DeleteAllMessagesRequest.swift
#	SessionSnodeKit/Models/DeleteAllMessagesResponse.swift
#	SessionSnodeKit/Models/DeleteMessagesRequest.swift
#	SessionSnodeKit/Models/DeleteMessagesResponse.swift
#	SessionSnodeKit/Models/GetExpiriesRequest.swift
#	SessionSnodeKit/Models/GetExpiriesResponse.swift
#	SessionSnodeKit/Models/GetMessagesRequest.swift
#	SessionSnodeKit/Models/GetMessagesResponse.swift
#	SessionSnodeKit/Models/GetNetworkTimestampResponse.swift
#	SessionSnodeKit/Models/LegacyGetMessagesRequest.swift
#	SessionSnodeKit/Models/LegacySendMessageRequest.swift
#	SessionSnodeKit/Models/ONSResolveRequest.swift
#	SessionSnodeKit/Models/ONSResolveResponse.swift
#	SessionSnodeKit/Models/RevokeSubaccountRequest.swift
#	SessionSnodeKit/Models/RevokeSubaccountResponse.swift
#	SessionSnodeKit/Models/SendMessageRequest.swift
#	SessionSnodeKit/Models/SendMessageResponse.swift
#	SessionSnodeKit/Models/SnodeAuthenticatedRequestBody.swift
#	SessionSnodeKit/Models/SnodeMessage.swift
#	SessionSnodeKit/Models/SnodeReceivedMessage.swift
#	SessionSnodeKit/Models/SnodeRecursiveResponse.swift
#	SessionSnodeKit/Models/SnodeResponse.swift
#	SessionSnodeKit/Models/SnodeSwarmItem.swift
#	SessionSnodeKit/Models/UnrevokeSubaccountRequest.swift
#	SessionSnodeKit/Models/UnrevokeSubaccountResponse.swift
#	SessionSnodeKit/Models/UpdateExpiryAllRequest.swift
#	SessionSnodeKit/Models/UpdateExpiryAllResponse.swift
#	SessionSnodeKit/Models/UpdateExpiryRequest.swift
#	SessionSnodeKit/Models/UpdateExpiryResponse.swift
#	SessionSnodeKit/SnodeAPI/ResponseInfo+SnodeAPI.swift
#	SessionSnodeKit/SnodeAPI/SnodeAPIEndpoint.swift
#	SessionSnodeKit/SnodeAPI/SnodeAPIError.swift
#	SessionSnodeKit/SnodeAPI/SnodeAPINamespace.swift
#	SessionTests/Conversations/Settings/ThreadDisappearingMessagesViewModelSpec.swift
#	SessionTests/Conversations/Settings/ThreadNotificationSettingsViewModelSpec.swift
#	SessionTests/Conversations/Settings/ThreadSettingsViewModelSpec.swift
#	SessionTests/Database/DatabaseSpec.swift
#	SessionTests/Onboarding/OnboardingSpec.swift
#	SessionTests/Settings/NotificationContentViewModelSpec.swift
#	SessionUtilitiesKit/Database/Storage.swift
#	SessionUtilitiesKit/General/Logging.swift
#	SessionUtilitiesKit/LibSession/LibSession.swift
#	SessionUtilitiesKitTests/Database/Models/IdentitySpec.swift
#	SessionUtilitiesKitTests/JobRunner/JobRunnerSpec.swift
#	SignalUtilitiesKit/Utilities/AppSetup.swift
#	_SharedTestUtilities/SynchronousStorage.swift
• Refactored the OGMCache to be part of the OpenGroupManager (which is also now an actor)
• Fixed a broken test
• Removed the StorageServerCache
• Cleaned up DSL for getting the network offset timestamp
• Updated the ExpirationUpdateJob to use async/await internally
• Enabled "Direct" mode for routing in dev settings
• Fixed a bug where the disappearing messages job would run in an excessive loop due to an incorrect value being used
…etworking

# Conflicts:
#	Session.xcodeproj/project.pbxproj
#	Session/Settings/DeveloperSettings/DeveloperSettingsViewModel+Testing.swift
#	Session/Settings/DeveloperSettings/DeveloperSettingsViewModel.swift
#	SessionMessagingKit/Jobs/RetrieveDefaultOpenGroupRoomsJob.swift
#	SessionMessagingKit/Sending & Receiving/Errors/MessageReceiverError.swift
#	SessionMessagingKit/Utilities/ExtensionHelper.swift
#	SessionMessagingKitTests/Jobs/RetrieveDefaultOpenGroupRoomsJobSpec.swift
#	SessionMessagingKitTests/_TestUtilities/ArgumentDescribing+SMK.swift
#	SessionMessagingKitTests/_TestUtilities/CustomArgSummaryDescribable+SMK.swift
#	SessionMessagingKitTests/_TestUtilities/CustomArgSummaryDescribable+SessionMessagingKit.swift
#	SessionNetworkingKit/LibSession/LibSession+Networking.swift
#	SessionUtilitiesKit/Observations/ObservationManager.swift
• Added proper async dependency notification functions
• Added the `disableDeveloperMode` functionality to the `DeveloperSettingsNetworkViewModel`
• Refactored the RetrieveDefaultOpenGroupRoomsJob to use async/await internally
• Removed the auth that was incorrectly re-added to the default SOGS retrieval
• Fixed failing unit tests
• Tweaked the code to avoid applying the "router" change until applying other changes when modifying network config
• Tweaked the code to unsubscribe from current PNs when changing the environment (previously the requests were very likely to just immediately fail due to the network being swapped)
• Fixed some failing tests
• Fixed some cases where we might fail to unsubscribe from group PNs
• Fixed a multithreading crash when changing the network configuration (would affect other code)
…etworking

# Conflicts:
#	Session.xcodeproj/project.pbxproj
#	SessionNetworkingKit/PushNotification/PushNotificationAPI.swift
• Disabled dependency observation in iOS 15 to avoid version-specific crashes
• Cleaned up some logic in the async/await tools
…etworking

# Conflicts:
#	Session.xcodeproj/project.pbxproj
#	Session/Meta/SessionApp.swift
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working enhancement New feature or request Jira This ticket is being tracked in Jira

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant