libQuotient
A Qt library for building matrix clients
Quotient Namespace Reference

Namespaces

 EventContent
 
 EventStatus
 
 FileMetadataMap
 
 LoginFlows
 Predefined login flows.
 

Classes

class  AccountRegistry
 
struct  ThirdPartyLocation
 
struct  JsonObjectConverter< ThirdPartyLocation >
 
struct  FieldType
 Definition of valid values for a field. More...
 
struct  JsonObjectConverter< FieldType >
 
struct  ProtocolInstance
 
struct  JsonObjectConverter< ProtocolInstance >
 
struct  ThirdPartyProtocol
 
struct  JsonObjectConverter< ThirdPartyProtocol >
 
struct  ThirdPartyUser
 
struct  JsonObjectConverter< ThirdPartyUser >
 
class  Avatar
 
class  Connection
 
class  ConnectionData
 
struct  JsonObjectConverter
 
struct  JsonObjectUnpacker
 
struct  JsonConverter
 The switchboard for extra conversion algorithms behind from/toJson. More...
 
struct  JsonConverter< QUrl >
 
struct  JsonConverter< QVariant >
 
struct  JsonConverter< std::variant< QString, T > >
 
struct  JsonConverter< std::optional< T > >
 
struct  JsonArrayConverter
 
struct  JsonConverter< std::vector< T > >
 
struct  JsonConverter< std::array< T, N > >
 
struct  JsonConverter< QList< T > >
 
struct  JsonConverter< QStringList >
 
struct  JsonObjectConverter< QSet< QString > >
 
struct  HashMapFromJson
 
struct  JsonObjectConverter< std::unordered_map< QString, T, HashT > >
 
struct  JsonObjectConverter< QHash< QString, T > >
 
class  SetAccountDataJob
 Set some account data for the user. More...
 
class  GetAccountDataJob
 Get some account data for the user. More...
 
class  SetAccountDataPerRoomJob
 Set some account data for the user that is specific to a room. More...
 
class  GetAccountDataPerRoomJob
 Get some account data for the user that is specific to a room. More...
 
class  GetWhoIsJob
 Gets information about a particular user. More...
 
struct  JsonObjectConverter< GetWhoIsJob::ConnectionInfo >
 
struct  JsonObjectConverter< GetWhoIsJob::SessionInfo >
 
struct  JsonObjectConverter< GetWhoIsJob::DeviceInfo >
 
class  GetAccount3PIDsJob
 Gets a list of a user's third-party identifiers. More...
 
struct  JsonObjectConverter< GetAccount3PIDsJob::ThirdPartyIdentifier >
 
class  Post3PIDsJob
 Adds contact information to the user's account. More...
 
struct  JsonObjectConverter< Post3PIDsJob::ThreePidCredentials >
 
class  Add3PIDJob
 Adds contact information to the user's account. More...
 
class  Bind3PIDJob
 Binds a 3PID to the user's account through an Identity Service. More...
 
class  Delete3pidFromAccountJob
 Deletes a third-party identifier from the user's account. More...
 
class  Unbind3pidFromAccountJob
 Removes a user's third-party identifier from an identity server. More...
 
class  RequestTokenTo3PIDEmailJob
 Begins the validation process for an email address for association with the user's account. More...
 
class  RequestTokenTo3PIDMSISDNJob
 Begins the validation process for a phone number for association with the user's account. More...
 
class  UpdateAppserviceRoomDirectoryVisibilityJob
 Updates a room's visibility in the application service's room directory. More...
 
class  BanJob
 Ban a user in the room. More...
 
class  UnbanJob
 Unban a user from the room. More...
 
class  GetCapabilitiesJob
 Gets information about the server's capabilities. More...
 
struct  JsonObjectConverter< GetCapabilitiesJob::ChangePasswordCapability >
 
struct  JsonObjectConverter< GetCapabilitiesJob::RoomVersionsCapability >
 
struct  JsonObjectConverter< GetCapabilitiesJob::Capabilities >
 
class  UploadContentJob
 Upload some content to the content repository. More...
 
class  UploadContentToMXCJob
 Upload content to an mxc:// URI that was created earlier. More...
 
class  CreateContentJob
 Create a new mxc:// URI without uploading the content. More...
 
class  GetContentJob
 Download content from the content repository. More...
 
class  GetContentOverrideNameJob
 Download content from the content repository overriding the file name. More...
 
class  GetContentThumbnailJob
 Download a thumbnail of content from the content repository. More...
 
class  GetUrlPreviewJob
 Get information about a URL for a client. More...
 
class  GetConfigJob
 Get the configuration for the content repository. More...
 
class  CreateRoomJob
 Create a new room. More...
 
struct  JsonObjectConverter< CreateRoomJob::Invite3pid >
 
struct  JsonObjectConverter< CreateRoomJob::StateEvent >
 
class  UploadCrossSigningKeysJob
 Upload cross-signing keys. More...
 
class  UploadCrossSigningSignaturesJob
 Upload cross-signing signatures. More...
 
struct  AuthenticationData
 Used by clients to submit authentication information to the interactive-authentication API. More...
 
struct  JsonObjectConverter< AuthenticationData >
 
struct  Device
 A client device. More...
 
struct  JsonObjectConverter< Device >
 
struct  CrossSigningKey
 Cross signing key. More...
 
struct  JsonObjectConverter< CrossSigningKey >
 
struct  DeviceKeys
 Device identity keys. More...
 
struct  JsonObjectConverter< DeviceKeys >
 
struct  EventFilter
 
struct  JsonObjectConverter< EventFilter >
 
struct  KeyBackupData
 The key data. More...
 
struct  JsonObjectConverter< KeyBackupData >
 
struct  OpenIdCredentials
 
struct  JsonObjectConverter< OpenIdCredentials >
 
struct  PublicRoomsChunk
 
struct  JsonObjectConverter< PublicRoomsChunk >
 
struct  PushCondition
 
struct  JsonObjectConverter< PushCondition >
 
struct  PushRule
 
struct  JsonObjectConverter< PushRule >
 
struct  PushRuleset
 
struct  JsonObjectConverter< PushRuleset >
 
struct  EmailValidationData
 
struct  JsonObjectConverter< EmailValidationData >
 
struct  MsisdnValidationData
 
struct  JsonObjectConverter< MsisdnValidationData >
 
struct  RequestTokenResponse
 
struct  JsonObjectConverter< RequestTokenResponse >
 
struct  RoomEventFilter
 
struct  JsonObjectConverter< RoomEventFilter >
 
struct  RoomKeyBackup
 The backed up keys for a room. More...
 
struct  JsonObjectConverter< RoomKeyBackup >
 
struct  RoomFilter
 Filters to be applied to room data. More...
 
struct  JsonObjectConverter< RoomFilter >
 
struct  Filter
 
struct  JsonObjectConverter< Filter >
 
struct  ThirdPartySigned
 
struct  JsonObjectConverter< ThirdPartySigned >
 
struct  UserIdentifier
 Identification information for a user. More...
 
struct  JsonObjectConverter< UserIdentifier >
 
struct  DiscoveryInformation
 
struct  JsonObjectConverter< DiscoveryInformation >
 
struct  HomeserverInformation
 Used by clients to discover homeserver information. More...
 
struct  JsonObjectConverter< HomeserverInformation >
 
struct  IdentityServerInformation
 Used by clients to discover identity server information. More...
 
struct  JsonObjectConverter< IdentityServerInformation >
 
class  GetDevicesJob
 List registered devices for the current user. More...
 
class  GetDeviceJob
 Get a single device. More...
 
class  UpdateDeviceJob
 Update a device. More...
 
class  DeleteDeviceJob
 Delete a device. More...
 
class  DeleteDevicesJob
 Bulk deletion of devices. More...
 
class  SetRoomAliasJob
 Create a new mapping from room alias to room ID. More...
 
class  GetRoomIdByAliasJob
 Get the room ID corresponding to this room alias. More...
 
class  DeleteRoomAliasJob
 Remove a mapping of room alias to room ID. More...
 
class  GetLocalAliasesJob
 Get a list of local aliases on a given room. More...
 
class  GetEventContextJob
 Get events and state around the specified event. More...
 
class  DefineFilterJob
 Upload a new filter. More...
 
class  GetFilterJob
 Download a filter. More...
 
class  InviteUserJob
 Invite a user to participate in a particular room. More...
 
class  JoinRoomByIdJob
 Start the requesting user participating in a particular room. More...
 
class  JoinRoomJob
 Start the requesting user participating in a particular room. More...
 
class  PostRoomKeysVersionJob
 Create a new backup. More...
 
class  GetRoomKeysVersionCurrentJob
 Get information about the latest backup version. More...
 
class  GetRoomKeysVersionJob
 Get information about an existing backup. More...
 
class  PutRoomKeysVersionJob
 Update information about an existing backup. More...
 
class  DeleteRoomKeysVersionJob
 Delete an existing key backup. More...
 
class  PutRoomKeyBySessionIdJob
 Store a key in the backup. More...
 
class  GetRoomKeyBySessionIdJob
 Retrieve a key from the backup. More...
 
class  DeleteRoomKeyBySessionIdJob
 Delete a key from the backup. More...
 
class  PutRoomKeysByRoomIdJob
 Store several keys in the backup for a given room. More...
 
class  GetRoomKeysByRoomIdJob
 Retrieve the keys from the backup for a given room. More...
 
class  DeleteRoomKeysByRoomIdJob
 Delete the keys from the backup for a given room. More...
 
class  PutRoomKeysJob
 Store several keys in the backup. More...
 
class  GetRoomKeysJob
 Retrieve the keys from the backup. More...
 
class  DeleteRoomKeysJob
 Delete the keys from the backup. More...
 
class  UploadKeysJob
 Upload end-to-end encryption keys. More...
 
class  QueryKeysJob
 Download device identity keys. More...
 
struct  JsonObjectConverter< QueryKeysJob::UnsignedDeviceInfo >
 
struct  JsonObjectConverter< QueryKeysJob::DeviceInformation >
 
class  ClaimKeysJob
 Claim one-time encryption keys. More...
 
class  GetKeysChangesJob
 Query users with recent device key updates. More...
 
class  KickJob
 Kick a user from the room. More...
 
class  KnockRoomJob
 Knock on a room, requesting permission to join. More...
 
class  LeaveRoomJob
 Stop the requesting user participating in a particular room. More...
 
class  ForgetRoomJob
 Stop the requesting user remembering about a particular room. More...
 
class  GetJoinedRoomsJob
 Lists the user's current rooms. More...
 
class  GetRoomVisibilityOnDirectoryJob
 Gets the visibility of a room in the directory. More...
 
class  SetRoomVisibilityOnDirectoryJob
 Sets the visibility of a room in the room directory. More...
 
class  GetPublicRoomsJob
 Lists the public rooms on the server. More...
 
class  QueryPublicRoomsJob
 Lists the public rooms on the server with optional filter. More...
 
struct  JsonObjectConverter< QueryPublicRoomsJob::Filter >
 
class  GetLoginFlowsJob
 Get the supported login types to authenticate users. More...
 
struct  JsonObjectConverter< GetLoginFlowsJob::LoginFlow >
 
class  LoginJob
 Authenticates the user. More...
 
class  GenerateLoginTokenJob
 Optional endpoint to generate a single-use, time-limited, m.login.token token. More...
 
class  LogoutJob
 Invalidates a user access token. More...
 
class  LogoutAllJob
 Invalidates all access tokens for a user. More...
 
class  GetRoomEventsJob
 Get a list of events for this room. More...
 
class  GetNotificationsJob
 Gets a list of events that the user has been notified about. More...
 
