51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// MessageWrapper is the canonical Cwtch overlay wrapper
|
|
type MessageWrapper struct {
|
|
Overlay int `json:"o"`
|
|
Data string `json:"d"`
|
|
|
|
// when the data was assembled
|
|
SendTime *time.Time `json:"s,omitempty"`
|
|
|
|
// when the data was transmitted (by protocol engine e.g. over Tor)
|
|
TransitTime *time.Time `json:"t,omitempty"`
|
|
|
|
// when the data was received
|
|
RecvTime *time.Time `json:"r,omitempty"`
|
|
}
|
|
|
|
// Channel is defined as being the last 3 bits of the overlay id
|
|
// Channel 0 is reserved for the main conversation
|
|
// Channel 2 is reserved for conversation admin (managed groups)
|
|
// Channel 7 is reserved for streams (no ack, no store)
|
|
func (mw MessageWrapper) Channel() int {
|
|
if mw.Overlay > 1024 {
|
|
return mw.Overlay & 0x07
|
|
}
|
|
// for backward compatibilty all overlays less than 0x400 i.e. 1024 are
|
|
// mapped to channel 0 regardless of their channel status.
|
|
return 0
|
|
}
|
|
|
|
// If Overlay is a Stream Message it should not be ackd, or stored.
|
|
func (mw MessageWrapper) IsStream() bool {
|
|
return mw.Channel() == 0x07
|
|
}
|
|
|
|
// OverlayChat is the canonical identifier for chat overlays
|
|
const OverlayChat = 1
|
|
|
|
// OverlayInviteContact is the canonical identifier for the contact invite overlay
|
|
const OverlayInviteContact = 100
|
|
|
|
// OverlayInviteGroup is the canonical identifier for the group invite overlay
|
|
const OverlayInviteGroup = 101
|
|
|
|
// OverlayFileSharing is the canonical identifier for the file sharing overlay
|
|
const OverlayFileSharing = 200
|