syntax = "proto2"; package pubsub.pb; message RPC { repeated SubOpts subscriptions = 1; repeated Message publish = 2; message SubOpts { optional bool subscribe = 1; // subscribe or unsubcribe optional string topicid = 2; } optional ControlMessage control = 3; } message Message { optional bytes from = 1; optional bytes data = 2; optional bytes seqno = 3; optional string topic = 4; optional bytes signature = 5; optional bytes key = 6; } message ControlMessage { repeated ControlIHave ihave = 1; repeated ControlIWant iwant = 2; repeated ControlGraft graft = 3; repeated ControlPrune prune = 4; repeated ControlIDontWant idontwant = 5; } message ControlIHave { optional string topicID = 1; // implementors from other languages should use bytes here - go protobuf emits invalid utf8 strings repeated string messageIDs = 2; } message ControlIWant { // implementors from other languages should use bytes here - go protobuf emits invalid utf8 strings repeated string messageIDs = 1; } message ControlGraft { optional string topicID = 1; } message ControlPrune { optional string topicID = 1; repeated PeerInfo peers = 2; optional uint64 backoff = 3; } message ControlIDontWant { // implementors from other languages should use bytes here - go protobuf emits invalid utf8 strings repeated string messageIDs = 1; } message PeerInfo { optional bytes peerID = 1; optional bytes signedPeerRecord = 2; }