struct  JsonObjectConverter< GetNotificationsJob::Notification >
 
class  RequestOpenIdTokenJob
 Get an OpenID token object to verify the requester's identity. More...
 
class  PeekEventsJob
 Listen on the event stream of a particular room. More...
 
class  SetPresenceJob
 Update this user's presence state. More...
 
class  GetPresenceJob
 Get this user's presence state. More...
 
class  SetDisplayNameJob
 Set the user's display name. More...
 
class  GetDisplayNameJob
 Get the user's display name. More...
 
class  SetAvatarUrlJob
 Set the user's avatar URL. More...
 
class  GetAvatarUrlJob
 Get the user's avatar URL. More...
 
class  GetUserProfileJob
 Get this user's profile information. More...
 
class  GetPushersJob
 Gets the current pushers for the authenticated user. More...
 
struct  JsonObjectConverter< GetPushersJob::PusherData >
 
struct  JsonObjectConverter< GetPushersJob::Pusher >
 
class  PostPusherJob
 Modify a pusher for this user on the homeserver. More...
 
struct  JsonObjectConverter< PostPusherJob::PusherData >
 
class  GetPushRulesJob
 Retrieve all push rulesets. More...
 
class  GetPushRuleJob
 Retrieve a push rule. More...
 
class  DeletePushRuleJob
 Delete a push rule. More...
 
class  SetPushRuleJob
 Add or change a push rule. More...
 
class  IsPushRuleEnabledJob
 Get whether a push rule is enabled. More...
 
class  SetPushRuleEnabledJob
 Enable or disable a push rule. More...
 
class  GetPushRuleActionsJob
 The actions for a push rule. More...
 
class  SetPushRuleActionsJob
 Set the actions for a push rule. More...
 
class  SetReadMarkerJob
 Set the position of the read marker for a room. More...
 
class  PostReceiptJob
 Send a receipt for the given event ID. More...
 
class  RedactEventJob
 Strips all non-integrity-critical information out of an event. More...
 
class  RefreshJob
 Refresh an access token. More...
 
class  RegisterJob
 Register for an account on this homeserver. More...
 
class  RequestTokenToRegisterEmailJob
 Begins the validation process for an email to be used during registration. More...
 
class  RequestTokenToRegisterMSISDNJob
 Requests a validation token be sent to the given phone number for the purpose of registering an account. More...
 
class  ChangePasswordJob
 Changes a user's password. More...
 
class  RequestTokenToResetPasswordEmailJob
 Requests a validation token be sent to the given email address for the purpose of resetting a user's password. More...
 
class  RequestTokenToResetPasswordMSISDNJob
 Requests a validation token be sent to the given phone number for the purpose of resetting a user's password. More...
 
class  DeactivateAccountJob
 Deactivate a user's account. More...
 
class  CheckUsernameAvailabilityJob
 Checks to see if a username is available on the server. More...
 
class  RegistrationTokenValidityJob
 Query if a given registration token is still valid. More...
 
class  GetRelatingEventsJob
 Get the child events for a given parent event. More...
 
class  GetRelatingEventsWithRelTypeJob
 Get the child events for a given parent event, with a given relType. More...
 
class  GetRelatingEventsWithRelTypeAndEventTypeJob
 Get the child events for a given parent event, with a given relType and eventType. More...
 
class  ReportContentJob
 Report an event in a joined room as inappropriate. More...
 
class  GetEventByTimestampJob
 Get the closest event ID to the given timestamp. More...
 
class  SendMessageJob
 Send a message event to the given room. More...
 
class  SetRoomStateWithKeyJob
 Send a state event to the given room. More...
 
class  UpgradeRoomJob
 Upgrades a room to a new room version. More...
 
class  GetOneRoomEventJob
 Get a single event by event ID. More...
 
class  GetRoomStateWithKeyJob
 Get the state identified by the type and key. More...
 
class  GetRoomStateJob
 Get all state events in the current state of a room. More...
 
class  GetMembersByRoomJob
 Get the m.room.member events for the room. More...
 
class  GetJoinedMembersByRoomJob
 Gets the list of currently joined users and their profile data. More...
 
struct  JsonObjectConverter< GetJoinedMembersByRoomJob::RoomMember >
 
class  SearchJob
 Perform a server-side search. More...
 
struct  JsonObjectConverter< SearchJob::IncludeEventContext >
 
struct  JsonObjectConverter< SearchJob::Group >
 
struct  JsonObjectConverter< SearchJob::Groupings >
 
struct  JsonObjectConverter< SearchJob::RoomEventsCriteria >
 
struct  JsonObjectConverter< SearchJob::Categories >
 
struct  JsonObjectConverter< SearchJob::UserProfile >
 
struct  JsonObjectConverter< SearchJob::EventContext >
 
struct  JsonObjectConverter< SearchJob::Result >
 
struct  JsonObjectConverter< SearchJob::GroupValue >
 
struct  JsonObjectConverter< SearchJob::ResultRoomEvents >
 
struct  JsonObjectConverter< SearchJob::ResultCategories >
 
class  GetSpaceHierarchyJob
 Retrieve a portion of a space tree. More...
 
struct  JsonObjectConverter< GetSpaceHierarchyJob::SpaceHierarchyRoomsChunk >
 
class  RedirectToSSOJob
 Redirect the user's browser to the SSO interface. More...
 
class  RedirectToIdPJob
 Redirect the user's browser to the SSO interface for an IdP. More...
 
class  GetWellknownSupportJob
 Gets homeserver contacts and support details. More...
 
struct  JsonObjectConverter< GetWellknownSupportJob::Contact >
 
class  GetRoomTagsJob
 List the tags for a room. More...
 
struct  JsonObjectConverter< GetRoomTagsJob::Tag >
 
class  SetRoomTagJob
 Add a tag to a room. More...
 
class  DeleteRoomTagJob
 Remove a tag from the room. More...
 
class  GetProtocolsJob
 Retrieve metadata about all protocols that a homeserver supports. More...
 
class  GetProtocolMetadataJob
 Retrieve metadata about a specific protocol that the homeserver supports. More...
 
class  QueryLocationByProtocolJob
 Retrieve Matrix-side portals rooms leading to a third-party location. More...
 
class  QueryUserByProtocolJob
 Retrieve the Matrix User ID of a corresponding third-party user. More...
 
class  QueryLocationByAliasJob
 Reverse-lookup third-party locations given a Matrix room alias. More...
 
class  QueryUserByIDJob
 Reverse-lookup third-party users given a Matrix User ID. More...
 
class  InviteBy3PIDJob
 Invite a user to participate in a particular room. More...
 
class  GetThreadRootsJob
 Fetches a list of the threads in a room. More...
 
class  SendToDeviceJob
 Send an event to a given set of devices. More...
 
class  SetTypingJob
 Informs the server that the user has started or stopped typing. More...
 
class  SearchUserDirectoryJob
 Searches the user directory. More...
 
struct  JsonObjectConverter< SearchUserDirectoryJob::User >
 
class  GetVersionsJob
 Gets the versions of the specification supported by the server. More...
 
class  GetTurnServerJob
 Obtain TURN server credentials. More...
 
class  GetWellknownJob
 Gets Matrix server discovery information about the domain. More...
 
class  GetTokenOwnerJob
 Gets information about the owner of an access token. More...
 
class  Database
 
struct  HkdfKeys
 
struct  Curve25519Encrypted
 
class  FixedBufferBase
 Non-template base for owning byte span classes. More...
 
class  FixedBuffer
 
class  PicklingKey
 
struct  IdentityKeys
 
struct  UnsignedOneTimeKeys
 Struct representing the one-time keys. More...
 
class  SignedOneTimeKey
 
class  QOlmAccount
 
class  QOlmInboundGroupSession
 
class  QOlmMessage
 A wrapper around an olm encrypted message. More...
 
class  QOlmOutboundGroupSession
 
class  QOlmSession
 Either an outbound or inbound session for secure communication. More...
 
class  QOlmUtility
 
class  SSSSHandler
 
class  EventItemBase
 
class  TimelineItem
 
class  PendingEventItem
 
struct  TagRecord
 
struct  JsonObjectConverter< TagRecord >
 
class  CallEvent
 
class  EventTemplate< EventT, CallEvent >
 
class  EventTemplate< EventT, CallEvent, ContentT >
 
class  CallInviteEvent
 
class  CallHangupEvent
 
class  DirectChatEvent
 
class  EncryptedEvent
 
class  DummyEvent
 
class  EncryptionEventContent
 
class  EncryptionEvent
 
class  AbstractEventMetaType
 The base class for event metatypes. More...
 
class  EventMetaType
 A family of event meta-types to load and match events. More...
 
struct  JsonConverter< event_ptr_tt< EventT > >
 
class  Event
 
class  EventTemplate
 A template base class to derive your event type from. More...
 
struct  EventRelation
 
struct  JsonObjectConverter< EventRelation >
 
struct  JWK
 
struct  EncryptedFileMetadata
 
struct  JsonObjectConverter< EncryptedFileMetadata >
 
struct  JsonObjectConverter< JWK >
 
class  KeyVerificationEvent
 
class  KeyVerificationRequestEvent
 
class  KeyVerificationReadyEvent
 
class  KeyVerificationStartEvent
 Begins a key verification process. More...
 
class  KeyVerificationAcceptEvent
 
class  KeyVerificationCancelEvent
 
class  KeyVerificationKeyEvent
 
class  KeyVerificationMacEvent
 Sends the MAC of a device's key to the partner device. More...
 
class  KeyVerificationDoneEvent
 
class  ReactionEvent
 
struct  UserTimestamp
 
struct  ReceiptsForEvent
 
class  ReceiptEvent
 
class  RedactionEvent
 
class  RoomAvatarEvent
 
class  RoomCanonicalAliasEvent
 
class  RoomCreateEvent
 
class  RoomEvent
 
class  RoomKeyEvent
 
class  MemberEventContent
 
class  RoomMemberEvent
 
class  RoomMessageEvent
 
struct  PowerLevelsEventContent
 
class  RoomPowerLevelsEvent
 
class  RoomTombstoneEvent
 
class  RoomServerAclEvent
 
struct  JsonConverter< EventContent::SingleKeyValue< ValueT, KeyStr > >
 
class  StateEvent
 
class  EventTemplate< EventT, StateEvent, ContentT >
 
class  KeyedStateEventBase
 
class  KeylessStateEventBase
 
class  StickerEvent
 
struct  EventStats
 Counters of unread events and highlights with a precision flag. More...
 
struct  function_traits
 Determine traits of an arbitrary function/lambda/functor. More...
 
struct  function_traits< ReturnT(ArgTs...)>
 
class  BaseJob
 
class  DownloadFileJob
 
class  MediaThumbnailJob
 
class  RequestData
 
class  SyncJob
 
struct  EmojiEntry
 
class  KeyVerificationSession
 
class  MxcReply
 
class  NetworkAccessManager
 
class  NetworkSettings
 
class  ConnectionsGuard
 A guard pointer that disconnects an interested object upon destruction. More...
 
class  FileTransferInfo
 
class  ReadReceipt
 Data structure for a room member's read receipt. More...
 
struct  Notification
 
class  Room
 
class  RoomMember
 
struct  MemberSorter
 
class  RoomStateView
 
class  Settings
 
class  SettingsGroup
 
class  AccountSettings
 
class  SsoSession
 
struct  RoomSummary
 Room summary, as defined in MSC688. More...
 
struct  JsonObjectConverter< RoomSummary >
 
struct  DevicesList
 
struct  JsonObjectConverter< DevicesList >
 
class  SyncRoomData
 
class  SyncData
 
class  Uri
 A wrapper around a Matrix URI or identifier. More...
 
