package textsecure;

option java_package = "org.whispersystems.textsecure.push";
option java_outer_classname = "PushMessageProtos";

message IncomingPushMessageSignal {
  enum Type {
    UNKNOWN       = 0;
    CIPHERTEXT    = 1;
    KEY_EXCHANGE  = 2;
    PREKEY_BUNDLE = 3;
    PLAINTEXT     = 4;
    RECEIPT       = 5;
  }
  optional Type   type         = 1;
  optional string source       = 2;
  optional uint32 sourceDevice = 7;
  optional string relay        = 3;
  optional uint64 timestamp    = 5;
  optional bytes  message      = 6; // Contains an encrypted PushMessageContent
//  repeated string destinations = 4; // No longer supported
}

message PushMessageContent {
  message AttachmentPointer {
    optional fixed64 id          = 1;
    optional string  contentType = 2;
    optional bytes   key         = 3;
  }

  message GroupContext {
    enum Type {
      UNKNOWN = 0;
      UPDATE  = 1;
      DELIVER = 2;
      QUIT    = 3;
    }
    optional bytes             id      = 1;
    optional Type              type    = 2;
    optional string            name    = 3;
    repeated string            members = 4;
    optional AttachmentPointer avatar  = 5;
  }

  message SyncMessageContext {
    optional string destination = 1;
    optional uint64 timestamp   = 2;
  }

  enum Flags {
    END_SESSION = 1;
  }

  optional string             body        = 1;
  repeated AttachmentPointer  attachments = 2;
  optional GroupContext       group       = 3;
  optional uint32             flags       = 4;
  optional SyncMessageContext sync        = 5;
}
