Documentation ¶
Index ¶
- Variables
- func BackgroundContext(sourceCtx context.Context) context.Context
- func Context(ctx context.Context, mode keybase1.TLFIdentifyBehavior, ...) context.Context
- func CtxAddLogTags(ctx context.Context) context.Context
- func IdentifyMode(ctx context.Context) (ib keybase1.TLFIdentifyBehavior, breaks *[]keybase1.TLFIdentifyFailure, ...)
- func NewConversationSource(g *libkb.GlobalContext, typ string, boxer *Boxer, storage *storage.Storage, ...) interfaces.ConversationSource
- func NewInboxSource(g *libkb.GlobalContext, typ string, ri func() chat1.RemoteInterface, ...) interfaces.InboxSource
- type AttachmentInfo
- type AttachmentStash
- type AttachmentStore
- func (a *AttachmentStore) DeleteAsset(ctx context.Context, params chat1.S3Params, signer s3.Signer, ...) error
- func (a *AttachmentStore) DeleteAssets(ctx context.Context, params chat1.S3Params, signer s3.Signer, ...) error
- func (a *AttachmentStore) DownloadAsset(ctx context.Context, params chat1.S3Params, asset chat1.Asset, w io.Writer, ...) error
- func (a *AttachmentStore) PutS3(ctx context.Context, r io.Reader, size int64, task *UploadTask, ...) (*PutS3Result, error)
- func (a *AttachmentStore) UploadAsset(ctx context.Context, task *UploadTask) (chat1.Asset, error)
- type BlockingLocalizer
- type BlockingSender
- func (s *BlockingSender) Prepare(ctx context.Context, plaintext chat1.MessagePlaintext, ...) (*chat1.MessageBoxed, []chat1.Asset, error)
- func (s *BlockingSender) Send(ctx context.Context, convID chat1.ConversationID, msg chat1.MessagePlaintext, ...) (chat1.OutboxID, chat1.MessageID, *chat1.RateLimit, error)
- func (s *BlockingSender) Sign(payload []byte) ([]byte, error)
- type BodyHashInvalid
- type Boxer
- func (b *Boxer) BoxMessage(ctx context.Context, msg chat1.MessagePlaintext, ...) (*chat1.MessageBoxed, error)
- func (b *Boxer) UnboxMessage(ctx context.Context, boxed chat1.MessageBoxed, convID chat1.ConversationID, ...) (chat1.MessageUnboxed, UnboxingError)
- func (b *Boxer) UnboxMessages(ctx context.Context, boxed []chat1.MessageBoxed, convID chat1.ConversationID, ...) (unboxed []chat1.MessageUnboxed, err error)
- func (b *Boxer) UnboxThread(ctx context.Context, boxed chat1.ThreadViewBoxed, convID chat1.ConversationID, ...) (thread chat1.ThreadView, err error)
- func (b *Boxer) ValidSenderKey(ctx context.Context, sender gregor1.UID, key []byte, ctime gregor1.Time) (found, validAtCTime bool, revoked *gregor1.Time, unboxErr UnboxingError)
- type BoxingCryptKeysError
- type BoxingError
- type BufferSource
- type ByMsgID
- type ChatThreadConsistencyError
- type ConsistencyErrorCode
- type Decrypter
- type Deliverer
- func (s *Deliverer) Connected(ctx context.Context)
- func (s *Deliverer) Disconnected(ctx context.Context)
- func (s *Deliverer) ForceDeliverLoop(ctx context.Context)
- func (s *Deliverer) IsOffline() bool
- func (s *Deliverer) Queue(ctx context.Context, convID chat1.ConversationID, msg chat1.MessagePlaintext, ...) (chat1.OutboxRecord, error)
- func (s *Deliverer) SetClock(clock clockwork.Clock)
- func (s *Deliverer) SetSender(sender Sender)
- func (s *Deliverer) Start(ctx context.Context, uid gregor1.UID)
- func (s *Deliverer) Stop(ctx context.Context) chan struct{}
- type DelivererInfoError
- type DelivererSecretUI
- type Encrypter
- type ErrorWrapper
- type FileStash
- type HeaderMismatchError
- type HybridConversationSource
- func (s *HybridConversationSource) Clear(convID chat1.ConversationID, uid gregor1.UID) error
- func (s HybridConversationSource) Connected(ctx context.Context)
- func (s HybridConversationSource) Disconnected(ctx context.Context)
- func (s *HybridConversationSource) GetMessages(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, ...) ([]chat1.MessageUnboxed, error)
- func (s *HybridConversationSource) GetMessagesWithRemotes(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, ...) ([]chat1.MessageUnboxed, error)
- func (s HybridConversationSource) IsOffline() bool
- func (s *HybridConversationSource) Pull(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, ...) (thread chat1.ThreadView, rl []*chat1.RateLimit, err error)
- func (s *HybridConversationSource) PullLocalOnly(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, ...) (chat1.ThreadView, error)
- func (s *HybridConversationSource) Push(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, ...) (chat1.MessageUnboxed, bool, error)
- func (s HybridConversationSource) SetRemoteInterface(ri func() chat1.RemoteInterface)
- func (s HybridConversationSource) SetTlfInterface(ti func() keybase1.TlfInterface)
- func (s HybridConversationSource) TransformSupersedes(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, ...) ([]chat1.MessageUnboxed, error)
- type HybridInboxSource
- func (b HybridInboxSource) Connected(ctx context.Context)
- func (b HybridInboxSource) Disconnected(ctx context.Context)
- func (b HybridInboxSource) IsOffline() bool
- func (s *HybridInboxSource) NewConversation(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, ...) (err error)
- func (s *HybridInboxSource) NewMessage(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, ...) (conv *chat1.ConversationLocal, err error)
- func (s *HybridInboxSource) Read(ctx context.Context, uid gregor1.UID, localizer interfaces.ChatLocalizer, ...) (inbox chat1.Inbox, rl *chat1.RateLimit, err error)
- func (s *HybridInboxSource) ReadMessage(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, ...) (conv *chat1.ConversationLocal, err error)
- func (s *HybridInboxSource) ReadUnverified(ctx context.Context, uid gregor1.UID, useLocalData bool, ...) (res chat1.Inbox, rl *chat1.RateLimit, err error)
- func (b HybridInboxSource) SetRemoteInterface(ri func() chat1.RemoteInterface)
- func (s *HybridInboxSource) SetStatus(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, ...) (conv *chat1.ConversationLocal, err error)
- func (b HybridInboxSource) SetTlfInterface(ti func() keybase1.TlfInterface)
- func (s *HybridInboxSource) TlfFinalize(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, ...) (convs []chat1.ConversationLocal, err error)
- type IdentifyChangedHandler
- type IdentifyNotifier
- type KeyFinder
- type KeyFinderImpl
- type NonblockInboxResult
- type NonblockingLocalizer
- type NonblockingSender
- func (s *NonblockingSender) Prepare(ctx context.Context, plaintext chat1.MessagePlaintext, ...) (*chat1.MessageBoxed, []chat1.Asset, error)
- func (s *NonblockingSender) Send(ctx context.Context, convID chat1.ConversationID, msg chat1.MessagePlaintext, ...) (chat1.OutboxID, chat1.MessageID, *chat1.RateLimit, error)
- type OfflineError
- type PermanentUnboxingError
- type PreviewRes
- type ProgressReporter
- type PushHandler
- type PutS3Result
- type ReadResetter
- type RemoteConversationSource
- func (s *RemoteConversationSource) Clear(convID chat1.ConversationID, uid gregor1.UID) error
- func (s RemoteConversationSource) Connected(ctx context.Context)
- func (s RemoteConversationSource) Disconnected(ctx context.Context)
- func (s *RemoteConversationSource) GetMessages(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, ...) ([]chat1.MessageUnboxed, error)
- func (s *RemoteConversationSource) GetMessagesWithRemotes(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, ...) ([]chat1.MessageUnboxed, error)
- func (s RemoteConversationSource) IsOffline() bool
- func (s *RemoteConversationSource) Pull(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, ...) (chat1.ThreadView, []*chat1.RateLimit, error)
- func (s *RemoteConversationSource) PullLocalOnly(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, ...) (chat1.ThreadView, error)
- func (s *RemoteConversationSource) Push(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, ...) (chat1.MessageUnboxed, bool, error)
- func (s RemoteConversationSource) SetRemoteInterface(ri func() chat1.RemoteInterface)
- func (s RemoteConversationSource) SetTlfInterface(ti func() keybase1.TlfInterface)
- func (s RemoteConversationSource) TransformSupersedes(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, ...) ([]chat1.MessageUnboxed, error)
- type RemoteInboxSource
- func (b RemoteInboxSource) Connected(ctx context.Context)
- func (b RemoteInboxSource) Disconnected(ctx context.Context)
- func (b RemoteInboxSource) IsOffline() bool
- func (s *RemoteInboxSource) NewConversation(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, ...) error
- func (s *RemoteInboxSource) NewMessage(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, ...) (*chat1.ConversationLocal, error)
- func (s *RemoteInboxSource) Read(ctx context.Context, uid gregor1.UID, localizer interfaces.ChatLocalizer, ...) (chat1.Inbox, *chat1.RateLimit, error)
- func (s *RemoteInboxSource) ReadMessage(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, ...) (*chat1.ConversationLocal, error)
- func (s *RemoteInboxSource) ReadUnverified(ctx context.Context, uid gregor1.UID, useLocalData bool, ...) (chat1.Inbox, *chat1.RateLimit, error)
- func (b RemoteInboxSource) SetRemoteInterface(ri func() chat1.RemoteInterface)
- func (s *RemoteInboxSource) SetStatus(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, ...) (*chat1.ConversationLocal, error)
- func (b RemoteInboxSource) SetTlfInterface(ti func() keybase1.TlfInterface)
- func (s *RemoteInboxSource) TlfFinalize(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, ...) ([]chat1.ConversationLocal, error)
- type Sender
- type SignDecrypter
- type SignEncrypter
- func (s *SignEncrypter) Encrypt(r io.Reader) (io.Reader, error)
- func (s *SignEncrypter) EncryptKey() []byte
- func (s *SignEncrypter) EncryptResume(r io.Reader, nonce signencrypt.Nonce, encKey signencrypt.SecretboxKey, ...) (io.Reader, error)
- func (s *SignEncrypter) EncryptWithNonce(r io.Reader, nonce signencrypt.Nonce) (io.Reader, error)
- func (s *SignEncrypter) EncryptedLen(size int) int
- func (s *SignEncrypter) SignKey() []byte
- func (s *SignEncrypter) VerifyKey() []byte
- type StashKey
- type Syncer
- type TLFInfo
- type TransientUnboxingError
- type UnboxingError
- type UploadTask
- type VersionError
Constants ¶
This section is empty.
Variables ¶
var ErrAbortOnPartMismatch = errors.New("local part mismatch, aborting upload")
ErrAbortOnPartMismatch is returned when there is a mismatch between a current part and a previous attempt part. If ErrAbortOnPartMismatch is returned, the caller should abort the upload attempt and start from scratch.
var ErrPartNotFound = errors.New("part does not exist in stash")
Functions ¶
func BackgroundContext ¶ added in v1.0.19
func Context ¶ added in v1.0.19
func Context(ctx context.Context, mode keybase1.TLFIdentifyBehavior, breaks *[]keybase1.TLFIdentifyFailure, notifier *IdentifyNotifier) context.Context
func IdentifyMode ¶ added in v1.0.19
func IdentifyMode(ctx context.Context) (ib keybase1.TLFIdentifyBehavior, breaks *[]keybase1.TLFIdentifyFailure, ok bool)
func NewConversationSource ¶
func NewConversationSource(g *libkb.GlobalContext, typ string, boxer *Boxer, storage *storage.Storage, ri func() chat1.RemoteInterface, si func() libkb.SecretUI) interfaces.ConversationSource
func NewInboxSource ¶ added in v1.0.19
func NewInboxSource(g *libkb.GlobalContext, typ string, ri func() chat1.RemoteInterface, si func() libkb.SecretUI, ti func() keybase1.TlfInterface) interfaces.InboxSource
Types ¶
type AttachmentInfo ¶ added in v1.0.19
type AttachmentInfo struct { ObjectKey string // s3 destination EncKey signencrypt.SecretboxKey // encryption key SignKey signencrypt.SignKey // signing key VerifyKey signencrypt.VerifyKey // verification key Parts map[int]string // map of parts uploaded to S3, key == part number, value == hash of ciphertext StartedAt time.Time // when the upload started }
type AttachmentStash ¶ added in v1.0.19
type AttachmentStore ¶ added in v1.0.19
type AttachmentStore struct {
// contains filtered or unexported fields
}
func NewAttachmentStore ¶ added in v1.0.19
func NewAttachmentStore(log logger.Logger, runtimeDir string) *AttachmentStore
NewAttachmentStore creates a standard AttachmentStore that uses a real S3 connection.
func (*AttachmentStore) DeleteAsset ¶ added in v1.0.19
func (*AttachmentStore) DeleteAssets ¶ added in v1.0.19
func (*AttachmentStore) DownloadAsset ¶ added in v1.0.19
func (a *AttachmentStore) DownloadAsset(ctx context.Context, params chat1.S3Params, asset chat1.Asset, w io.Writer, signer s3.Signer, progress ProgressReporter) error
DownloadAsset gets an object from S3 as described in asset.
func (*AttachmentStore) PutS3 ¶ added in v1.0.19
func (a *AttachmentStore) PutS3(ctx context.Context, r io.Reader, size int64, task *UploadTask, previous *AttachmentInfo) (*PutS3Result, error)
PutS3 uploads the data in Reader r to S3. It chooses whether to use putSingle or putMultiPipeline based on the size of the object.
func (*AttachmentStore) UploadAsset ¶ added in v1.0.19
func (a *AttachmentStore) UploadAsset(ctx context.Context, task *UploadTask) (chat1.Asset, error)
type BlockingLocalizer ¶ added in v1.0.19
type BlockingLocalizer struct { libkb.Contextified // contains filtered or unexported fields }
func NewBlockingLocalizer ¶ added in v1.0.19
func NewBlockingLocalizer(g *libkb.GlobalContext, getTlfInterface func() keybase1.TlfInterface) *BlockingLocalizer
func (*BlockingLocalizer) Localize ¶ added in v1.0.19
func (b *BlockingLocalizer) Localize(ctx context.Context, uid gregor1.UID, inbox chat1.Inbox) (res []chat1.ConversationLocal, err error)
func (*BlockingLocalizer) Name ¶ added in v1.0.19
func (b *BlockingLocalizer) Name() string
func (*BlockingLocalizer) SetOffline ¶ added in v1.0.19
func (b *BlockingLocalizer) SetOffline()
type BlockingSender ¶ added in v1.0.19
type BlockingSender struct { libkb.Contextified utils.DebugLabeler // contains filtered or unexported fields }
func NewBlockingSender ¶ added in v1.0.19
func NewBlockingSender(g *libkb.GlobalContext, boxer *Boxer, store *AttachmentStore, getRi func() chat1.RemoteInterface, getSecretUI func() libkb.SecretUI) *BlockingSender
func (*BlockingSender) Prepare ¶ added in v1.0.19
func (s *BlockingSender) Prepare(ctx context.Context, plaintext chat1.MessagePlaintext, convID *chat1.ConversationID) (*chat1.MessageBoxed, []chat1.Asset, error)
Prepare a message to be sent. Returns (boxedMessage, pendingAssetDeletes, error)
type BodyHashInvalid ¶ added in v1.0.19
type BodyHashInvalid struct{}
func (BodyHashInvalid) Error ¶ added in v1.0.19
func (e BodyHashInvalid) Error() string
type Boxer ¶
type Boxer struct { utils.DebugLabeler libkb.Contextified // contains filtered or unexported fields }
func NewBoxer ¶
func NewBoxer(g *libkb.GlobalContext, tlf func() keybase1.TlfInterface) *Boxer
func (*Boxer) BoxMessage ¶
func (b *Boxer) BoxMessage(ctx context.Context, msg chat1.MessagePlaintext, signingKeyPair libkb.NaclSigningKeyPair) (*chat1.MessageBoxed, error)
boxMessage encrypts a keybase1.MessagePlaintext into a chat1.MessageBoxed. It finds the most recent key for the TLF.
func (*Boxer) UnboxMessage ¶
func (b *Boxer) UnboxMessage(ctx context.Context, boxed chat1.MessageBoxed, convID chat1.ConversationID, finalizeInfo *chat1.ConversationFinalizeInfo) (chat1.MessageUnboxed, UnboxingError)
UnboxMessage unboxes a chat1.MessageBoxed into a chat1.MessageUnboxed. It finds the appropriate keybase1.CryptKey, decrypts the message, and verifies several things:
- The message's signature is valid.
- (TODO) The signing KID was valid when the signature was made.
- (TODO) The signing KID belongs to the sending device.
- (TODO) The sending device belongs to the sender. [Note that we do currently check the KID -> UID relationship, independent of the device ID.]
- (TODO) The sender has write permission in the TLF.
- (TODO) The TLF name, public flag, and finalized info resolve to the TLF ID.
- The conversation ID derives from the ConversationIDTriple.
- The body hash is not a replay from another message we know about.
- The prev pointers are consistent with other messages we know about.
- (TODO) The prev pointers are not absurdly ancient.
- The ClientHeader provided with the BoxedMessage matches the one we decrypt.
The first return value is unusable if the err != nil. Returns (_, err) for non-permanent errors, and (MessageUnboxedError, nil) for permanent errors. Permanent errors can be cached and must be treated as a value to deal with, whereas temporary errors are transient failures.
func (*Boxer) UnboxMessages ¶
func (b *Boxer) UnboxMessages(ctx context.Context, boxed []chat1.MessageBoxed, convID chat1.ConversationID, finalizeInfo *chat1.ConversationFinalizeInfo) (unboxed []chat1.MessageUnboxed, err error)
func (*Boxer) UnboxThread ¶
func (b *Boxer) UnboxThread(ctx context.Context, boxed chat1.ThreadViewBoxed, convID chat1.ConversationID, finalizeInfo *chat1.ConversationFinalizeInfo) (thread chat1.ThreadView, err error)
unboxThread transforms a chat1.ThreadViewBoxed to a keybase1.ThreadView.
func (*Boxer) ValidSenderKey ¶ added in v1.0.19
func (b *Boxer) ValidSenderKey(ctx context.Context, sender gregor1.UID, key []byte, ctime gregor1.Time) (found, validAtCTime bool, revoked *gregor1.Time, unboxErr UnboxingError)
ValidSenderKey checks that the key was active for sender at ctime. This trusts the server for ctime, so a colluding server could use a revoked key and this check erroneously pass. But (revoked != nil) if the key was ever revoked, so that is irrespective of ctime. Returns (validAtCtime, revoked, err)
type BoxingCryptKeysError ¶ added in v1.0.19
type BoxingCryptKeysError struct {
Err error
}
func NewBoxingCryptKeysError ¶ added in v1.0.19
func NewBoxingCryptKeysError(err error) BoxingCryptKeysError
func (BoxingCryptKeysError) Error ¶ added in v1.0.19
func (e BoxingCryptKeysError) Error() string
func (BoxingCryptKeysError) Inner ¶ added in v1.0.19
func (e BoxingCryptKeysError) Inner() error
func (BoxingCryptKeysError) IsImmediateFail ¶ added in v1.0.19
func (e BoxingCryptKeysError) IsImmediateFail() (chat1.OutboxErrorType, bool)
type BoxingError ¶ added in v1.0.19
func NewBoxingError ¶ added in v1.0.19
func NewBoxingError(msg string, perm bool) BoxingError
func (BoxingError) Error ¶ added in v1.0.19
func (e BoxingError) Error() string
func (BoxingError) IsImmediateFail ¶ added in v1.0.19
func (e BoxingError) IsImmediateFail() (chat1.OutboxErrorType, bool)
type BufferSource ¶ added in v1.0.19
type BufferSource struct {
// contains filtered or unexported fields
}
func (*BufferSource) Basename ¶ added in v1.0.19
func (b *BufferSource) Basename() string
func (*BufferSource) Close ¶ added in v1.0.19
func (b *BufferSource) Close() error
func (*BufferSource) FileSize ¶ added in v1.0.19
func (b *BufferSource) FileSize() int
func (*BufferSource) Open ¶ added in v1.0.19
func (b *BufferSource) Open(sessionID int, cli *keybase1.StreamUiClient) (ReadResetter, error)
type ByMsgID ¶ added in v1.0.19
type ByMsgID []chat1.MessageUnboxed
type ChatThreadConsistencyError ¶ added in v1.0.19
type ChatThreadConsistencyError interface { error Code() ConsistencyErrorCode }
func CheckPrevPointersAndGetUnpreved ¶
func CheckPrevPointersAndGetUnpreved(thread *chat1.ThreadView) ([]chat1.MessagePreviousPointer, ChatThreadConsistencyError)
Ingest a ThreadView, check several invariants, and produce a list of prev pointers to not-yet-pointed-to messages. Check several invariants at the same time: 1. No two messages have the same ID. 2. All prev pointers point to messages with lesser IDs. 3. All prev pointers to a message agree on that message's header hash. 4. For all messages we have locally, the hashes pointing to them are actually correct. TODO: All of this should happen in the cache instead of here all at once.
func NewChatThreadConsistencyError ¶ added in v1.0.19
func NewChatThreadConsistencyError(code ConsistencyErrorCode, msg string, formatArgs ...interface{}) ChatThreadConsistencyError
type ConsistencyErrorCode ¶ added in v1.0.19
type ConsistencyErrorCode int
const ( DuplicateID ConsistencyErrorCode = iota OutOfOrderID InconsistentHash IncorrectHash )
type Decrypter ¶
type Decrypter interface { // Decrypt takes a ciphertext reader, encryption and verify keys. // It returns a plaintext reader. It uses the constant nonce. Decrypt(ciphertext io.Reader, encKey, verifyKey []byte) (plaintext io.Reader) // DecryptWithNonce takes a ciphertext reader, nonce, encryption and verify keys. // It returns a plaintext reader. DecryptWithNonce(ciphertext io.Reader, nonce signencrypt.Nonce, encKey, verifyKey []byte) (plaintext io.Reader) }
type Deliverer ¶ added in v1.0.19
type Deliverer struct { libkb.Contextified sync.Mutex utils.DebugLabeler // contains filtered or unexported fields }
func NewDeliverer ¶ added in v1.0.19
func NewDeliverer(g *libkb.GlobalContext, sender Sender) *Deliverer
func (*Deliverer) Disconnected ¶ added in v1.0.19
func (*Deliverer) ForceDeliverLoop ¶ added in v1.0.19
func (*Deliverer) Queue ¶ added in v1.0.19
func (s *Deliverer) Queue(ctx context.Context, convID chat1.ConversationID, msg chat1.MessagePlaintext, identifyBehavior keybase1.TLFIdentifyBehavior) (chat1.OutboxRecord, error)
type DelivererInfoError ¶ added in v1.0.19
type DelivererInfoError interface {
IsImmediateFail() (chat1.OutboxErrorType, bool)
}
type DelivererSecretUI ¶ added in v1.0.19
type DelivererSecretUI struct { }
func (DelivererSecretUI) GetPassphrase ¶ added in v1.0.19
func (d DelivererSecretUI) GetPassphrase(pinentry keybase1.GUIEntryArg, terminal *keybase1.SecretEntryArg) (keybase1.GetPassphraseRes, error)
type Encrypter ¶
type Encrypter interface { // EncryptedLen returns the number of bytes that the ciphertext of // size plaintext bytes will be. EncryptedLen(size int) int // Encrypt takes a plaintext reader and returns a ciphertext reader. // It generates new keys every time it is called and uses a // constant nonce. Encrypt(plaintext io.Reader) (ciphertext io.Reader, err error) // EncryptWithNonce takes a plaintext reader and returns a ciphertext reader. // It generates new keys every time it is called and uses // the provided nonce. EncryptWithNonce(plaintext io.Reader, nonce signencrypt.Nonce) (ciphertext io.Reader, err error) // EncryptResume takes a plaintext reader and a set of keys. It // returns a ciphertext reader. It *does not* generate new keys // but uses the parameter keys. These keys should *only* be used // to encrypt the same plaintext as a previous attempt. EncryptResume(r io.Reader, nonce signencrypt.Nonce, encKey signencrypt.SecretboxKey, signKey signencrypt.SignKey, verifyKey signencrypt.VerifyKey) (io.Reader, error) // EncryptKey returns the ephemeral key that was used during the // last invocation of Encrypt. EncryptKey() []byte // VerifyKey returns the public portion of the signing key used during // the last invocation of Encrypt. It can be used for signature // verification. VerifyKey() []byte }
type ErrorWrapper ¶ added in v1.0.19
type ErrorWrapper struct {
// contains filtered or unexported fields
}
func NewErrorWrapper ¶ added in v1.0.19
func NewErrorWrapper(prefix string, err error) *ErrorWrapper
func (*ErrorWrapper) Details ¶ added in v1.0.19
func (e *ErrorWrapper) Details() string
func (*ErrorWrapper) Error ¶ added in v1.0.19
func (e *ErrorWrapper) Error() string
type FileStash ¶ added in v1.0.19
func NewFileStash ¶ added in v1.0.19
func (*FileStash) Lookup ¶ added in v1.0.19
func (f *FileStash) Lookup(key StashKey) (AttachmentInfo, bool, error)
func (*FileStash) RecordPart ¶ added in v1.0.19
type HeaderMismatchError ¶ added in v1.0.19
type HeaderMismatchError struct {
Field string
}
func NewHeaderMismatchError ¶ added in v1.0.19
func NewHeaderMismatchError(field string) HeaderMismatchError
func (HeaderMismatchError) Error ¶ added in v1.0.19
func (e HeaderMismatchError) Error() string
type HybridConversationSource ¶
type HybridConversationSource struct { libkb.Contextified utils.DebugLabeler // contains filtered or unexported fields }
func NewHybridConversationSource ¶
func NewHybridConversationSource(g *libkb.GlobalContext, b *Boxer, storage *storage.Storage, ri func() chat1.RemoteInterface, si func() libkb.SecretUI) *HybridConversationSource
func (*HybridConversationSource) Clear ¶
func (s *HybridConversationSource) Clear(convID chat1.ConversationID, uid gregor1.UID) error
func (HybridConversationSource) Disconnected ¶ added in v1.0.19
func (*HybridConversationSource) GetMessages ¶ added in v1.0.19
func (s *HybridConversationSource) GetMessages(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, msgIDs []chat1.MessageID, finalizeInfo *chat1.ConversationFinalizeInfo) ([]chat1.MessageUnboxed, error)
func (*HybridConversationSource) GetMessagesWithRemotes ¶ added in v1.0.19
func (s *HybridConversationSource) GetMessagesWithRemotes(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, msgs []chat1.MessageBoxed, finalizeInfo *chat1.ConversationFinalizeInfo) ([]chat1.MessageUnboxed, error)
func (HybridConversationSource) IsOffline ¶ added in v1.0.19
func (s HybridConversationSource) IsOffline() bool
func (*HybridConversationSource) Pull ¶
func (s *HybridConversationSource) Pull(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, query *chat1.GetThreadQuery, pagination *chat1.Pagination) (thread chat1.ThreadView, rl []*chat1.RateLimit, err error)
func (*HybridConversationSource) PullLocalOnly ¶ added in v1.0.19
func (s *HybridConversationSource) PullLocalOnly(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, query *chat1.GetThreadQuery, pagination *chat1.Pagination) (chat1.ThreadView, error)
func (*HybridConversationSource) Push ¶
func (s *HybridConversationSource) Push(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, msg chat1.MessageBoxed) (chat1.MessageUnboxed, bool, error)
func (HybridConversationSource) SetRemoteInterface ¶ added in v1.0.19
func (s HybridConversationSource) SetRemoteInterface(ri func() chat1.RemoteInterface)
func (HybridConversationSource) SetTlfInterface ¶ added in v1.0.19
func (s HybridConversationSource) SetTlfInterface(ti func() keybase1.TlfInterface)
func (HybridConversationSource) TransformSupersedes ¶ added in v1.0.19
func (s HybridConversationSource) TransformSupersedes(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, msgs []chat1.MessageUnboxed, finalizeInfo *chat1.ConversationFinalizeInfo) ([]chat1.MessageUnboxed, error)
type HybridInboxSource ¶ added in v1.0.19
type HybridInboxSource struct { libkb.Contextified utils.DebugLabeler // contains filtered or unexported fields }
func NewHybridInboxSource ¶ added in v1.0.19
func NewHybridInboxSource(g *libkb.GlobalContext, getTlfInterface func() keybase1.TlfInterface, getChatInterface func() chat1.RemoteInterface, getSecretUI func() libkb.SecretUI, ) *HybridInboxSource
func (HybridInboxSource) Disconnected ¶ added in v1.0.19
func (*HybridInboxSource) NewConversation ¶ added in v1.0.19
func (s *HybridInboxSource) NewConversation(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, conv chat1.Conversation) (err error)
func (*HybridInboxSource) NewMessage ¶ added in v1.0.19
func (s *HybridInboxSource) NewMessage(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, convID chat1.ConversationID, msg chat1.MessageBoxed) (conv *chat1.ConversationLocal, err error)
func (*HybridInboxSource) Read ¶ added in v1.0.19
func (s *HybridInboxSource) Read(ctx context.Context, uid gregor1.UID, localizer interfaces.ChatLocalizer, useLocalData bool, query *chat1.GetInboxLocalQuery, p *chat1.Pagination) (inbox chat1.Inbox, rl *chat1.RateLimit, err error)
func (*HybridInboxSource) ReadMessage ¶ added in v1.0.19
func (s *HybridInboxSource) ReadMessage(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, convID chat1.ConversationID, msgID chat1.MessageID) (conv *chat1.ConversationLocal, err error)
func (*HybridInboxSource) ReadUnverified ¶ added in v1.0.19
func (s *HybridInboxSource) ReadUnverified(ctx context.Context, uid gregor1.UID, useLocalData bool, query *chat1.GetInboxQuery, p *chat1.Pagination) (res chat1.Inbox, rl *chat1.RateLimit, err error)
func (HybridInboxSource) SetRemoteInterface ¶ added in v1.0.19
func (b HybridInboxSource) SetRemoteInterface(ri func() chat1.RemoteInterface)
func (*HybridInboxSource) SetStatus ¶ added in v1.0.19
func (s *HybridInboxSource) SetStatus(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, convID chat1.ConversationID, status chat1.ConversationStatus) (conv *chat1.ConversationLocal, err error)
func (HybridInboxSource) SetTlfInterface ¶ added in v1.0.19
func (b HybridInboxSource) SetTlfInterface(ti func() keybase1.TlfInterface)
func (*HybridInboxSource) TlfFinalize ¶ added in v1.0.19
func (s *HybridInboxSource) TlfFinalize(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, convIDs []chat1.ConversationID, finalizeInfo chat1.ConversationFinalizeInfo) (convs []chat1.ConversationLocal, err error)
type IdentifyChangedHandler ¶ added in v1.0.19
type IdentifyChangedHandler struct { libkb.Contextified utils.DebugLabeler // contains filtered or unexported fields }
func NewIdentifyChangedHandler ¶ added in v1.0.19
func NewIdentifyChangedHandler(g *libkb.GlobalContext, tlf func() keybase1.TlfInterface) *IdentifyChangedHandler
func (*IdentifyChangedHandler) BackgroundIdentifyChanged ¶ added in v1.0.19
func (h *IdentifyChangedHandler) BackgroundIdentifyChanged(ctx context.Context, job engine.IdentifyJob)
func (*IdentifyChangedHandler) HandleUserChanged ¶ added in v1.0.19
func (h *IdentifyChangedHandler) HandleUserChanged(uid keybase1.UID) (err error)
type IdentifyNotifier ¶ added in v1.0.19
type IdentifyNotifier struct { libkb.Contextified utils.DebugLabeler sync.RWMutex // contains filtered or unexported fields }
func CtxIdentifyNotifier ¶ added in v1.0.19
func CtxIdentifyNotifier(ctx context.Context) *IdentifyNotifier
func NewIdentifyNotifier ¶ added in v1.0.19
func NewIdentifyNotifier(g *libkb.GlobalContext) *IdentifyNotifier
func (*IdentifyNotifier) Send ¶ added in v1.0.19
func (i *IdentifyNotifier) Send(update keybase1.CanonicalTLFNameAndIDWithBreaks)
type KeyFinder ¶
type KeyFinder interface {
Find(ctx context.Context, tlf keybase1.TlfInterface, tlfName string, tlfPublic bool) (keybase1.GetTLFCryptKeysRes, error)
}
KeyFinder remembers results from previous calls to CryptKeys().
func CtxKeyFinder ¶ added in v1.0.19
type KeyFinderImpl ¶
func (*KeyFinderImpl) Find ¶
func (k *KeyFinderImpl) Find(ctx context.Context, tlf keybase1.TlfInterface, tlfName string, tlfPublic bool) (keybase1.GetTLFCryptKeysRes, error)
Find finds keybase1.TLFCryptKeys for tlfName, checking for existing results.
type NonblockInboxResult ¶ added in v1.0.19
type NonblockInboxResult struct { ConvID chat1.ConversationID Err *chat1.ConversationErrorLocal ConvRes *chat1.ConversationLocal InboxRes *chat1.Inbox }
type NonblockingLocalizer ¶ added in v1.0.19
type NonblockingLocalizer struct { libkb.Contextified utils.DebugLabeler // contains filtered or unexported fields }
func NewNonblockingLocalizer ¶ added in v1.0.19
func NewNonblockingLocalizer(g *libkb.GlobalContext, localizeCb chan NonblockInboxResult, getTlfInterface func() keybase1.TlfInterface) *NonblockingLocalizer
func (*NonblockingLocalizer) Localize ¶ added in v1.0.19
func (b *NonblockingLocalizer) Localize(ctx context.Context, uid gregor1.UID, inbox chat1.Inbox) (res []chat1.ConversationLocal, err error)
func (*NonblockingLocalizer) Name ¶ added in v1.0.19
func (b *NonblockingLocalizer) Name() string
func (*NonblockingLocalizer) SetOffline ¶ added in v1.0.19
func (b *NonblockingLocalizer) SetOffline()
type NonblockingSender ¶ added in v1.0.19
type NonblockingSender struct { libkb.Contextified // contains filtered or unexported fields }
func NewNonblockingSender ¶ added in v1.0.19
func NewNonblockingSender(g *libkb.GlobalContext, sender Sender) *NonblockingSender
func (*NonblockingSender) Prepare ¶ added in v1.0.19
func (s *NonblockingSender) Prepare(ctx context.Context, plaintext chat1.MessagePlaintext, convID *chat1.ConversationID) (*chat1.MessageBoxed, []chat1.Asset, error)
type OfflineError ¶ added in v1.0.19
type OfflineError struct { }
func (OfflineError) Error ¶ added in v1.0.19
func (e OfflineError) Error() string
type PermanentUnboxingError ¶ added in v1.0.19
type PermanentUnboxingError struct {
// contains filtered or unexported fields
}
func (PermanentUnboxingError) Error ¶ added in v1.0.19
func (e PermanentUnboxingError) Error() string
func (PermanentUnboxingError) ExportType ¶ added in v1.0.19
func (e PermanentUnboxingError) ExportType() chat1.MessageUnboxedErrorType
func (PermanentUnboxingError) Inner ¶ added in v1.0.19
func (e PermanentUnboxingError) Inner() error
func (PermanentUnboxingError) IsPermanent ¶ added in v1.0.19
func (e PermanentUnboxingError) IsPermanent() bool
type PreviewRes ¶ added in v1.0.19
type ProgressReporter ¶
type ProgressReporter func(bytesCompleted, bytesTotal int)
type PushHandler ¶ added in v1.0.19
type PushHandler struct { libkb.Contextified utils.DebugLabeler // contains filtered or unexported fields }
func NewPushHandler ¶ added in v1.0.19
func NewPushHandler(g *libkb.GlobalContext) *PushHandler
func (*PushHandler) Activity ¶ added in v1.0.19
func (g *PushHandler) Activity(ctx context.Context, m gregor.OutOfBandMessage, badger *badges.Badger) error
func (*PushHandler) TlfFinalize ¶ added in v1.0.19
func (g *PushHandler) TlfFinalize(ctx context.Context, m gregor.OutOfBandMessage) error
func (*PushHandler) TlfResolve ¶ added in v1.0.19
func (g *PushHandler) TlfResolve(ctx context.Context, m gregor.OutOfBandMessage) error
type PutS3Result ¶
PutS3Result is the success result of calling PutS3.
type ReadResetter ¶ added in v1.0.19
type RemoteConversationSource ¶
type RemoteConversationSource struct { libkb.Contextified // contains filtered or unexported fields }
func NewRemoteConversationSource ¶
func NewRemoteConversationSource(g *libkb.GlobalContext, b *Boxer, ri func() chat1.RemoteInterface, si func() libkb.SecretUI) *RemoteConversationSource
func (*RemoteConversationSource) Clear ¶
func (s *RemoteConversationSource) Clear(convID chat1.ConversationID, uid gregor1.UID) error
func (RemoteConversationSource) Disconnected ¶ added in v1.0.19
func (*RemoteConversationSource) GetMessages ¶ added in v1.0.19
func (s *RemoteConversationSource) GetMessages(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, msgIDs []chat1.MessageID, finalizeInfo *chat1.ConversationFinalizeInfo) ([]chat1.MessageUnboxed, error)
func (*RemoteConversationSource) GetMessagesWithRemotes ¶ added in v1.0.19
func (s *RemoteConversationSource) GetMessagesWithRemotes(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, msgs []chat1.MessageBoxed, finalizeInfo *chat1.ConversationFinalizeInfo) ([]chat1.MessageUnboxed, error)
func (RemoteConversationSource) IsOffline ¶ added in v1.0.19
func (s RemoteConversationSource) IsOffline() bool
func (*RemoteConversationSource) Pull ¶
func (s *RemoteConversationSource) Pull(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, query *chat1.GetThreadQuery, pagination *chat1.Pagination) (chat1.ThreadView, []*chat1.RateLimit, error)
func (*RemoteConversationSource) PullLocalOnly ¶ added in v1.0.19
func (s *RemoteConversationSource) PullLocalOnly(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, query *chat1.GetThreadQuery, pagination *chat1.Pagination) (chat1.ThreadView, error)
func (*RemoteConversationSource) Push ¶
func (s *RemoteConversationSource) Push(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, msg chat1.MessageBoxed) (chat1.MessageUnboxed, bool, error)
func (RemoteConversationSource) SetRemoteInterface ¶ added in v1.0.19
func (s RemoteConversationSource) SetRemoteInterface(ri func() chat1.RemoteInterface)
func (RemoteConversationSource) SetTlfInterface ¶ added in v1.0.19
func (s RemoteConversationSource) SetTlfInterface(ti func() keybase1.TlfInterface)
func (RemoteConversationSource) TransformSupersedes ¶ added in v1.0.19
func (s RemoteConversationSource) TransformSupersedes(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, msgs []chat1.MessageUnboxed, finalizeInfo *chat1.ConversationFinalizeInfo) ([]chat1.MessageUnboxed, error)
type RemoteInboxSource ¶ added in v1.0.19
type RemoteInboxSource struct { libkb.Contextified utils.DebugLabeler // contains filtered or unexported fields }
func NewRemoteInboxSource ¶ added in v1.0.19
func NewRemoteInboxSource(g *libkb.GlobalContext, ri func() chat1.RemoteInterface, tlf func() keybase1.TlfInterface) *RemoteInboxSource
func (RemoteInboxSource) Disconnected ¶ added in v1.0.19
func (*RemoteInboxSource) NewConversation ¶ added in v1.0.19
func (s *RemoteInboxSource) NewConversation(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, conv chat1.Conversation) error
func (*RemoteInboxSource) NewMessage ¶ added in v1.0.19
func (s *RemoteInboxSource) NewMessage(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, convID chat1.ConversationID, msg chat1.MessageBoxed) (*chat1.ConversationLocal, error)
func (*RemoteInboxSource) Read ¶ added in v1.0.19
func (s *RemoteInboxSource) Read(ctx context.Context, uid gregor1.UID, localizer interfaces.ChatLocalizer, useLocalData bool, query *chat1.GetInboxLocalQuery, p *chat1.Pagination) (chat1.Inbox, *chat1.RateLimit, error)
func (*RemoteInboxSource) ReadMessage ¶ added in v1.0.19
func (s *RemoteInboxSource) ReadMessage(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, convID chat1.ConversationID, msgID chat1.MessageID) (*chat1.ConversationLocal, error)
func (*RemoteInboxSource) ReadUnverified ¶ added in v1.0.19
func (s *RemoteInboxSource) ReadUnverified(ctx context.Context, uid gregor1.UID, useLocalData bool, rquery *chat1.GetInboxQuery, p *chat1.Pagination) (chat1.Inbox, *chat1.RateLimit, error)
func (RemoteInboxSource) SetRemoteInterface ¶ added in v1.0.19
func (b RemoteInboxSource) SetRemoteInterface(ri func() chat1.RemoteInterface)
func (*RemoteInboxSource) SetStatus ¶ added in v1.0.19
func (s *RemoteInboxSource) SetStatus(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, convID chat1.ConversationID, status chat1.ConversationStatus) (*chat1.ConversationLocal, error)
func (RemoteInboxSource) SetTlfInterface ¶ added in v1.0.19
func (b RemoteInboxSource) SetTlfInterface(ti func() keybase1.TlfInterface)
func (*RemoteInboxSource) TlfFinalize ¶ added in v1.0.19
func (s *RemoteInboxSource) TlfFinalize(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, convIDs []chat1.ConversationID, finalizeInfo chat1.ConversationFinalizeInfo) ([]chat1.ConversationLocal, error)
type Sender ¶ added in v1.0.19
type Sender interface { Send(ctx context.Context, convID chat1.ConversationID, msg chat1.MessagePlaintext, clientPrev chat1.MessageID) (chat1.OutboxID, chat1.MessageID, *chat1.RateLimit, error) Prepare(ctx context.Context, msg chat1.MessagePlaintext, convID *chat1.ConversationID) (*chat1.MessageBoxed, []chat1.Asset, error) }
type SignDecrypter ¶
type SignDecrypter struct{}
func NewSignDecrypter ¶
func NewSignDecrypter() *SignDecrypter
func (*SignDecrypter) DecryptWithNonce ¶ added in v1.0.19
func (s *SignDecrypter) DecryptWithNonce(r io.Reader, nonce signencrypt.Nonce, encKey, verifyKey []byte) (plaintext io.Reader)
type SignEncrypter ¶
type SignEncrypter struct {
// contains filtered or unexported fields
}
func NewSignEncrypter ¶
func NewSignEncrypter() *SignEncrypter
func (*SignEncrypter) EncryptKey ¶
func (s *SignEncrypter) EncryptKey() []byte
func (*SignEncrypter) EncryptResume ¶ added in v1.0.19
func (s *SignEncrypter) EncryptResume(r io.Reader, nonce signencrypt.Nonce, encKey signencrypt.SecretboxKey, signKey signencrypt.SignKey, verifyKey signencrypt.VerifyKey) (io.Reader, error)
EncryptResume is used to create a SignEncrypter to resume an interrupted attachment upload. It is *very* important that the keys passed in are not used to encrypt different plaintext than their original usage.
func (*SignEncrypter) EncryptWithNonce ¶ added in v1.0.19
func (s *SignEncrypter) EncryptWithNonce(r io.Reader, nonce signencrypt.Nonce) (io.Reader, error)
func (*SignEncrypter) EncryptedLen ¶
func (s *SignEncrypter) EncryptedLen(size int) int
func (*SignEncrypter) SignKey ¶ added in v1.0.19
func (s *SignEncrypter) SignKey() []byte
func (*SignEncrypter) VerifyKey ¶
func (s *SignEncrypter) VerifyKey() []byte
type StashKey ¶ added in v1.0.19
type StashKey struct { PlaintextHash []byte ConversationID chat1.ConversationID UserID keybase1.UID }
func NewStashKey ¶ added in v1.0.19
type Syncer ¶ added in v1.0.19
type Syncer struct { libkb.Contextified utils.DebugLabeler // contains filtered or unexported fields }
func NewSyncer ¶ added in v1.0.19
func NewSyncer(g *libkb.GlobalContext) *Syncer
func (*Syncer) Disconnected ¶ added in v1.0.19
func (*Syncer) RegisterOfflinable ¶ added in v1.0.19
func (s *Syncer) RegisterOfflinable(offlinable interfaces.Offlinable)
func (*Syncer) SendChatStaleNotifications ¶ added in v1.0.19
type TLFInfo ¶ added in v1.0.19
type TLFInfo struct { ID chat1.TLFID CanonicalName string IdentifyFailures []keybase1.TLFIdentifyFailure }
func GetInboxQueryTLFInfo ¶ added in v1.0.19
func GetInboxQueryTLFInfo(ctx context.Context, tlfInterface keybase1.TlfInterface, lquery *chat1.GetInboxLocalQuery) (*TLFInfo, error)
type TransientUnboxingError ¶ added in v1.0.19
type TransientUnboxingError struct {
// contains filtered or unexported fields
}
func (TransientUnboxingError) Error ¶ added in v1.0.19
func (e TransientUnboxingError) Error() string
func (TransientUnboxingError) ExportType ¶ added in v1.0.19
func (e TransientUnboxingError) ExportType() chat1.MessageUnboxedErrorType
func (TransientUnboxingError) Inner ¶ added in v1.0.19
func (e TransientUnboxingError) Inner() error
func (TransientUnboxingError) IsPermanent ¶ added in v1.0.19
func (e TransientUnboxingError) IsPermanent() bool
type UnboxingError ¶ added in v1.0.19
type UnboxingError interface { Error() string Inner() error IsPermanent() bool ExportType() chat1.MessageUnboxedErrorType }
func NewPermanentUnboxingError ¶ added in v1.0.19
func NewPermanentUnboxingError(inner error) UnboxingError
func NewTransientUnboxingError ¶ added in v1.0.19
func NewTransientUnboxingError(inner error) UnboxingError
type UploadTask ¶ added in v1.0.19
type UploadTask struct { S3Params chat1.S3Params Filename string FileSize int Plaintext ReadResetter S3Signer s3.Signer ConversationID chat1.ConversationID UserID keybase1.UID Progress ProgressReporter // contains filtered or unexported fields }
func (*UploadTask) Nonce ¶ added in v1.0.19
func (u *UploadTask) Nonce() signencrypt.Nonce
type VersionError ¶ added in v1.0.19
func NewBodyVersionError ¶ added in v1.0.19
func NewBodyVersionError(version chat1.BodyPlaintextVersion, defaultBody chat1.BodyPlaintextUnsupported) VersionError
func NewHeaderVersionError ¶ added in v1.0.19
func NewHeaderVersionError(version chat1.HeaderPlaintextVersion, defaultHeader chat1.HeaderPlaintextUnsupported) VersionError
func NewMessageBoxedVersionError ¶ added in v1.0.19
func NewMessageBoxedVersionError(version chat1.MessageBoxedVersion) VersionError
func (VersionError) Error ¶ added in v1.0.19
func (e VersionError) Error() string
func (VersionError) ExportType ¶ added in v1.0.19
func (e VersionError) ExportType() chat1.MessageUnboxedErrorType