class  UriResolverBase
 Abstract class to resolve the resource and act on it. More...
 
class  UriDispatcher
 Resolve the resource and invoke an action on it, via Qt signals. More...
 
class  User
 
struct  HashQ
 This is only to make UnorderedMap alias work until we get rid of it. More...
 
class  Range
 
class  asKeyValueRange
 An adaptor for Qt (hash-)maps to make them iterable in STL style. More...
 
struct  CStructDeleter
 
struct  Overloads
 Multiplex several functors in one. More...
 

Typedefs

using LoginFlow = GetLoginFlowsJob::LoginFlow
 
using room_factory_t = std::function< Room *(Connection *, const QString &, JoinState)>
 
using user_factory_t = std::function< User *(Connection *, const QString &)>
 
using DirectChatsMap = QMultiHash< const User *, QString >
 
using IgnoredUsersList = IgnoredUsersEvent::value_type
 
using SslErrorCode = unsigned long
 
using key_material_t = std::array< byte_t, DefaultPbkdf2KeyLength >
 
using key_view_t = byte_view_t< DefaultPbkdf2KeyLength >
 
template<typename T >
using SslExpected = Expected< T, SslErrorCode >
 Same as QOlmExpected but for wrapping OpenSSL instead of Olm calls. More...
 
template<typename T >
using QOlmExpected = Expected< T, OlmErrorCode >
 
using byte_t = uint8_t
 
template<size_t N = std::dynamic_extent>
using byte_view_t = std::span< const byte_t, N >
 
template<size_t N = std::dynamic_extent>
using byte_span_t = std::span< byte_t, N >
 
using OneTimeKeys = QHash< QString, std::variant< QString, SignedOneTimeKey > >
 
using QOlmInboundGroupSessionPtr = std::unique_ptr< QOlmInboundGroupSession >
 
using TagsMap = QHash< QString, TagRecord >
 
template<typename EventT >
using event_ptr_tt = std::unique_ptr< EventT >
 
using event_type_t = QLatin1String
 
using EventPtr = event_ptr_tt< Event >
 
template<EventClass EventT>
using EventsArray = std::vector< event_ptr_tt< EventT > >
 
using Events = EventsArray< Event >
 
using FileSourceInfo = std::variant< QUrl, EncryptedFileMetadata >
 
using EventsWithReceipts = QVector< ReceiptsForEvent >
 
using RoomEventPtr = event_ptr_tt< RoomEvent >
 
using RoomEvents = EventsArray< RoomEvent >
 
using RoomEventsRange = std::ranges::subrange< RoomEvents::iterator >
 
using MessageEventType = RoomMessageEvent::MsgType
 
using StateEventPtr = event_ptr_tt< StateEvent >
 
using StateEvents = EventsArray< StateEvent >
 
using StateEventKey = std::pair< QString, QString >
 
template<typename FnT , int ArgN = 0>
using fn_arg_t = std::tuple_element_t< ArgN, typename function_traits< FnT >::arg_types >
 
template<typename T >
using Omittable = std::optional< T >
 
using SyncDataList = std::vector< SyncRoomData >
 
template<typename KeyT , typename ValT >
using UnorderedMap = std::unordered_map< KeyT, ValT, HashQ< KeyT > >
 A wrapper around std::unordered_map compatible with types that have qHash. More...
 
template<typename ImplType , typename TypeToDelete = ImplType>
using ImplPtr = std::unique_ptr< ImplType, void(*)(TypeToDelete *)>
 An owning implementation pointer. More...
 
template<typename T >
using CStructPtr = std::unique_ptr< T, CStructDeleter< T > >
 An owning pointer to a C structure. More...
 

Enumerations

enum  SslErrorCodes : SslErrorCode { SslErrorUserOffset = 128 , WrongDerivedKeyLength = SslErrorUserOffset + 1 , SslPayloadTooLong = SslErrorUserOffset + 2 }
 
enum class  HttpVerb { Get , Put , Post , Delete }
 
enum class  Membership : uint16_t {
  Invalid = 0x0 , Join = 0x1 , Leave = 0x2 , Invite = 0x4 ,
  Knock = 0x8 , Ban = 0x10 , Undefined = Invalid
}
 Membership states. More...
 
enum class  JoinState : std::underlying_type_t< Membership > {
  Invalid = std::underlying_type_t<Membership>(Membership::Invalid) , Join = std::underlying_type_t<Membership>(Membership::Join) , Leave = std::underlying_type_t<Membership>(Membership::Leave) , Invite = std::underlying_type_t<Membership>(Membership::Invite) ,
  Knock = std::underlying_type_t<Membership>(Membership::Knock)
}
 Local user join-state names. More...
 
enum  RunningPolicy { ForegroundRequest = 0x0 , BackgroundRequest = 0x1 }
 Network job running policy flags. More...
 
enum  UriResolveResult : int8_t {
  StillResolving = -1 , UriResolved = 0 , CouldNotResolve , IncorrectAction ,
  InvalidUri , NoAccount
}
 The result of URI resolution using UriResolver. More...
 
enum class  RoomType : uint8_t { Space = 0 , Undefined = 0xFF }
 
enum class  EncryptionType : uint8_t { MegolmV1AesSha2 = 0 , Undefined = 0xFF }
 

Functions

bool operator== (const LoginFlow &lhs, const LoginFlow &rhs)
 
bool operator!= (const LoginFlow &lhs, const LoginFlow &rhs)
 
template<typename T = Room>
auto defaultRoomFactory (Connection *c, const QString &id, JoinState js)
 The default factory to create room objects. More...
 
template<typename T = User>
auto defaultUserFactory (Connection *c, const QString &id)
 The default factory to create user objects. More...
 
template<typename PodT , typename JsonT >
PodT fromJson (const JsonT &)
 
template<typename T >
auto toJson (const T &pod)
 
template<typename T >
void fillJson (QJsonObject &json, const T &data)
 
template<typename JsonT , typename PodT >
void fromJson (const JsonT &json, PodT &pod)
 
template<typename T >
void fillFromJson (const QJsonValue &jv, T &pod)
 
template<typename EnumT , typename EnumStringValuesT >
EnumT enumFromJsonString (const QString &s, const EnumStringValuesT &enumValues, EnumT defaultValue)
 Facility string-to-enum converter. More...
 
template<typename EnumT , typename EnumStringValuesT >
QString enumToJsonString (EnumT v, const EnumStringValuesT &enumValues)
 Facility enum-to-string converter. More...
 
template<typename FlagT , typename FlagStringValuesT >
FlagT flagFromJsonString (const QString &s, const FlagStringValuesT &flagValues, FlagT defaultValue=FlagT(0U))
 Facility converter for flags. More...
 
template<typename FlagT , typename FlagStringValuesT >
QString flagToJsonString (FlagT v, const FlagStringValuesT &flagValues)
 
template<>
bool fromJson (const QJsonValue &jv)
 
template<>
QJsonArray fromJson (const QJsonDocument &jd)
 
QJsonValue toJson (const QDateTime &val)
 
QJsonValue toJson (const QDate &val)
 
template<typename... Ts>
QJsonValue toJson (const std::variant< Ts... > &v)
 
QJsonObject QUOTIENT_API toJson (const QVariantHash &vh)
 
template<bool Force = true, typename ContT , typename ValT >
void addParam (ContT &container, const QString &key, ValT &&value)
 
auto toSnakeCase (QLatin1String s)
 
QByteArray zeroedByteArray (QByteArray::size_type n=32)
 
template<size_t N, typename T = uint8_t>
consteval std::array< T, N > zeroes ()
 
QUOTIENT_API SslExpected< key_material_tpbkdf2HmacSha512 (const QByteArray &passphrase, const QByteArray &salt, int iterations)
 Generate a key out of the given passphrase. More...
 
QUOTIENT_API SslExpected< HkdfKeyshkdfSha256 (key_view_t key, byte_view_t< 32 > salt, byte_view_t<> info)
 Derive a key from the input data using HKDF-SHA256. More...
 
QUOTIENT_API SslExpected< QByteArray > hmacSha256 (byte_view_t< HmacKeySize > hmacKey, const QByteArray &data)
 Calculate a MAC from the given key and data. More...
 
QUOTIENT_API QOlmExpected< QByteArray > curve25519AesSha2Decrypt (QByteArray ciphertext, const QByteArray &privateKey, const QByteArray &ephemeral, const QByteArray &mac)
 Decrypt the data using Curve25519-AES-Sha256. More...
 
QUOTIENT_API QOlmExpected< Curve25519Encryptedcurve25519AesSha2Encrypt (const QByteArray &plaintext, const QByteArray &publicKey)
 Encrypt the data using Curve25519-AES-Sha256. More...
 
QUOTIENT_API SslExpected< QByteArray > aesCtr256Encrypt (const QByteArray &plaintext, byte_view_t< Aes256KeySize > key, byte_view_t< AesBlockSize > iv)
 Encrypt data using AES-CTR-256. More...
 
QUOTIENT_API SslExpected< QByteArray > aesCtr256Decrypt (const QByteArray &ciphertext, byte_view_t< Aes256KeySize > key, byte_view_t< AesBlockSize > iv)
 Decrypt data using AES-CTR-256. More...
 
QUOTIENT_API std::vector< byte_tbase58Decode (const QByteArray &encoded)
 
bool isSupportedAlgorithm (const QString &algorithm)
 
QUOTIENT_API QByteArray byteArrayForOlm (size_t bufferSize)
 Initialise a buffer object for use with Olm calls. More...
 
size_t unsignedSize (const auto &qtBuffer)
 Get a size of Qt container coerced to size_t. More...
 
template<size_t N = std::dynamic_extent>
auto asCBytes (const QByteArray &bytes)
 Obtain a std::span<const byte_t, N> looking into the passed buffer. More...
 
template<size_t N = std::dynamic_extent>
auto asCBytes (QLatin1String bytes)
 
template<size_t N = std::dynamic_extent>
auto asWritableCBytes (QByteArray &bytes)
 Obtain a std::span<byte_t, N> looking into the passed buffer. More...
 
template<class BufferT >
auto asWritableCBytes (BufferT &buf) -> auto requires(!std::is_const_v< typename BufferT::value_type >)
 
template<class BufferT >
auto asCBytes (const BufferT &buf) -> auto
 
auto viewAsByteArray (const auto &aRange) -> auto requires(sizeof(*aRange.data())==sizeof(char))
 
auto getRandom (size_t bytes)
 
template<size_t SizeN>
auto getRandom ()
 
QUOTIENT_API void fillFromSecureRng (std::span< byte_t > bytes)
 Fill the buffer with the securely generated random bytes. More...
 
QUOTIENT_API bool verifyIdentitySignature (const DeviceKeys &deviceKeys, const QString &deviceId, const QString &userId)
 
QUOTIENT_API bool ed25519VerifySignature (const QString &signingKey, const QJsonObject &obj, const QString &signature)
 checks if the signature is signed by the signing_key More...
 
QDebug & operator<< (QDebug &d, const TimelineItem &ti)
 
