session-ios/SessionMessagingKit/Protos/SessionProtos.proto

318 lines
8.3 KiB
Protocol Buffer
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// iOS - since we use a modern proto-compiler, we must specify the legacy proto format.
syntax = "proto2";
// iOS - package name determines class prefix
package SessionProtos;
message Envelope {
enum Type {
SESSION_MESSAGE = 6;
CLOSED_GROUP_MESSAGE = 7;
}
// @required
required Type type = 1;
optional string source = 2;
optional uint32 sourceDevice = 7;
// @required
required uint64 timestamp = 5;
optional bytes content = 8;
optional uint64 serverTimestamp = 10;
}
message TypingMessage {
enum Action {
STARTED = 0;
STOPPED = 1;
}
// @required
required uint64 timestamp = 1;
// @required
required Action action = 2;
}
message Content {
optional DataMessage dataMessage = 1;
optional ReceiptMessage receiptMessage = 5;
optional TypingMessage typingMessage = 6;
optional ConfigurationMessage configurationMessage = 7;
optional DataExtractionNotification dataExtractionNotification = 8;
}
message CallMessage {
message Offer {
enum Type {
OFFER_AUDIO_CALL = 0;
OFFER_VIDEO_CALL = 1;
// next index 3, skip 2 it was the unused "NEED_PERMISSION" type
}
// @required
optional uint64 id = 1;
// Legacy/deprecated; replaced by 'opaque'
optional string sdp = 2;
optional Type type = 3;
optional bytes opaque = 4;
}
message Answer {
// @required
optional uint64 id = 1;
// Legacy/deprecated; replaced by 'opaque'
optional string sdp = 2;
optional bytes opaque = 3;
}
message IceUpdate {
// @required
optional uint64 id = 1;
// Legacy/deprecated; remove when old clients are gone.
optional string mid = 2;
// Legacy/deprecated; remove when old clients are gone.
optional uint32 line = 3;
// Legacy/deprecated; replaced by 'opaque'
optional string sdp = 4;
optional bytes opaque = 5;
}
message Busy {
// @required
optional uint64 id = 1;
}
message Hangup {
enum Type {
HANGUP_NORMAL = 0;
HANGUP_ACCEPTED = 1;
HANGUP_DECLINED = 2;
HANGUP_BUSY = 3;
HANGUP_NEED_PERMISSION = 4;
}
// @required
optional uint64 id = 1;
optional Type type = 2;
optional uint32 deviceId = 3;
}
message Opaque {
optional bytes data = 1;
}
optional Offer offer = 1;
optional Answer answer = 2;
repeated IceUpdate iceUpdate = 3;
optional Hangup legacyHangup = 4;
optional Busy busy = 5;
// Signal-iOS sends profile key with call messages
// for earlier discovery.
optional bytes profileKey = 6;
optional Hangup hangup = 7;
optional bool supportsMultiRing = 8;
optional uint32 destinationDeviceId = 9;
optional Opaque opaque = 10;
}
message KeyPair {
// @required
required bytes publicKey = 1;
// @required
required bytes privateKey = 2;
}
message DataExtractionNotification {
enum Type {
SCREENSHOT = 1;
MEDIA_SAVED = 2; // timestamp
}
// @required
required Type type = 1;
optional uint64 timestamp = 2;
}
message DataMessage {
enum Flags {
EXPIRATION_TIMER_UPDATE = 2;
}
message Quote {
message QuotedAttachment {
enum Flags {
VOICE_MESSAGE = 1;
}
optional string contentType = 1;
optional string fileName = 2;
optional AttachmentPointer thumbnail = 3;
optional uint32 flags = 4;
}
// @required
required uint64 id = 1;
// @required
required string author = 2;
optional string text = 3;
repeated QuotedAttachment attachments = 4;
}
message Preview {
// @required
required string url = 1;
optional string title = 2;
optional AttachmentPointer image = 3;
}
message LokiProfile {
optional string displayName = 1;
optional string profilePicture = 2;
}
message OpenGroupInvitation {
// @required
required string url = 1;
// @required
required string name = 3;
}
message ClosedGroupControlMessage {
enum Type {
NEW = 1; // publicKey, name, encryptionKeyPair, members, admins, expirationTimer
ENCRYPTION_KEY_PAIR = 3; // publicKey, wrappers
NAME_CHANGE = 4; // name
MEMBERS_ADDED = 5; // members
MEMBERS_REMOVED = 6; // members
MEMBER_LEFT = 7;
ENCRYPTION_KEY_PAIR_REQUEST = 8;
}
message KeyPairWrapper {
// @required
required bytes publicKey = 1; // The public key of the user the key pair is meant for
// @required
required bytes encryptedKeyPair = 2; // The encrypted key pair
}
// @required
required Type type = 1;
optional bytes publicKey = 2;
optional string name = 3;
optional KeyPair encryptionKeyPair = 4;
repeated bytes members = 5;
repeated bytes admins = 6;
repeated KeyPairWrapper wrappers = 7;
optional uint32 expirationTimer = 8;
}
message GroupCallUpdate {
optional string eraId = 1;
}
optional string body = 1;
repeated AttachmentPointer attachments = 2;
optional GroupContext group = 3;
optional uint32 flags = 4;
optional uint32 expireTimer = 5;
optional bytes profileKey = 6;
optional uint64 timestamp = 7;
optional Quote quote = 8;
repeated Preview preview = 10;
optional GroupCallUpdate groupCallUpdate = 19;
optional LokiProfile profile = 101;
optional OpenGroupInvitation openGroupInvitation = 102;
optional ClosedGroupControlMessage closedGroupControlMessage = 104;
optional string syncTarget = 105;
}
message ConfigurationMessage {
message ClosedGroup {
optional bytes publicKey = 1;
optional string name = 2;
optional KeyPair encryptionKeyPair = 3;
repeated bytes members = 4;
repeated bytes admins = 5;
optional uint32 expirationTimer = 6;
}
message Contact {
// @required
required bytes publicKey = 1;
// @required
required string name = 2;
optional string profilePicture = 3;
optional bytes profileKey = 4;
}
repeated ClosedGroup closedGroups = 1;
repeated string openGroups = 2;
optional string displayName = 3;
optional string profilePicture = 4;
optional bytes profileKey = 5;
repeated Contact contacts = 6;
}
message ReceiptMessage {
enum Type {
DELIVERY = 0;
READ = 1;
}
// @required
required Type type = 1;
repeated uint64 timestamp = 2;
}
message AttachmentPointer {
enum Flags {
VOICE_MESSAGE = 1;
}
// @required
required fixed64 id = 1;
optional string contentType = 2;
optional bytes key = 3;
optional uint32 size = 4;
optional bytes thumbnail = 5;
optional bytes digest = 6;
optional string fileName = 7;
optional uint32 flags = 8;
optional uint32 width = 9;
optional uint32 height = 10;
optional string caption = 11;
optional string url = 101;
}
message GroupContext {
enum Type {
UNKNOWN = 0;
UPDATE = 1;
DELIVER = 2;
QUIT = 3;
REQUEST_INFO = 4;
}
// @required
optional bytes id = 1;
// @required
optional Type type = 2;
optional string name = 3;
repeated string members = 4;
optional AttachmentPointer avatar = 5;
repeated string admins = 6;
}