bool operator< (TagRecord lhs, TagRecord rhs)
 
 DEFINE_SIMPLE_EVENT (ReadMarkerEvent, Event, "m.fully_read", QString, eventId, "event_id") DEFINE_SIMPLE_EVENT(IgnoredUsersEvent
 
template<EventClass EventT>
bool is (const Event &e)
 
bool operator== (const AbstractEventMetaType &lhs, const AbstractEventMetaType &rhs)
 
template<EventClass EventT, typename... ArgTs>
event_ptr_tt< EventT > makeEvent (ArgTs &&... args)
 Create an event of arbitrary type from its arguments. More...
 
template<EventClass EventT>
constexpr const auto & mostSpecificMetaType ()
 
template<EventClass EventT>
event_ptr_tt< EventT > loadEvent (const QJsonObject &fullJson)
 Create an event with proper type from a JSON object. More...
 
template<EventClass EventT>
event_ptr_tt< EventT > loadEvent (const QString &matrixType, const auto &... otherBasicJsonParams)
 Create an event from a type string and content JSON. More...
 
template<EventClass EventT, typename BasePtrT >
auto eventCast (const BasePtrT &eptr) -> decltype(static_cast< EventT * >(std::to_address(eptr)))
 Cast the event pointer down in a type-safe way. More...
 
template<EventClass EventT, typename BaseEventT >
auto eventCast (event_ptr_tt< BaseEventT > &&eptr)
 Cast the event pointer down in a type-safe way, with moving. More...
 
template<EventClass BaseT, typename TailT >
auto switchOnType (const BaseT &event, TailT &&tail)
 
template<typename FnT1 , typename... FnTs>
auto switchOnType (const EventClass auto &event, FnT1 &&fn1, FnTs &&... fns)
 
QUOTIENT_API std::pair< EncryptedFileMetadata, QByteArray > encryptFile (const QByteArray &plainText)
 
QUOTIENT_API QByteArray decryptFile (const QByteArray &ciphertext, const EncryptedFileMetadata &metadata)
 
QUOTIENT_API QUrl getUrlFromSourceInfo (const FileSourceInfo &fsi)
 
QUOTIENT_API void setUrlInSourceInfo (FileSourceInfo &fsi, const QUrl &newUrl)
 
template<>
void fillJson (QJsonObject &, const FileSourceInfo &)=delete
 
QUOTIENT_API void fillJson (QJsonObject &jo, const std::array< QLatin1String, 2 > &jsonKeys, const FileSourceInfo &fsi)
 Export FileSourceInfo to a JSON object. More...
 
template<>
QUOTIENT_API EventsWithReceipts fromJson (const QJsonObject &json)
 
QUOTIENT_API QJsonObject toJson (const EventsWithReceipts &ewrs)
 
template<>
auto toJson (const EventContent::AliasesEventContent &c)
 
 DEFINE_SIMPLE_STATE_EVENT (RoomTopicEvent, "m.room.topic", QString, topic, "topic") DEFINE_SIMPLE_STATE_EVENT(RoomPinnedEventsEvent
 
QUOTIENT_API QDebug operator<< (QDebug dbg, const EventStats &es)
 
template<typename T , typename E >
 requires (!std::is_same_v< T, E >) class Expected
 A minimal subset of std::expected from C++23. More...
 
bool QUOTIENT_API isJobPending (BaseJob *job)
 
template<typename SmartSlotT >
auto connectUntil (auto *sender, auto signal, QObject *context, SmartSlotT &&smartSlot, Qt::ConnectionType connType=Qt::AutoConnection)
 Create a connection that self-disconnects when its slot returns true. More...
 
template<typename ContextT , typename SlotT >
auto connectSingleShot (auto *sender, auto signal, ContextT *context, SlotT slot, Qt::ConnectionType connType=Qt::AutoConnection)
 Create a connection that self-disconnects after triggering on the signal. More...
 
void swap (ReadReceipt &lhs, ReadReceipt &rhs)
 
template<template< class > class ContT>
ContT< RoomMember >::size_type lowerBoundMemberIndex (const ContT< RoomMember > &c, const auto &v, MemberSorter ms={})
 
template<template< class > class ContT>
ContT< QString >::size_type lowerBoundMemberIndex (const ContT< QString > &c, const auto &v, const Room *r, MemberSorter ms={})
 
auto memberMatcher (auto substr, Qt::CaseSensitivity cs=Qt::CaseSensitive)
 A factory to get a functional object matching room members against a substring. More...
 
QUOTIENT_API QDebug operator<< (QDebug dbg, const RoomSummary &rs)
 
QDebug operator<< (QDebug dhg, const DevicesList &devicesList)
 
QUOTIENT_API UriResolveResult visitResource (Connection *account, const Uri &uri, std::function< UriResolveResult(User *, QString)> userHandler, std::function< void(Room *, QString)> roomEventHandler, std::function< void(Connection *, QString, QStringList)> joinHandler, std::function< bool(const QUrl &)> nonMatrixHandler)
 Resolve the resource and invoke an action on it, via function objects. More...
 
UriResolveResult checkResource (Connection *account, const Uri &uri)
 Check that the resource is resolvable with no action on it. More...
 
constexpr auto operator""_ls (const char *s, std::size_t size)
 
 QT_IGNORE_DEPRECATIONS (template< typename U > asKeyValueRange(U &) -> asKeyValueRange< U & >;template< typename U > asKeyValueRange(U &&) -> asKeyValueRange< U >;) template< typename InputIt
 
Pred std::pair< InputIt, ForwardItfindFirstOf (InputIt first, InputIt last, ForwardIt sFirst, ForwardIt sLast, Pred pred)
 
template<typename ImplType , typename TypeToDelete = ImplType, typename... ArgTs>
ImplPtr< ImplType, TypeToDelete > makeImpl (ArgTs &&... args)
 make_unique for ImplPtr More...
 
template<typename ImplType , typename TypeToDelete = ImplType>
ImplPtr< ImplType, TypeToDelete > acquireImpl (ImplType *from)
 
template<typename ImplType , typename TypeToDelete = ImplType>
constexpr ImplPtr< ImplType, TypeToDelete > ZeroImpl ()
 
template<typename T >
auto makeCStruct (T *(*constructor)(void *), size_t(*sizeFn)(), auto destructor)
 Create a C structure with pre-programmed deletion logic. More...
 
template<typename... FunctorTs>
 Overloads (FunctorTs &&...) -> Overloads< FunctorTs... >
 
QUOTIENT_API void linkifyUrls (QString &htmlEscapedText)
 
QUOTIENT_API QString sanitized (const QString &plainText)
 
QUOTIENT_API QString prettyPrint (const QString &plainText)
 
QUOTIENT_API QString cacheLocation (const QString &dirName)
 
QUOTIENT_API qreal stringToHueF (const QString &s)
 
QUOTIENT_API QString serverPart (const QString &mxId)
 
QUOTIENT_API QString versionString ()
 
QUOTIENT_API int majorVersion ()
 
QUOTIENT_API int minorVersion ()
 
QUOTIENT_API int patchVersion ()
 
QDebug formatJson (QDebug dbg)
 QDebug manipulator to setup the stream for JSON output. More...
 
QDebug terse (QDebug dbg)
 Suppress full qualification of enums/QFlags when logging. More...
 

Variables

constexpr bool IfNotEmpty = false
 
constexpr auto DefaultPbkdf2KeyLength = 32u
 
constexpr auto Aes256KeySize = 32u
 
constexpr auto AesBlockSize = 16u
 
constexpr auto HmacKeySize = 32u
 
constexpr auto AlgorithmKeyL = "algorithm"_ls
 
constexpr auto RotationPeriodMsKeyL = "rotation_period_ms"_ls
 
constexpr auto RotationPeriodMsgsKeyL = "rotation_period_msgs"_ls
 
constexpr auto AlgorithmKey = "algorithm"_ls
 
constexpr auto RotationPeriodMsKey = "rotation_period_ms"_ls
 
constexpr auto RotationPeriodMsgsKey = "rotation_period_msgs"_ls
 
constexpr auto Ed25519Key = "ed25519"_ls
 
constexpr auto Curve25519Key = "curve25519"_ls
 
constexpr auto SignedCurve25519Key = "signed_curve25519"_ls
 
constexpr auto OlmV1Curve25519AesSha2AlgoKey = "m.olm.v1.curve25519-aes-sha2"_ls
 
constexpr auto MegolmV1AesSha2AlgoKey = "m.megolm.v1.aes-sha2"_ls
 
constexpr std::array SupportedAlgorithms
 
constexpr auto FavouriteTag = "m.favourite"_ls
 
constexpr auto LowPriorityTag = "m.lowpriority"_ls
 
constexpr auto ServerNoticeTag = "m.server_notice"_ls
 
 Event
 
ignored_user_list
 
QSet< QString >
 
ignoredUsers
 
constexpr auto CiphertextKey = "ciphertext"_ls
 
constexpr auto SenderKeyKey = "sender_key"_ls
 
constexpr auto DeviceIdKey = "device_id"_ls
 
constexpr auto SessionIdKey = "session_id"_ls
 
constexpr auto TypeKey = "type"_ls
 
constexpr auto BodyKey = "body"_ls
 
constexpr auto ContentKey = "content"_ls
 
constexpr auto EventIdKey = "event_id"_ls
 
constexpr auto SenderKey = "sender"_ls
 
constexpr auto RoomIdKey = "room_id"_ls
 
constexpr auto UnsignedKey = "unsigned"_ls
 
constexpr auto RedactedCauseKey = "redacted_because"_ls
 
constexpr auto PrevContentKey = "prev_content"_ls
 
constexpr auto StateKeyKey = "state_key"_ls
 
template<typename EventT , typename BaseEventT = Event>
concept EventClass = std::derived_from<EventT, BaseEventT>
 
constexpr auto RelatesToKey = "m.relates_to"_ls
 
constexpr auto RelTypeKey = "rel_type"_ls
 
constexpr auto SasV1Method = "m.sas.v1"_ls
 
constexpr auto HmacSha256Code = "hkdf-hmac-sha256"_ls
 
constexpr auto HmacSha256V2Code = "hkdf-hmac-sha256.v2"_ls
 
constexpr std::array SupportedMacs { HmacSha256Code, HmacSha256V2Code }
 
m room pinned_events
 
m room QStringList
 
m room pinnedEvents
 
template<typename EvT >
concept Keyed_State_Event = EvT::needsStateKey
 
template<typename EvT >
concept Keyless_State_Event = !EvT::needsStateKey
 
template<typename FnT >
constexpr auto fn_arg_count_v
 
constexpr auto none = std::nullopt
 
constexpr std::array MembershipStrings
 
constexpr std::array JoinStateStrings
 
constexpr std::array RoomTypeStrings { "m.space"_ls }
 
template<typename FnT , class EvT = std::decay_t<fn_arg_t<FnT>>>
concept Keyed_State_Fn = EvT::needsStateKey
 
template<typename FnT , class EvT = std::decay_t<fn_arg_t<FnT>>>
concept Keyless_State_Fn = !EvT::needsStateKey
 
constexpr auto UnreadNotificationsKey = "unread_notifications"_ls
 
constexpr auto PartiallyReadCountKey = "x-quotient.since_fully_read_count"_ls
 
constexpr auto NewUnreadCountKey = "org.matrix.msc2654.unread_count"_ls
 
constexpr auto HighlightCountKey = "highlight_count"_ls
 
 ForwardIt
 
constexpr qint64 ProfilerMinNsecs
 

Typedef Documentation

◆ byte_span_t

template<size_t N = std::dynamic_extent>
using Quotient::byte_span_t = typedef std::span<byte_t, N>

Definition at line 94 of file e2ee_common.h.

◆ byte_t

using Quotient::byte_t = typedef uint8_t

Definition at line 88 of file e2ee_common.h.

◆ byte_view_t

template<size_t N = std::dynamic_extent>
using Quotient::byte_view_t = typedef std::span<const byte_t, N>

Definition at line 91 of file e2ee_common.h.

◆ CStructPtr

template<typename T >
using Quotient::CStructPtr = typedef std::unique_ptr<T, CStructDeleter<T> >

An owning pointer to a C structure.

This is intented to ease lifecycle management of Olm structures.

See also
makeCStruct

Definition at line 230 of file util.h.

◆ DirectChatsMap

using Quotient::DirectChatsMap = typedef QMultiHash<const User*, QString>

Definition at line 107 of file connection.h.

◆ event_ptr_tt

template<typename EventT >
using Quotient::event_ptr_tt = typedef std::unique_ptr<EventT>

Definition at line 14 of file event.h.

◆ event_type_t

using Quotient::event_type_t = typedef QLatin1String

Definition at line 29 of file event.h.

◆ EventPtr

Definition at line 353 of file event.h.

◆ Events

Definition at line 357 of file event.h.

◆ EventsArray

template<EventClass EventT>
using Quotient::EventsArray = typedef std::vector<event_ptr_tt<EventT> >

Definition at line 356 of file event.h.

◆ EventsWithReceipts

Definition at line 20 of file receiptevent.h.

◆ FileSourceInfo

using Quotient::FileSourceInfo = typedef std::variant<QUrl, EncryptedFileMetadata>

Definition at line 70 of file filesourceinfo.h.

◆ fn_arg_t

template<typename FnT , int ArgN = 0>
using Quotient::fn_arg_t = typedef std::tuple_element_t<ArgN, typename function_traits<FnT>::arg_types>

Definition at line 86 of file function_traits.h.

◆ IgnoredUsersList

using Quotient::IgnoredUsersList = typedef IgnoredUsersEvent::value_type

Definition at line 108 of file connection.h.

◆ ImplPtr

template<typename ImplType , typename TypeToDelete = ImplType>
using Quotient::ImplPtr = typedef std::unique_ptr<ImplType, void (*)(TypeToDelete*)>

An owning implementation pointer.

This is basically std::unique_ptr<> to hold your pimpl's but without having to define default constructors/operator=() out of line. Thanks to https://oliora.github.io/2015/12/29/pimpl-and-rule-of-zero.html for inspiration

Definition at line 171 of file util.h.

◆ key_material_t

Definition at line 43 of file cryptoutils.h.

◆ key_view_t

Definition at line 44 of file cryptoutils.h.

◆ LoginFlow

Definition at line 56 of file connection.h.

◆ MessageEventType

Definition at line 101 of file roommessageevent.h.

◆ Omittable

template<typename T >
using Quotient::Omittable = typedef std::optional<T>

Definition at line 13 of file omittable.h.

◆ OneTimeKeys

using Quotient::OneTimeKeys = typedef QHash<QString, std::variant<QString, SignedOneTimeKey> >

Definition at line 386 of file e2ee_common.h.

◆ QOlmExpected

template<typename T >
using Quotient::QOlmExpected = typedef Expected<T, OlmErrorCode>

Definition at line 66 of file e2ee_common.h.

◆ QOlmInboundGroupSessionPtr

Definition at line 60 of file qolminboundsession.h.

◆ room_factory_t

using Quotient::room_factory_t = typedef std::function<Room*(Connection*, const QString&, JoinState)>

Definition at line 79 of file connection.h.

◆ RoomEventPtr

Definition at line 69 of file roomevent.h.

◆ RoomEvents

Definition at line 70 of file roomevent.h.

◆ RoomEventsRange

using Quotient::RoomEventsRange = typedef std::ranges::subrange<RoomEvents::iterator>

Definition at line 71 of file roomevent.h.

◆ SslErrorCode

using Quotient::SslErrorCode = typedef unsigned long

Definition at line 41 of file cryptoutils.h.

◆ SslExpected

template<typename T >
using Quotient::SslExpected = typedef Expected<T, SslErrorCode>

Same as QOlmExpected but for wrapping OpenSSL instead of Olm calls.

Definition at line 54 of file cryptoutils.h.

◆ StateEventKey

using Quotient::StateEventKey = typedef std::pair<QString, QString>

A combination of event type and state key uniquely identifies a piece of state in Matrix.

See also
https://matrix.org/docs/spec/client_server/unstable.html#types-of-room-events

Definition at line 56 of file stateevent.h.

◆ StateEventPtr

Definition at line 47 of file stateevent.h.

◆ StateEvents

Definition at line 48 of file stateevent.h.

◆ SyncDataList

using Quotient::SyncDataList = typedef std::vector<SyncRoomData>

Definition at line 81 of file syncdata.h.

◆ TagsMap

using Quotient::TagsMap = typedef QHash<QString, TagRecord>

Definition at line 46 of file accountdataevents.h.

◆ UnorderedMap

template<typename KeyT , typename ValT >
using Quotient::UnorderedMap = typedef std::unordered_map<KeyT, ValT, HashQ<KeyT> >

A wrapper around std::unordered_map compatible with types that have qHash.

Definition at line 58 of file util.h.

◆ user_factory_t

using Quotient::user_factory_t = typedef std::function<User*(Connection*, const QString&)>

Definition at line 81 of file connection.h.

Enumeration Type Documentation

◆ EncryptionType

enum Quotient::EncryptionType : uint8_t
strong
Enumerator
MegolmV1AesSha2 
Undefined 

Definition at line 119 of file quotient_common.h.

◆ HttpVerb

enum Quotient::HttpVerb
strong
Enumerator
Get 
Put 
Post 
Delete 

Definition at line 23 of file basejob.h.

◆ JoinState

enum Quotient::JoinState : std::underlying_type_t< Membership >
strong

Local user join-state names.

This represents a subset of Membership values that may arrive as the local user's state grouping for the sync response.

See also
SyncData
Enumerator
Invalid 
Join 
Leave 
Invite 
Knock 

Definition at line 78 of file quotient_common.h.

◆ Membership

enum Quotient::Membership : uint16_t
strong

Membership states.

These are used for member events. The names here are case-insensitively equal to state names used on the wire.

See also
MemberEventContent, RoomMemberEvent
Enumerator
Invalid 
Join 
Leave 
Invite 
Knock 
Ban 
Undefined 

Definition at line 55 of file quotient_common.h.

◆ RoomType

enum Quotient::RoomType : uint8_t
strong
Enumerator
Space 
Undefined 

Definition at line 111 of file quotient_common.h.

◆ RunningPolicy

Network job running policy flags.

So far only background/foreground flags are available.

See also
Connection::callApi, Connection::run
Enumerator
ForegroundRequest 
BackgroundRequest 

Definition at line 96 of file quotient_common.h.

◆ SslErrorCodes

Enumerator
SslErrorUserOffset 
WrongDerivedKeyLength 
SslPayloadTooLong 

Definition at line 46 of file cryptoutils.h.

◆ UriResolveResult

The result of URI resolution using UriResolver.

See also
UriResolver
Enumerator
StillResolving 
UriResolved 
CouldNotResolve 
IncorrectAction 
InvalidUri 
NoAccount 

Definition at line 101 of file quotient_common.h.

Function Documentation

◆ acquireImpl()

template<typename ImplType , typename TypeToDelete = ImplType>
ImplPtr<ImplType, TypeToDelete> Quotient::acquireImpl ( ImplType *  from)
inline

Definition at line 201 of file util.h.

◆ addParam()

template<bool Force = true, typename ContT , typename ValT >
void Quotient::addParam ( ContT &  container,
const QString &  key,
ValT &&  value 
)
inline

Add a key-value pair to QJsonObject or QUrlQuery

Adds a key-value pair(s) specified by key and value to container, optionally (in case IfNotEmpty is passed for the first template parameter) taking into account the value "emptiness". With IfNotEmpty, value is NOT added to the container if and only if:

  • it has a method isEmpty() and value.isEmpty() == true, or
  • it's an optional that has no value (nullopt).

If container is a QUrlQuery, an attempt to fit value into it is made as follows:

  • if value is a QJsonObject, key is ignored and pairs from value are copied to container, assuming that the value in each pair is a string;
  • if value is a QStringList, it is "exploded" into a list of key-value pairs with key equal to key and value taken from each list item;
  • if value is a bool, its OpenAPI (i.e. JSON) representation is added to the query (true or false, respectively).
Template Parameters
Forceadd the pair even if the value is empty. This is true by default; passing IfNotEmpty or false for this parameter enables emptiness checks as described above

Definition at line 542 of file converters.h.

◆ aesCtr256Decrypt()

QUOTIENT_API SslExpected<QByteArray> Quotient::aesCtr256Decrypt ( const QByteArray &  ciphertext,
byte_view_t< Aes256KeySize key,
byte_view_t< AesBlockSize iv 
)

Decrypt data using AES-CTR-256.

key and iv have a length of 32 bytes

◆ aesCtr256Encrypt()

QUOTIENT_API SslExpected<QByteArray> Quotient::aesCtr256Encrypt ( const QByteArray &  plaintext,
byte_view_t< Aes256KeySize key,
byte_view_t< AesBlockSize iv 
)

Encrypt data using AES-CTR-256.

key and iv have a length of 32 bytes

◆ asCBytes() [1/3]

template<class BufferT >
auto Quotient::asCBytes ( const BufferT &  buf) -> auto
inline

Definition at line 151 of file e2ee_common.h.

◆ asCBytes() [2/3]

template<size_t N = std::dynamic_extent>
auto Quotient::asCBytes ( const QByteArray &  bytes)
inline

Obtain a std::span<const byte_t, N> looking into the passed buffer.

This function returns an adaptor object that is suitable for OpenSSL/Olm invocations (via std::span<>::data() accessor) so that you don't have to wrap your QByteArray into ugly reinterpret_casts on every OpenSSL call.

Note
The caller is responsible for making sure that bytes.size() is small enough to fit into an int (OpenSSL only handles int sizes atm) but also large enough to have at least N bytes if N is not std::dynamic_extent
See also
asWritableCBytes for the case when you need to pass a buffer for writing

Definition at line 124 of file e2ee_common.h.

◆ asCBytes() [3/3]

template<size_t N = std::dynamic_extent>
auto Quotient::asCBytes ( QLatin1String  bytes)
inline

Definition at line 130 of file e2ee_common.h.

◆ asWritableCBytes() [1/2]

template<class BufferT >
auto Quotient::asWritableCBytes ( BufferT &  buf) -> auto requires(!std::is_const_v<typename BufferT::value_type>)
inline

Definition at line 144 of file e2ee_common.h.

◆ asWritableCBytes() [2/2]

template<size_t N = std::dynamic_extent>
auto Quotient::asWritableCBytes ( QByteArray &  bytes)
inline

Obtain a std::span<byte_t, N> looking into the passed buffer.

Definition at line 137 of file e2ee_common.h.

◆ base58Decode()

QUOTIENT_API std::vector<byte_t> Quotient::base58Decode ( const QByteArray &  encoded)

◆ byteArrayForOlm()

QUOTIENT_API QByteArray Quotient::byteArrayForOlm ( size_t  bufferSize)

Initialise a buffer object for use with Olm calls.

Qt and Olm use different size types; this causes the warning noise

◆ cacheLocation()

QUOTIENT_API QString Quotient::cacheLocation ( const QString &  dirName)

Return a path to cache directory after making sure that it exists

The returned path has a trailing slash, clients don't need to append it.

Parameters
dirNamepath to cache directory relative to the standard cache path

◆ checkResource()

UriResolveResult Quotient::checkResource ( Connection account,
const Uri uri 
)
inline

Check that the resource is resolvable with no action on it.

Definition at line 116 of file uriresolver.h.

◆ connectSingleShot()

template<typename ContextT , typename SlotT >
auto Quotient::connectSingleShot ( auto *  sender,
auto  signal,
ContextT *  context,
SlotT  slot,
Qt::ConnectionType  connType = Qt::AutoConnection 
)
inline

Create a connection that self-disconnects after triggering on the signal.

Definition at line 42 of file qt_connection_util.h.

◆ connectUntil()

template<typename SmartSlotT >
auto Quotient::connectUntil ( auto *  sender,
auto  signal,
QObject *  context,
SmartSlotT &&  smartSlot,
Qt::ConnectionType  connType = Qt::AutoConnection 
)
inline

Create a connection that self-disconnects when its slot returns true.

The "slot" signature accepted by connectUntil() is different from normal Qt slots in that its return value must be bool, not void. Also, as of this writing, connectUntil() doesn't accept member function pointers for slots as QObject::connect or Quotient::connectSingleShot do; if you want to use a member function of the context object you should pass a lambda or bind the context to the member function with std::bind_front before passing it to connectUntil().

Returns
whether the connection should be dropped; false means that the connection remains; upon returning true, the slot is disconnected from the signal.

Definition at line 22 of file qt_connection_util.h.

◆ curve25519AesSha2Decrypt()

QUOTIENT_API QOlmExpected<QByteArray> Quotient::curve25519AesSha2Decrypt ( QByteArray  ciphertext,
const QByteArray &  privateKey,
const QByteArray &  ephemeral,
const QByteArray &  mac 
)

Decrypt the data using Curve25519-AES-Sha256.

Note
ciphertext must be given as base64

◆ curve25519AesSha2Encrypt()

QUOTIENT_API QOlmExpected<Curve25519Encrypted> Quotient::curve25519AesSha2Encrypt ( const QByteArray &  plaintext,
const QByteArray &  publicKey 
)

Encrypt the data using Curve25519-AES-Sha256.

Note
publicKey must be given as base64

◆ decryptFile()

QUOTIENT_API QByteArray Quotient::decryptFile ( const QByteArray &  ciphertext,
const EncryptedFileMetadata metadata 
)

◆ defaultRoomFactory()

template<typename T = Room>
auto Quotient::defaultRoomFactory ( Connection c,
const QString &  id,
JoinState  js 
)

The default factory to create room objects.

Just a wrapper around operator new.

See also
Connection::setRoomFactory, Connection::setRoomType

Definition at line 88 of file connection.h.

◆ defaultUserFactory()

template<typename T = User>
auto Quotient::defaultUserFactory ( Connection c,
const QString &  id 
)

The default factory to create user objects.

Just a wrapper around operator new.

See also
Connection::setUserFactory, Connection::setUserType

Definition at line 98 of file connection.h.

◆ DEFINE_SIMPLE_EVENT()

Quotient::DEFINE_SIMPLE_EVENT ( ReadMarkerEvent  ,
Event  ,
"m.fully_read"  ,
QString  ,
eventId  ,
"event_id"   
)

◆ DEFINE_SIMPLE_STATE_EVENT()

Quotient::DEFINE_SIMPLE_STATE_EVENT ( RoomTopicEvent  ,
"m.room.topic"  ,
QString  ,
topic  ,
"topic"   
)

◆ ed25519VerifySignature()

QUOTIENT_API bool Quotient::ed25519VerifySignature ( const QString &  signingKey,
const QJsonObject &  obj,
const QString &  signature 
)

checks if the signature is signed by the signing_key

◆ encryptFile()

QUOTIENT_API std::pair<EncryptedFileMetadata, QByteArray> Quotient::encryptFile ( const QByteArray &  plainText)

◆ enumFromJsonString()

template<typename EnumT , typename EnumStringValuesT >
EnumT Quotient::enumFromJsonString ( const QString &  s,
const EnumStringValuesT &  enumValues,
EnumT  defaultValue 
)

Facility string-to-enum converter.

This is to simplify enum loading from JSON - just specialise Quotient::fromJson() and call this function from it, passing (aside from the JSON value for the enum - that must be a string, not an int) any iterable container of string'y values (const char*, QLatin1String, etc.) matching respective enum values, 0-based.

See also
enumToJsonString

Definition at line 150 of file converters.h.

◆ enumToJsonString()

template<typename EnumT , typename EnumStringValuesT >
QString Quotient::enumToJsonString ( EnumT  v,
const EnumStringValuesT &  enumValues 
)

Facility enum-to-string converter.

This does the same as enumFromJsonString, the other way around.

Note
The source enumeration must not have gaps in values, or enumValues has to match those gaps (i.e., if the source enumeration is defined as { Value1 = 1, Value2 = 3, Value3 = 5 } then enumValues should be defined as { "", "Value1", "", "Value2", "", "Value3" } (mind the gap at value 0, in particular).
See also
enumFromJsonString

Definition at line 173 of file converters.h.

◆ eventCast() [1/2]

template<EventClass EventT, typename BasePtrT >
auto Quotient::eventCast ( const BasePtrT &  eptr) -> decltype(static_cast<EventT*>(std::to_address(eptr)))
inline

Cast the event pointer down in a type-safe way.

Checks that the event eptr points to actually is of the requested type and returns a (plain) pointer to the event downcast to that type. eptr can be either "dumb" (BaseEventT*) or "smart" (event_ptr_tt<>). This overload doesn't affect the event ownership - if the original pointer owns the event it must outlive the downcast pointer to keep it from dangling.

Definition at line 523 of file event.h.

◆ eventCast() [2/2]

template<EventClass EventT, typename BaseEventT >
auto Quotient::eventCast ( event_ptr_tt< BaseEventT > &&  eptr)
inline

Cast the event pointer down in a type-safe way, with moving.

Checks that the event eptr points to actually is of the requested type; if (and only if) it is, releases the pointer, downcasts it to the requested event type and returns a new smart pointer wrapping the downcast one. Unlike the non-moving eventCast() overload, this one only accepts a smart pointer, and that smart pointer should be an rvalue (either a temporary, or as a result of std::move()). The ownership, respectively, is transferred to the new pointer; the original smart pointer is reset to nullptr, as is normal for unique_ptr<>::release().

Note
If eptr's event type does not match EventT it retains ownership after calling this overload; if it is a temporary, this normally leads to the event getting deleted along with the end of the temporary's lifetime.

Definition at line 546 of file event.h.

◆ fillFromJson()

template<typename T >
void Quotient::fillFromJson ( const QJsonValue &  jv,
T &  pod 
)
inline

Definition at line 126 of file converters.h.

◆ fillFromSecureRng()

QUOTIENT_API void Quotient::fillFromSecureRng ( std::span< byte_t bytes)

Fill the buffer with the securely generated random bytes.

You should use this throughout Quotient where pseudo-random generators are not enough (i.e. in crypto cases). Don't use it when proper randomness is not critical; it tries to rely on system entropy that is in (somewhat) limited supply. There's no fancy stuff internally, it's just a way to unify secure RNG usage in Quotient. See the function definition for details if you want/need.

◆ fillJson() [1/3]

template<>
void Quotient::fillJson ( QJsonObject &  ,
const FileSourceInfo  
)
delete

◆ fillJson() [2/3]

QUOTIENT_API void Quotient::fillJson ( QJsonObject &  jo,
const std::array< QLatin1String, 2 > &  jsonKeys,
const FileSourceInfo fsi 
)

Export FileSourceInfo to a JSON object.

Depending on what is stored inside FileSourceInfo, this function will insert

  • a key-to-string pair where key is taken from jsonKeys[0] and the string is the URL, if FileSourceInfo stores a QUrl;
  • a key-to-object mapping where key is taken from jsonKeys[1] and the object is the result of converting EncryptedFileMetadata to JSON, if FileSourceInfo stores EncryptedFileMetadata

◆ fillJson() [3/3]

template<typename T >
void Quotient::fillJson ( QJsonObject &  json,
const T &  data 
)
inline

Definition at line 102 of file converters.h.

◆ findFirstOf()

Pred std::pair<InputIt, ForwardIt> Quotient::findFirstOf ( InputIt  first,
InputIt  last,
ForwardIt  sFirst,
ForwardIt  sLast,
Pred  pred 
)
inline

Definition at line 152 of file util.h.

◆ flagFromJsonString()

template<typename FlagT , typename FlagStringValuesT >
FlagT Quotient::flagFromJsonString ( const QString &  s,
const FlagStringValuesT &  flagValues,
FlagT  defaultValue = FlagT(0U) 
)

Facility converter for flags.

This is very similar to enumFromJsonString, except that the target enumeration is assumed to be of a 'flag' kind - i.e. its values must be a power-of-two sequence starting from 1, without gaps, so exactly 1,2,4,8,16 and so on.

Note
Unlike enumFromJsonString, the values start from 1 and not from 0, with 0 being used for an invalid value by default.
This function does not support flag combinations.
See also
QUO_DECLARE_FLAGS, QUO_DECLARE_FLAGS_NS

Definition at line 196 of file converters.h.

◆ flagToJsonString()

template<typename FlagT , typename FlagStringValuesT >
QString Quotient::flagToJsonString ( FlagT  v,
const FlagStringValuesT &  flagValues 
)

Definition at line 210 of file converters.h.

◆ formatJson()

QDebug Quotient::formatJson ( QDebug  dbg)
inline

QDebug manipulator to setup the stream for JSON output.

Originally made to encapsulate the change in QDebug behavior in Qt 5.4 and the respective addition of QDebug::noquote(). Together with the operator<<() helper, the proposed usage is (similar to std:: I/O manipulators): qCDebug(MAIN) << formatJson << json_object; // (QJsonObject etc.)

Definition at line 310 of file util.h.

◆ fromJson() [1/5]

template<typename PodT , typename JsonT >
PodT Quotient::fromJson ( const JsonT &  json)
inline

Definition at line 108 of file converters.h.

◆ fromJson() [2/5]

template<typename JsonT , typename PodT >
void Quotient::fromJson ( const JsonT &  json,
PodT &  pod 
)
inline

Definition at line 120 of file converters.h.

◆ fromJson() [3/5]

template<>
QJsonArray Quotient::fromJson ( const QJsonDocument &  jd)
inline

Definition at line 253 of file converters.h.

◆ fromJson() [4/5]

template<>
EventContent::AliasesEventContent Quotient::fromJson ( const QJsonObject &  json)
inline

Definition at line 18 of file roomcanonicalaliasevent.h.

◆ fromJson() [5/5]

template<>
QVariantHash QUOTIENT_API Quotient::fromJson ( const QJsonValue &  jv)
inlinedelete

Use fromJson<QString> and then toLatin1()/toUtf8()/... to make QByteArray

QJsonValue can only convert to QString and there's ambiguity whether conversion to QByteArray should use (fast but very limited) toLatin1() or (all encompassing and conforming to the JSON spec but slow) toUtf8().

Definition at line 224 of file converters.h.

◆ getRandom() [1/2]

template<size_t SizeN>
auto Quotient::getRandom ( )
inline

Definition at line 282 of file e2ee_common.h.

◆ getRandom() [2/2]

auto Quotient::getRandom ( size_t  bytes)
inline

Definition at line 276 of file e2ee_common.h.

◆ getUrlFromSourceInfo()

QUOTIENT_API QUrl Quotient::getUrlFromSourceInfo ( const FileSourceInfo fsi)

◆ hkdfSha256()

QUOTIENT_API SslExpected<HkdfKeys> Quotient::hkdfSha256 ( key_view_t  key,
byte_view_t< 32 >  salt,
byte_view_t<>  info 
)

Derive a key from the input data using HKDF-SHA256.

The info parameter should be either 0 or 32 bytes long

◆ hmacSha256()

QUOTIENT_API SslExpected<QByteArray> Quotient::hmacSha256 ( byte_view_t< HmacKeySize hmacKey,
const QByteArray &  data 
)

Calculate a MAC from the given key and data.

◆ is()

template<EventClass EventT>
bool Quotient::is ( const Event e)
inline

Definition at line 497 of file event.h.

◆ isJobPending()

bool QUOTIENT_API Quotient::isJobPending ( BaseJob job)
inline

Definition at line 471 of file basejob.h.

◆ isSupportedAlgorithm()

bool Quotient::isSupportedAlgorithm ( const QString &  algorithm)
inline

Definition at line 40 of file e2ee_common.h.

◆ linkifyUrls()

QUOTIENT_API void Quotient::linkifyUrls ( QString &  htmlEscapedText)

Convert what looks like a URL or a Matrix ID to an HTML hyperlink

◆ loadEvent() [1/2]

template<EventClass EventT>
event_ptr_tt<EventT> Quotient::loadEvent ( const QJsonObject &  fullJson)
inline

Create an event with proper type from a JSON object.

Use this factory template to detect the type from the JSON object contents (the detected event type should derive from the template parameter type) and create an event object of that type.

Definition at line 200 of file event.h.

◆ loadEvent() [2/2]

template<EventClass EventT>
event_ptr_tt<EventT> Quotient::loadEvent ( const QString &  matrixType,
const auto &...  otherBasicJsonParams 
)
inline

Create an event from a type string and content JSON.

Use this template to resolve the C++ type from the Matrix type string in matrixType and create an event of that type by passing all parameters to EventT::basicJson().

Definition at line 212 of file event.h.

◆ lowerBoundMemberIndex() [1/2]

template<template< class > class ContT>
ContT<QString>::size_type Quotient::lowerBoundMemberIndex ( const ContT< QString > &  c,
const auto &  v,
const Room r,
MemberSorter  ms = {} 
)
inline

Definition at line 942 of file room.h.

◆ lowerBoundMemberIndex() [2/2]

template<template< class > class ContT>
ContT<RoomMember>::size_type Quotient::lowerBoundMemberIndex ( const ContT< RoomMember > &  c,
const auto &  v,
MemberSorter  ms = {} 
)
inline

Definition at line 934 of file room.h.

◆ majorVersion()

QUOTIENT_API int Quotient::majorVersion ( )

◆ makeCStruct()

template<typename T >
auto Quotient::makeCStruct ( T *(*)(void *)  constructor,
size_t(*)()  sizeFn,
auto  destructor 
)
inline

Create a C structure with pre-programmed deletion logic.

This facility function creates a CStructPtr that owns the pointer returned by constructor. The memory passed to constructor is allocated as an array of bytes; the size of that array is determined by calling sizeFn. Finally, since the returned pointer is owning, it also stores the corresponding CStructDeleter instance; when called at destruction of the owning pointer, this deleter first calls destructor passing the original C pointer returned by constructor; and then deletes the allocated array of bytes.

Definition at line 243 of file util.h.

◆ makeEvent()

template<EventClass EventT, typename... ArgTs>
event_ptr_tt<EventT> Quotient::makeEvent ( ArgTs &&...  args)
inline

Create an event of arbitrary type from its arguments.

This should not be used to load events from JSON - use loadEvent() for that.

See also
loadEvent

Definition at line 180 of file event.h.

◆ makeImpl()

template<typename ImplType , typename TypeToDelete = ImplType, typename... ArgTs>
ImplPtr<ImplType, TypeToDelete> Quotient::makeImpl ( ArgTs &&...  args)
inline

make_unique for ImplPtr

Since std::make_unique is not compatible with ImplPtr, this should be used in constructors of frontend classes to create implementation instances.

Definition at line 192 of file util.h.

◆ memberMatcher()

auto Quotient::memberMatcher ( auto  substr,
Qt::CaseSensitivity  cs = Qt::CaseSensitive 
)
inline

A factory to get a functional object matching room members against a substring.

This is a convenience wrapper to use RoomMember::matches() in standard algorithms.

Definition at line 208 of file roommember.h.

◆ minorVersion()

QUOTIENT_API int Quotient::minorVersion ( )

◆ mostSpecificMetaType()

template<EventClass EventT>
constexpr const auto& Quotient::mostSpecificMetaType ( )
constexpr

Definition at line 186 of file event.h.

◆ operator!=()

bool Quotient::operator!= ( const LoginFlow lhs,
const LoginFlow rhs 
)
inline

Definition at line 72 of file connection.h.

◆ operator""_ls()

constexpr auto Quotient::operator""_ls ( const char *  s,
std::size_t  size 
)
constexpr

Definition at line 61 of file util.h.

◆ operator<()

bool Quotient::operator< ( TagRecord  lhs,
TagRecord  rhs 
)
inline

Definition at line 17 of file accountdataevents.h.

◆ operator<<() [1/4]

QDebug& Quotient::operator<< ( QDebug &  d,
const TimelineItem ti 
)
inline

Definition at line 132 of file eventitem.h.

◆ operator<<() [2/4]

QUOTIENT_API QDebug Quotient::operator<< ( QDebug  dbg,
const EventStats es 
)

◆ operator<<() [3/4]

QUOTIENT_API QDebug Quotient::operator<< ( QDebug  dbg,
const RoomSummary rs 
)

◆ operator<<() [4/4]

QDebug Quotient::operator<< ( QDebug  dhg,
const DevicesList devicesList 
)

◆ operator==() [1/2]

bool Quotient::operator== ( const AbstractEventMetaType lhs,
const AbstractEventMetaType rhs 
)
inline

Definition at line 84 of file event.h.

◆ operator==() [2/2]

bool Quotient::operator== ( const LoginFlow lhs,
const LoginFlow rhs 
)
inline

Definition at line 67 of file connection.h.

◆ Overloads()

template<typename... FunctorTs>
Quotient::Overloads ( FunctorTs &&  ...) -> Overloads< FunctorTs... >

◆ patchVersion()

QUOTIENT_API int Quotient::patchVersion ( )

◆ pbkdf2HmacSha512()

QUOTIENT_API SslExpected<key_material_t> Quotient::pbkdf2HmacSha512 ( const QByteArray &  passphrase,
const QByteArray &  salt,
int  iterations 
)

Generate a key out of the given passphrase.

◆ prettyPrint()

QUOTIENT_API QString Quotient::prettyPrint ( const QString &  plainText)

Pretty-print plain text into HTML

This includes HTML escaping of <,>,",& and calling linkifyUrls()

◆ QT_IGNORE_DEPRECATIONS()

Quotient::QT_IGNORE_DEPRECATIONS ( template< typename U > asKeyValueRange(U &) -> asKeyValueRange< U & >;template< typename U > asKeyValueRange(U &&) -> asKeyValueRange< U >;  )

A replica of std::find_first_of that returns a pair of iterators

Convenient for cases when you need to know which particular "first of" [sFirst, sLast) has been found in [first, last).

◆ requires()

template<typename T , typename E >
Quotient::requires ( !std::is_same_v< T, E >  )

A minimal subset of std::expected from C++23.

Definition at line 13 of file expected.h.

◆ sanitized()

QUOTIENT_API QString Quotient::sanitized ( const QString &  plainText)

Sanitize the text before showing in HTML

This does toHtmlEscaped() and removes Unicode BiDi marks.

◆ serverPart()

QUOTIENT_API QString Quotient::serverPart ( const QString &  mxId)

Extract the serverpart from MXID

◆ setUrlInSourceInfo()

QUOTIENT_API void Quotient::setUrlInSourceInfo ( FileSourceInfo fsi,
const QUrl &  newUrl 
)

◆ stringToHueF()

QUOTIENT_API qreal Quotient::stringToHueF ( const QString &  s)

Hue color component of based of the hash of the string.

The implementation is based on XEP-0392: https://xmpp.org/extensions/xep-0392.html Naming and range are the same as QColor's hueF method: https://doc.qt.io/qt-5/qcolor.html#integer-vs-floating-point-precision

◆ swap()

void Quotient::swap ( ReadReceipt lhs,
ReadReceipt rhs 
)
inline

Definition at line 96 of file room.h.

◆ switchOnType() [1/2]

template<EventClass BaseT, typename TailT >
auto Quotient::switchOnType ( const BaseT &  event,
TailT &&  tail 
)
inline

Definition at line 563 of file event.h.

◆ switchOnType() [2/2]

template<typename FnT1 , typename... FnTs>
auto Quotient::switchOnType ( const EventClass auto &  event,
FnT1 &&  fn1,
FnTs &&...  fns 
)
inline

Definition at line 578 of file event.h.

◆ terse()

QDebug Quotient::terse ( QDebug  dbg)
inline

Suppress full qualification of enums/QFlags when logging.

Definition at line 313 of file util.h.

◆ toJson() [1/7]

template<>
auto Quotient::toJson ( const EventContent::AliasesEventContent c)
inline

Definition at line 26 of file roomcanonicalaliasevent.h.

◆ toJson() [2/7]

QUOTIENT_API QJsonObject Quotient::toJson ( const EventsWithReceipts ewrs)

◆ toJson() [3/7]

QJsonValue Quotient::toJson ( const QDate &  val)
inline

Definition at line 265 of file converters.h.

◆ toJson() [4/7]

QJsonValue Quotient::toJson ( const QDateTime &  val)
inline

Definition at line 255 of file converters.h.

◆ toJson() [5/7]

QJsonObject QUOTIENT_API Quotient::toJson ( const QVariantHash &  vh)

◆ toJson() [6/7]

template<typename... Ts>
QJsonValue Quotient::toJson ( const std::variant< Ts... > &  v)
inline

Definition at line 295 of file converters.h.

◆ toJson() [7/7]

template<typename T >
auto Quotient::toJson ( const T &  pod)
inline

Definition at line 91 of file converters.h.

◆ toSnakeCase()

auto Quotient::toSnakeCase ( QLatin1String  s)
inline

Definition at line 551 of file converters.h.

◆ unsignedSize()

size_t Quotient::unsignedSize ( const auto &  qtBuffer)
inline

Get a size of Qt container coerced to size_t.

It's a safe cast since size_t can always accommodate the range between 0 and SIZE_MAX / 2 - 1 that Qt containers support; yet compilers complain...

Definition at line 77 of file e2ee_common.h.

◆ verifyIdentitySignature()

QUOTIENT_API bool Quotient::verifyIdentitySignature ( const DeviceKeys deviceKeys,
const QString &  deviceId,
const QString &  userId 
)

◆ versionString()

QUOTIENT_API QString Quotient::versionString ( )

◆ viewAsByteArray()

auto Quotient::viewAsByteArray ( const auto &  aRange) -> auto requires (sizeof(*aRange.data()) == sizeof(char))
inline

Definition at line 156 of file e2ee_common.h.

◆ visitResource()

QUOTIENT_API UriResolveResult Quotient::visitResource ( Connection account,
const Uri uri,
std::function< UriResolveResult(User *, QString)>  userHandler,
std::function< void(Room *, QString)>  roomEventHandler,
std::function< void(Connection *, QString, QStringList)>  joinHandler,
std::function< bool(const QUrl &)>  nonMatrixHandler 
)

Resolve the resource and invoke an action on it, via function objects.

This function encapsulates the logic of resolving a Matrix identifier or URI into a Quotient object (or objects) and calling an appropriate handler on it. Unlike UriResolverBase it accepts the list of handlers from the caller; internally it's uses a minimal UriResolverBase class

Parameters
accountThe connection used as a context to resolve the identifier
uriA URI that can represent a Matrix entity
userHandlerCalled when the passed URI identifies a Matrix user
roomEventHandlerCalled when the passed URI identifies a room or an event in a room
joinHandlerCalled when the passed URI has action() == "join" and identifies a room that the user defined by the Connection argument is not a member of
nonMatrixHandlerCalled when the passed URI has type() == NonMatrix; should return true if the URI is considered resolved, false otherwise
See also
UriResolverBase, UriDispatcher

◆ zeroedByteArray()

QByteArray Quotient::zeroedByteArray ( QByteArray::size_type  n = 32)
inline

Definition at line 59 of file cryptoutils.h.

◆ zeroes()

template<size_t N, typename T = uint8_t>
consteval std::array<T, N> Quotient::zeroes ( )

Definition at line 61 of file cryptoutils.h.

◆ ZeroImpl()

template<typename ImplType , typename TypeToDelete = ImplType>
constexpr ImplPtr<ImplType, TypeToDelete> Quotient::ZeroImpl ( )
constexpr

Definition at line 209 of file util.h.

Variable Documentation

◆ Aes256KeySize

constexpr auto Quotient::Aes256KeySize = 32u
constexpr

Definition at line 22 of file cryptoutils.h.

◆ AesBlockSize

constexpr auto Quotient::AesBlockSize = 16u
constexpr

Definition at line 23 of file cryptoutils.h.

◆ AlgorithmKey

constexpr auto Quotient::AlgorithmKey = "algorithm"_ls
inlineconstexpr

Definition at line 26 of file e2ee_common.h.

◆ AlgorithmKeyL

constexpr auto Quotient::AlgorithmKeyL = "algorithm"_ls
inlineconstexpr

Definition at line 22 of file e2ee_common.h.

◆ BodyKey

constexpr auto Quotient::BodyKey = "body"_ls
inlineconstexpr

Definition at line 19 of file event.h.

◆ CiphertextKey

constexpr auto Quotient::CiphertextKey = "ciphertext"_ls
inlineconstexpr

Definition at line 10 of file encryptedevent.h.

◆ ContentKey

constexpr auto Quotient::ContentKey = "content"_ls
inlineconstexpr

Definition at line 20 of file event.h.

◆ Curve25519Key

constexpr auto Quotient::Curve25519Key = "curve25519"_ls
inlineconstexpr

Definition at line 31 of file e2ee_common.h.

◆ DefaultPbkdf2KeyLength

constexpr auto Quotient::DefaultPbkdf2KeyLength = 32u
constexpr

Definition at line 21 of file cryptoutils.h.

◆ DeviceIdKey

constexpr auto Quotient::DeviceIdKey = "device_id"_ls
inlineconstexpr

Definition at line 12 of file encryptedevent.h.

◆ Ed25519Key

constexpr auto Quotient::Ed25519Key = "ed25519"_ls
inlineconstexpr

Definition at line 30 of file e2ee_common.h.

◆ Event

Definition at line 51 of file accountdataevents.h.

◆ EventClass

template<typename EventT , typename BaseEventT = Event>
concept Quotient::EventClass = std::derived_from<EventT, BaseEventT>

Definition at line 36 of file event.h.

◆ EventIdKey

constexpr auto Quotient::EventIdKey = "event_id"_ls
inlineconstexpr

Definition at line 21 of file event.h.

◆ FavouriteTag

constexpr auto Quotient::FavouriteTag = "m.favourite"_ls
inlineconstexpr

Definition at line 9 of file accountdataevents.h.

◆ fn_arg_count_v

template<typename FnT >
constexpr auto Quotient::fn_arg_count_v
constexpr
Initial value:
=
std::tuple_size_v<typename function_traits<FnT>::arg_types>

Definition at line 90 of file function_traits.h.

◆ ForwardIt

Quotient::ForwardIt

Definition at line 151 of file util.h.

◆ HighlightCountKey

constexpr auto Quotient::HighlightCountKey = "highlight_count"_ls
inlineconstexpr

Definition at line 15 of file syncdata.h.

◆ HmacKeySize

constexpr auto Quotient::HmacKeySize = 32u
constexpr

Definition at line 24 of file cryptoutils.h.

◆ HmacSha256Code

constexpr auto Quotient::HmacSha256Code = "hkdf-hmac-sha256"_ls
inlineconstexpr

Definition at line 75 of file keyverificationevent.h.

◆ HmacSha256V2Code

constexpr auto Quotient::HmacSha256V2Code = "hkdf-hmac-sha256.v2"_ls
inlineconstexpr

Definition at line 76 of file keyverificationevent.h.

◆ IfNotEmpty

constexpr bool Quotient::IfNotEmpty = false
constexpr

Definition at line 444 of file converters.h.

◆ ignored_user_list

m Quotient::ignored_user_list

Definition at line 51 of file accountdataevents.h.

◆ ignoredUsers

m Quotient::ignoredUsers

Definition at line 52 of file accountdataevents.h.

◆ JoinStateStrings

constexpr std::array Quotient::JoinStateStrings
constexpr
Initial value:

Definition at line 87 of file quotient_common.h.

◆ Keyed_State_Event

template<typename EvT >
concept Quotient::Keyed_State_Event = EvT::needsStateKey

Definition at line 115 of file stateevent.h.

◆ Keyed_State_Fn

template<typename FnT , class EvT = std::decay_t<fn_arg_t<FnT>>>
concept Quotient::Keyed_State_Fn = EvT::needsStateKey

Definition at line 19 of file roomstateview.h.

◆ Keyless_State_Event

template<typename EvT >
concept Quotient::Keyless_State_Event = !EvT::needsStateKey

Definition at line 136 of file stateevent.h.

◆ Keyless_State_Fn

template<typename FnT , class EvT = std::decay_t<fn_arg_t<FnT>>>
concept Quotient::Keyless_State_Fn = !EvT::needsStateKey

Definition at line 22 of file roomstateview.h.

◆ LowPriorityTag

constexpr auto Quotient::LowPriorityTag = "m.lowpriority"_ls
inlineconstexpr

Definition at line 10 of file accountdataevents.h.

◆ MegolmV1AesSha2AlgoKey

constexpr auto Quotient::MegolmV1AesSha2AlgoKey = "m.megolm.v1.aes-sha2"_ls
inlineconstexpr

Definition at line 35 of file e2ee_common.h.

◆ MembershipStrings

constexpr std::array Quotient::MembershipStrings
constexpr
Initial value:
{
"join"_ls, "leave"_ls, "invite"_ls, "knock"_ls, "ban"_ls
}

Definition at line 68 of file quotient_common.h.

◆ NewUnreadCountKey

constexpr auto Quotient::NewUnreadCountKey = "org.matrix.msc2654.unread_count"_ls
inlineconstexpr

Definition at line 14 of file syncdata.h.

◆ none

constexpr auto Quotient::none = std::nullopt
constexpr

Definition at line 16 of file omittable.h.

◆ OlmV1Curve25519AesSha2AlgoKey

constexpr auto Quotient::OlmV1Curve25519AesSha2AlgoKey = "m.olm.v1.curve25519-aes-sha2"_ls
inlineconstexpr

Definition at line 34 of file e2ee_common.h.

◆ PartiallyReadCountKey

constexpr auto Quotient::PartiallyReadCountKey = "x-quotient.since_fully_read_count"_ls
inlineconstexpr

Definition at line 13 of file syncdata.h.

◆ pinned_events

m room Quotient::pinned_events

Definition at line 29 of file simplestateevents.h.

◆ pinnedEvents

m room Quotient::pinnedEvents

Definition at line 30 of file simplestateevents.h.

◆ PrevContentKey

constexpr auto Quotient::PrevContentKey = "prev_content"_ls
inlineconstexpr

Definition at line 26 of file event.h.

◆ ProfilerMinNsecs

constexpr qint64 Quotient::ProfilerMinNsecs
constexpr
Initial value:
=
200
* 1000

Definition at line 318 of file util.h.

◆ QSet< QString >

m Quotient::QSet< QString >

Definition at line 51 of file accountdataevents.h.

◆ QStringList

m room Quotient::QStringList

Definition at line 30 of file simplestateevents.h.

◆ RedactedCauseKey

constexpr auto Quotient::RedactedCauseKey = "redacted_because"_ls
inlineconstexpr

Definition at line 25 of file event.h.

◆ RelatesToKey

constexpr auto Quotient::RelatesToKey = "m.relates_to"_ls
inlineconstexpr

Definition at line 10 of file eventrelation.h.

◆ RelTypeKey

constexpr auto Quotient::RelTypeKey = "rel_type"_ls
inlineconstexpr

Definition at line 11 of file eventrelation.h.

◆ RoomIdKey

constexpr auto Quotient::RoomIdKey = "room_id"_ls
inlineconstexpr

Definition at line 23 of file event.h.

◆ RoomTypeStrings

constexpr std::array Quotient::RoomTypeStrings { "m.space"_ls }
constexpr

Definition at line 117 of file quotient_common.h.

◆ RotationPeriodMsgsKey

constexpr auto Quotient::RotationPeriodMsgsKey = "rotation_period_msgs"_ls
inlineconstexpr

Definition at line 28 of file e2ee_common.h.

◆ RotationPeriodMsgsKeyL

constexpr auto Quotient::RotationPeriodMsgsKeyL = "rotation_period_msgs"_ls
inlineconstexpr

Definition at line 24 of file e2ee_common.h.

◆ RotationPeriodMsKey

constexpr auto Quotient::RotationPeriodMsKey = "rotation_period_ms"_ls
inlineconstexpr

Definition at line 27 of file e2ee_common.h.

◆ RotationPeriodMsKeyL

constexpr auto Quotient::RotationPeriodMsKeyL = "rotation_period_ms"_ls
inlineconstexpr

Definition at line 23 of file e2ee_common.h.

◆ SasV1Method

constexpr auto Quotient::SasV1Method = "m.sas.v1"_ls
inlineconstexpr

Definition at line 10 of file keyverificationevent.h.

◆ SenderKey

constexpr auto Quotient::SenderKey = "sender"_ls
inlineconstexpr

Definition at line 22 of file event.h.

◆ SenderKeyKey

constexpr auto Quotient::SenderKeyKey = "sender_key"_ls
inlineconstexpr

Definition at line 11 of file encryptedevent.h.

◆ ServerNoticeTag

constexpr auto Quotient::ServerNoticeTag = "m.server_notice"_ls
inlineconstexpr

Definition at line 11 of file accountdataevents.h.

◆ SessionIdKey

constexpr auto Quotient::SessionIdKey = "session_id"_ls
inlineconstexpr

Definition at line 13 of file encryptedevent.h.

◆ SignedCurve25519Key

constexpr auto Quotient::SignedCurve25519Key = "signed_curve25519"_ls
inlineconstexpr

Definition at line 32 of file e2ee_common.h.

◆ StateKeyKey

constexpr auto Quotient::StateKeyKey = "state_key"_ls
inlineconstexpr

Definition at line 27 of file event.h.

◆ SupportedAlgorithms

constexpr std::array Quotient::SupportedAlgorithms
constexpr
Initial value:
constexpr auto OlmV1Curve25519AesSha2AlgoKey
Definition: e2ee_common.h:34
constexpr auto MegolmV1AesSha2AlgoKey
Definition: e2ee_common.h:35

Definition at line 37 of file e2ee_common.h.

◆ SupportedMacs

constexpr std::array Quotient::SupportedMacs { HmacSha256Code, HmacSha256V2Code }
constexpr

Definition at line 77 of file keyverificationevent.h.

◆ TypeKey

constexpr auto Quotient::TypeKey = "type"_ls
inlineconstexpr

Definition at line 18 of file event.h.

◆ UnreadNotificationsKey

constexpr auto Quotient::UnreadNotificationsKey = "unread_notifications"_ls
inlineconstexpr

Definition at line 12 of file syncdata.h.

◆ UnsignedKey

constexpr auto Quotient::UnsignedKey = "unsigned"_ls
inlineconstexpr

Definition at line 24 of file event.h.